From ee483226e68b64b475cf88bc97480d6af4e60dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me?= Date: Mon, 1 Apr 2019 12:51:56 +0200 Subject: [PATCH] Added default test using Catch2 in test/. Added make doc in Makefile. --- .gitignore | 8 ++++++++ Makefile | 4 ++++ README.md | 3 ++- test/1_test.cpp | 34 +++++++++++++++++++++++++++++++ test/Makefile | 49 +++++++++++++++++++++++++++++++++++++++++++++ test/main_test.cpp | 4 ++++ test/utils_test.hpp | 30 +++++++++++++++++++++++++++ 7 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 test/1_test.cpp create mode 100644 test/Makefile create mode 100644 test/main_test.cpp create mode 100644 test/utils_test.hpp diff --git a/.gitignore b/.gitignore index c488131..95c30da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,14 @@ # executable run +# gcov files +*.gcov +*.gcda +*.gcno + +# python cache +__pycache__ + # generated documentation html/ diff --git a/Makefile b/Makefile index fbc4621..911d554 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,10 @@ $(EXEC): $(COBJECTS) $(OBJECTS) -include $(SOURCES:%.cpp=%.d) -include $(CSOURCES:%.c=%.d) +# To generate the documentation +doc: + doxygen Doxyfile + # To remove generated files clean: rm -f $(COBJECTS) $(OBJECTS) $(SOURCES:%.cpp=%.d) $(CSOURCES:%.c=%.d) diff --git a/README.md b/README.md index c91c66b..1541520 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# CppQuickStart +CppQuickStart +============= "Empty" project for a quicker start writing something in c++. diff --git a/test/1_test.cpp b/test/1_test.cpp new file mode 100644 index 0000000..fa45c9b --- /dev/null +++ b/test/1_test.cpp @@ -0,0 +1,34 @@ +#include +#include + +#include "../utils.hpp" +#include "utils_test.hpp" + +#define print(x) PRINT_VAR(x); +#define printvec(x) PRINT_VEC(x); +#define printstr(x) PRINT_STR(x); + +TEST_CASE( "Test case 1", "[test1]" ) +{ + std::cout.precision(16); + + SECTION( "Check almost equal" ) { + CHECK(check_almost_equal(1.00, 1.01, 0.1)); + CHECK(check_almost_equal(1.00, 3.01, 0.01)); + CHECK(check_almost_equal(1.00, 1.01, 0.001)); + REQUIRE(true); + } + + SECTION( "Check almost equal on vectors" ) { + unsigned int N = 5; + std::vector v1(N), v2(N); + for (size_t i = 0; i < N; i++) { + v1[i] = double(i); + v2[i] = v1[i] + 0.0001; + } + + CHECK(check_almost_equalV(v1, v2, 0.001)); + CHECK(check_almost_equalV(v1, v2, 0.0001)); + CHECK(check_almost_equalV(v1, v2, 0.00001)); + } +} diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..3a12f85 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,49 @@ +# Declaration of variables +C = gcc +COMMON_FLAGS = -Wall -MMD -fprofile-arcs -ftest-coverage +C_FLAGS = $(COMMON_FLAGS) +CC = g++ +CC_FLAGS = $(COMMON_FLAGS) -std=c++17 -O0 +LD_FLAGS = -lgcov +INCLUDES = + +# File names +EXEC = run +CSOURCES = $(wildcard *.c) +COBJECTS = $(CSOURCES:.c=.o) +SOURCES = $(wildcard *.cpp) +OBJECTS = $(SOURCES:.cpp=.o) + +# Main target +$(EXEC): $(COBJECTS) $(OBJECTS) + $(CC) $(COBJECTS) $(OBJECTS) -o $(EXEC) $(LD_FLAGS) + +# To obtain object files +%.o: %.cpp + $(CC) $(INCLUDES) $(CC_FLAGS) -o $@ -c $< + +# To obtain object files +%.o: %.c + $(C) $(INCLUDES) $(C_FLAGS) -o $@ -c $< + +-include $(SOURCES:%.cpp=%.d) +-include $(CSOURCES:%.c=%.d) + +# To generate the documentation +doc: + doxygen Doxyfile + +# To generate human-readable coverage data +cov: + gcov *.gcda + +# To remove all the files generated by gcov +cleancov: + rm -f *.gcov *.gcda + +# To remove generated files +clean: cleancov + rm -f $(COBJECTS) $(OBJECTS) $(SOURCES:%.cpp=%.d) $(CSOURCES:%.c=%.d) *.gcno + +cleaner: clean + rm -f $(EXEC) diff --git a/test/main_test.cpp b/test/main_test.cpp new file mode 100644 index 0000000..0465d9b --- /dev/null +++ b/test/main_test.cpp @@ -0,0 +1,4 @@ +// Let Catch provide main() +#define CATCH_CONFIG_MAIN + +#include diff --git a/test/utils_test.hpp b/test/utils_test.hpp new file mode 100644 index 0000000..d1a2e61 --- /dev/null +++ b/test/utils_test.hpp @@ -0,0 +1,30 @@ +#ifndef DEF_utils_test +#define DEF_utils_test + +#include + +template +bool check_almost_equal(const T & a, const T & b, const T2 & tol) +{ + T a_b = a - b; + return ((a_b < T(0)) ? -a_b : a_b) <= tol; +} + +template +bool check_almost_equalV(const Vector & v1, const Vector & v2, T tol) +{ + assert(v1.size() == v2.size()); + bool ok = true; + for(size_t i = 0 ; i < v1.size() ; i++) + { + auto v1_v2_i = v1[i] - v2[i]; + if(((v1_v2_i < 0) ? -v1_v2_i : v1_v2_i) > tol) + { + ok = false; + break; + } + } + return ok; +} + +#endif