diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5509e7..4754e0e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,20 +1,17 @@ -image: "ubuntu:latest" +image: "matrim/cmake-examples:3.10.3" stages: - build - test - sanitizer -before_script: - - apt update; apt-get install --yes --force-yes build-essential cmake - build_cmake: stage: build script: ./ci_scripts/build_cmake_release.sh artifacts: paths: - - cmake-build-release/bin/ + - release/ run_tests: stage: test @@ -25,6 +22,3 @@ run_thread_sanitizer: stage: sanitizer script: ./ci_scripts/run_thread_sanitizer.sh - artifacts: - paths: - - "./cmake-build-release-thread-sanitizer/sanitizer.log.*" diff --git a/ci_scripts/build_cmake_release.sh b/ci_scripts/build_cmake_release.sh index d962672..31df3ae 100755 --- a/ci_scripts/build_cmake_release.sh +++ b/ci_scripts/build_cmake_release.sh @@ -5,5 +5,12 @@ cd cmake-build-release cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DTHREAD_SANITIZER=OFF make +rm -r -f ../release +mkdir ../release +cp -r bin/ ../release/bin +cp -r lib/ ../release/lib +cp -r ../lib/pls/include/ ../release/include/ +rm -f -r ../release/lib/pls + # echo the result of make to show it in gitlab exit $? diff --git a/ci_scripts/run_thread_sanitizer.sh b/ci_scripts/run_thread_sanitizer.sh index 0bb65f7..0664c0c 100755 --- a/ci_scripts/run_thread_sanitizer.sh +++ b/ci_scripts/run_thread_sanitizer.sh @@ -1,16 +1,12 @@ #!/usr/bin/env bash mkdir cmake-build-release-thread-sanitizer -cd cmake-build-release +cd cmake-build-release-thread-sanitizer cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DTHREAD_SANITIZER=ON make # run the actual tests with sanitizer enabled, reporting the result -TSAN_OPTIONS="log_path=sanitizer.log exitcode=1" ./bin/tests +TSAN_OPTIONS="exitcode=1" ./bin/tests STATUS_CODE=$? -# rename the output log... -mv sanitizer.log.* sanitizer.log -touch sanitizer.log - exit $STATUS_CODE diff --git a/test/thread_tests.cpp b/test/thread_tests.cpp index 06fe9db..4ac6740 100644 --- a/test/thread_tests.cpp +++ b/test/thread_tests.cpp @@ -7,6 +7,8 @@ using namespace pls::internal::base; using namespace std; static bool visited; +static int local_value_1; +static vector local_value_two; TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") { visited = false; @@ -18,10 +20,13 @@ TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") { } TEST_CASE( "thread state", "[internal/base/thread.h]") { - auto t1 = create_thread([]() { REQUIRE(*this_thread::state() == 1); }, 1); - auto t2 = create_thread([]() { REQUIRE(*this_thread::state>() == vector{1, 2}); }, vector{1, 2}); + auto t1 = create_thread([]() { local_value_1 = *this_thread::state(); }, 1); + auto t2 = create_thread([]() { local_value_two = *this_thread::state>(); }, vector{1, 2}); t1.start(); t2.start(); t1.join(); t2.join(); + + REQUIRE(local_value_1 == 1); + REQUIRE(local_value_two == vector{1, 2}); }