From daf9931ca34feae0ba0053ac0b19008f9d7f5793 Mon Sep 17 00:00:00 2001 From: Ian Wright Date: Wed, 29 Apr 2020 15:54:06 +0100 Subject: [PATCH 1/4] add valgrind memory leak tests; add a memory leak --- docs/build.md | 8 ++++++++ src/CMakeLists.txt | 6 ++++++ tests/run_tests.sh | 5 ++++- tests/tuple_binding_test.cpp | 7 +++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/build.md b/docs/build.md index 42da8ac..bd38465 100644 --- a/docs/build.md +++ b/docs/build.md @@ -1,6 +1,14 @@ # Overview of the build system `datalog-cpp` uses the [CMake](www.cmake.org) build tool to generate build files for other build systems. Currently, building using clang and gcc with Makefiles are supported. +You `valgrind` installed to run memory checks: `sudo apt install valgrind` + +To run all regression tests: +``` +cd tests +./run_tests.sh +``` + # Building with Makefiles From the command line inside a git clone, run the following: ``` diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3bbdeb5..5ded485 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,9 @@ project("datalog-cpp") # specify the C++ standard set(CMAKE_CXX_STANDARD 17) +# cpp memory checker +include (CTest) + # unit-test library add_library(tests_main STATIC ../tests/tests_main.cpp) @@ -29,15 +32,18 @@ add_executable(types_test ../tests/types_test.cpp) target_include_directories(types_test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(types_test tests_main) target_compile_definitions(types_test PUBLIC UNIX) +add_test(types_test_memory types_test) # variable_test target add_executable(variable_test ../tests/variable_test.cpp) target_include_directories(variable_test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(variable_test tests_main) target_compile_definitions(variable_test PUBLIC UNIX) +add_test(variable_test_memory variable_test) # tuple_binding_test target add_executable(tuple_binding_test ../tests/tuple_binding_test.cpp) target_include_directories(tuple_binding_test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(tuple_binding_test tests_main) target_compile_definitions(tuple_binding_test PUBLIC UNIX) +add_test(tuple_binding_test_memory tuple_binding_test) diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 2aead19..f333093 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -1,5 +1,8 @@ #!/bin/bash set -e +echo "Running tests" ../build/types_test ../build/variable_test -../build/tuple_binding_test \ No newline at end of file +../build/tuple_binding_test +echo "Checking for memory leaks" +cd ../build; ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=1" -T memcheck \ No newline at end of file diff --git a/tests/tuple_binding_test.cpp b/tests/tuple_binding_test.cpp index 5a76daa..521489d 100644 --- a/tests/tuple_binding_test.cpp +++ b/tests/tuple_binding_test.cpp @@ -15,7 +15,14 @@ bool unbindTest() return returnVal; } +bool leakTest() { + double* leak = new double[10]; + std::cout << "Hello!" << std::endl; + return true; +} + TEST_CASE("tuple binding test", "[tuple-binding]") { REQUIRE(unbindTest()); + REQUIRE(leakTest()); } From e8a1b3b4bb852c061032910b9ae831987dfa9c1f Mon Sep 17 00:00:00 2001 From: Ian Wright Date: Wed, 29 Apr 2020 15:58:08 +0100 Subject: [PATCH 2/4] add valgrind --- .github/workflows/linux_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/linux_check.yml b/.github/workflows/linux_check.yml index efd0549..841beac 100644 --- a/.github/workflows/linux_check.yml +++ b/.github/workflows/linux_check.yml @@ -10,6 +10,7 @@ jobs: - uses: actions/checkout@v2 - name: build run: | + sudo apt install -y valgrind mkdir build && cd build cmake ../src make From b56608b7da58c57e66d0fd735dcc4e8823b1dfaa Mon Sep 17 00:00:00 2001 From: Ian Wright Date: Wed, 29 Apr 2020 17:08:46 +0100 Subject: [PATCH 3/4] text fix of memory leak --- tests/tuple_binding_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tuple_binding_test.cpp b/tests/tuple_binding_test.cpp index 521489d..3ecc099 100644 --- a/tests/tuple_binding_test.cpp +++ b/tests/tuple_binding_test.cpp @@ -18,6 +18,7 @@ bool unbindTest() bool leakTest() { double* leak = new double[10]; std::cout << "Hello!" << std::endl; + delete leak; return true; } From 2e1e780e03f05cc526cfc908853ce7288d30c38f Mon Sep 17 00:00:00 2001 From: Ian Wright Date: Wed, 29 Apr 2020 17:12:40 +0100 Subject: [PATCH 4/4] really fix memory leak --- tests/tuple_binding_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tuple_binding_test.cpp b/tests/tuple_binding_test.cpp index 3ecc099..6cb56c0 100644 --- a/tests/tuple_binding_test.cpp +++ b/tests/tuple_binding_test.cpp @@ -18,7 +18,7 @@ bool unbindTest() bool leakTest() { double* leak = new double[10]; std::cout << "Hello!" << std::endl; - delete leak; + delete[] leak; return true; }