diff --git a/.github/workflows/C_Integration.yml b/.github/workflows/C_Integration.yml new file mode 100644 index 0000000..a707390 --- /dev/null +++ b/.github/workflows/C_Integration.yml @@ -0,0 +1,66 @@ +name: CMake + +on: [push] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-20.04 + + steps: + - name: Install gtest manually + run: sudo apt install googletest libgtest-dev lcov + - uses: actions/checkout@v2 + + - name: Create Build Environment + # Some projects don't allow in-source building, so create a separate build directory + # We'll use this as our working directory for all subsequent commands + run: cmake -E make_directory ${{runner.workspace}}/build + + - name: Configure CMake + # Use a bash shell so we can use the same syntax for environment variable + # access regardless of the host operating system + shell: bash + working-directory: ${{runner.workspace}}/build + # Note the current convention is to use the -S and -B options here to specify source + # and build directories, but this is only available with CMake 3.13 and higher. + # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 + run: cmake $GITHUB_WORKSPACE/src/unittests -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCODE_COVERAGE=ON -DENABLE_COVERAGE=ON + + - name: Build + working-directory: ${{runner.workspace}}/build + shell: bash + # Execute the build. You can specify a specific target with "--target " + run: cmake --build . --config $BUILD_TYPE + + - name: Run tests + working-directory: ${{runner.workspace}}/build + shell: bash + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -V -C $BUILD_TYPE + + - name: Run Gcov/Lcov and push report to Codecov + working-directory: ${{github.workspace}} + shell: bash + run: | + find ${{runner.workspace}}/build -iname '*.gcno' -exec cp {} ./ \; + find ${{runner.workspace}}/build -iname '*.gcda' -exec cp {} ./ \; + gcov -o . ./tests/race_test.cpp --object-directory ./ + lcov --directory . --capture --output-file coverage.info + lcov --remove coverage.info '/usr/*' '*/tests/*' --output-file coverage.info + lcov --list coverage.info + bash <(curl -s https://codecov.io/bash) -X gcov -f coverage.info || echo "Failed to upload to Codecov" + + #- name: Upload coverage to Codecov + # uses: codecov/codecov-action@v1 + # with: + # fail_ci_if_error: true + # gcov_path_exclude: tests/ diff --git a/src/unittests/CMakeLists.txt b/src/unittests/CMakeLists.txt new file mode 100644 index 0000000..1d48499 --- /dev/null +++ b/src/unittests/CMakeLists.txt @@ -0,0 +1,36 @@ +################################################################## +## TaskSanitizer: a lightweight determinacy race checking +## tool for OpenMP task applications +## +## Copyright (c) 2015 - 2018 Hassan Salehe Matar +## Copying or using this code by any means whatsoever +## without consent of the owner is strictly prohibited. +## +## Contact: hassansalehe-at-gmail-dot-com +## +################################################################## + +cmake_minimum_required(VERSION 3.4.3) + +enable_testing() + +# Locate GTest package +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../../bin/include + ${CMAKE_CURRENT_SOURCE_DIR}/../common + ${CMAKE_CURRENT_SOURCE_DIR}/../detector + ${CMAKE_CURRENT_SOURCE_DIR}/../detector/commutativity) + +add_compile_options(-g -O0 -Wall -fprofile-arcs -ftest-coverage -fpermissive) +set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON) +link_libraries(${GTEST_LIBRARIES} pthread gtest_main gcov --coverage) + +# Link commonTests with what we want to test and +# the GTest and pthread library +add_executable(commonTests Common_Defs_gtest.cc) + +# Add tests for Ctest +add_test(common_tests, commonTests) diff --git a/src/unittests/Common_Defs_gtest.cc b/src/unittests/Common_Defs_gtest.cc new file mode 100644 index 0000000..c2592ec --- /dev/null +++ b/src/unittests/Common_Defs_gtest.cc @@ -0,0 +1,20 @@ +#include "common/defs.h" +#include + +//! \brief Test that OperRepresentation converts operations +//! to approriate string representations. +TEST(OperRepresentation, TestConversion) { + ASSERT_EQ("ADD", OperRepresentation(OPERATION::ADD)); + ASSERT_EQ("SUB", OperRepresentation(OPERATION::SUB)); + ASSERT_EQ("MUL", OperRepresentation(OPERATION::MUL)); + ASSERT_EQ("DIV", OperRepresentation(OPERATION::DIV)); + ASSERT_EQ("RET", OperRepresentation(OPERATION::RET)); + ASSERT_EQ("SHL", OperRepresentation(OPERATION::SHL)); + ASSERT_EQ("CALL", OperRepresentation(OPERATION::CALL)); + ASSERT_EQ("LOAD", OperRepresentation(OPERATION::LOAD)); + ASSERT_EQ("STORE", OperRepresentation(OPERATION::STORE)); + ASSERT_EQ("ALLOCA", OperRepresentation(OPERATION::ALLOCA)); + ASSERT_EQ("BITCAST", OperRepresentation(OPERATION::BITCAST)); + ASSERT_EQ("GETELEMENTPTR", OperRepresentation(OPERATION::GETELEMENTPTR)); +} +