diff --git a/CMakeLists.txt b/CMakeLists.txt index 096d46310f2a724e4ac5bca2bc82a37c86ec9ecb..0096c312d27616859be17d96f377ec0aa0143f8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,11 +24,21 @@ IF (NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "DEBUG") ENDIF (NOT CMAKE_BUILD_TYPE) -SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall") -SET(CMAKE_CXX_FLAGS_RELEASE "-O3") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -D_REENTRANT") +SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -D_REENTRANT -O0 --coverage -fprofile-arcs") +SET(CMAKE_LINK_FLAGS_DEBUG "--coverage -fprofile-arcs") + +# +# Add ctest +# +INCLUDE(CTest) ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(test/gtest) + +ADD_SUBDIRECTORY(test) + FIND_PACKAGE(Doxygen) FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/) diff --git a/src/mutex/mutex.cpp b/src/mutex/mutex.cpp index 88e7f3fbcc553bcac860a607843caf0680f721eb..f4dbee4d07306f4895b747a0d6946f7a4e4ee5d3 100644 --- a/src/mutex/mutex.cpp +++ b/src/mutex/mutex.cpp @@ -76,6 +76,8 @@ CMutex::~CMutex() { int error=0; + this->try_enter(); + this->exit(); if((error=pthread_mutex_destroy(&this->access))!=0) { /* handle exception */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..9147fd59f90adae46a607d3e2e9e3b8c32edaf9a --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,16 @@ +include_directories(${GTEST_INCLUDE_DIRS}) +include_directories(${GMOCK_INCLUDE_DIRS}) + +include_directories(${PROJECT_SOURCE_DIR}/src/mutex) + +set(CTEST_CUSTOM_COVERAGE_EXCLUDE *) + +add_executable(mutex_tests mutex/mutex_test.cpp) +add_dependencies(mutex_tests googletest) + +target_link_libraries(mutex_tests ${PROJECT_SOURCE_DIR}/lib/libiriutils.so) +target_link_libraries(mutex_tests ${GTEST_LIBS_DIR}/libgtest.a ${GTEST_LIBS_DIR}/libgtest_main.a) +target_link_libraries(mutex_tests ${GMOCK_LIBS_DIR}/libgmock.a ${GMOCK_LIBS_DIR}/libgmock_main.a) +target_link_libraries(mutex_tests pthread) + +add_test(NAME Mutex_Test COMMAND mutex_tests) diff --git a/test/gtest/CMakeLists.txt b/test/gtest/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b7d7826b235fd3c362e72a871d6fd45a77d22c6 --- /dev/null +++ b/test/gtest/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 2.8.8) +project(gtest_builder C CXX) +include(ExternalProject) + +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs + -DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS} + -Dgtest_force_shared_crt=ON + -DBUILD_GTEST=ON + PREFIX "${CMAKE_CURRENT_BINARY_DIR}" +# Disable install step + INSTALL_COMMAND "" +) + +# Specify include dir +ExternalProject_Get_Property(googletest source_dir) +set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE) +set(GMOCK_INCLUDE_DIRS ${source_dir}/googlemock/include PARENT_SCOPE) + +# Specify MainTest's link libraries +ExternalProject_Get_Property(googletest binary_dir) +set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE) +set(GMOCK_LIBS_DIR ${binary_dir}/googlemock PARENT_SCOPE) + + + diff --git a/test/mutex/mutex_test.cpp b/test/mutex/mutex_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3398c9707fe6a4048432f69d4ad40305a0963fd1 --- /dev/null +++ b/test/mutex/mutex_test.cpp @@ -0,0 +1,21 @@ +// tests.cpp +#include "mutex.h" +#include <gtest/gtest.h> + +TEST(mutexTest, try_enterSuccess) { + CMutex mutex; + ASSERT_TRUE(mutex.try_enter()); + mutex.exit(); + ASSERT_TRUE(mutex.try_enter()); +} + +TEST(mutexTest, try_enterFailure) { + CMutex mutex; + mutex.enter(); + ASSERT_FALSE(mutex.try_enter()); +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}