diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b9b94a43c0a936f9f596bb14c378e1686adb544..cd8add4cdbe7af205fca28f010ffe3bae2e72504 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,36 +3,42 @@ project(Uebung5) set(CMAKE_CXX_STANDARD 14) -add_executable(Uebung5 src/main.cpp - src/filter2.h +add_executable(Uebung5 + src/main.cpp + src/filter2.hpp src/filter2.cpp - src/filter.h + src/filter.hpp src/filter.cpp ) -# Fetch Catch2 +# Fetch GoogleTest Include(FetchContent) FetchContent_Declare( - Catch2 - GIT_REPOSITORY https://github.com/catchorg/Catch2.git - GIT_TAG v3.4.0 + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.15.2 ) -FetchContent_MakeAvailable(Catch2) +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) + enable_testing() add_executable(test_filter2 - src/filter2.h + src/filter2.hpp src/filter2.cpp src/filter2.test.cpp ) add_executable(test_filter - src/filter.h + src/filter.hpp src/filter.cpp src/filter.test.cpp ) -target_link_libraries(test_filter2 PRIVATE Catch2::Catch2WithMain) -target_link_libraries(test_filter PRIVATE Catch2::Catch2WithMain) +target_link_libraries(test_filter2 PRIVATE GTest::gtest_main) +target_link_libraries(test_filter PRIVATE GTest::gtest_main) target_include_directories(test_filter2 PRIVATE src/) target_include_directories(test_filter PRIVATE src/) -add_test(test_filter2 env CTEST_OUTPUT_ON_FAILURE=1 ./test_filter2) -add_test(test_filter env CTEST_OUTPUT_ON_FAILURE=1 ./test_filter) + +include(GoogleTest) +gtest_discover_tests(test_filter) +gtest_discover_tests(test_filter2) + diff --git a/src/filter.cpp b/src/filter.cpp index 300ac6b5952de8f48b7d3a50da3beb4c671ac6c8..82fc9662b899cb87d6bd0921cf7bdff71b98c00d 100644 --- a/src/filter.cpp +++ b/src/filter.cpp @@ -1 +1 @@ -#include "filter.h" +#include "filter.hpp" diff --git a/src/filter.h b/src/filter.hpp similarity index 100% rename from src/filter.h rename to src/filter.hpp diff --git a/src/filter.test.cpp b/src/filter.test.cpp index 65fde6287ef0b4bb9c82afd4f980e26c4ae63857..f1ad18a54b8d2fd2937f5bf3b56b94e322756879 100644 --- a/src/filter.test.cpp +++ b/src/filter.test.cpp @@ -1,21 +1,18 @@ -#include "filter.h" +#include "filter.hpp" +#include <gtest/gtest.h> -#include <catch2/catch_test_macros.hpp> -#include <catch2/matchers/catch_matchers_floating_point.hpp> - -TEST_CASE("static_gain") { +TEST(filter, static_gain) { Filter filter{0.0, 0.0, 10.0, 0.0, 0.0}; const double us[]{1.0, 2.0, -1.0, 0.0, 5.0}; for (const auto u : us) { const double y = filter.step(u); - - CHECK(y == 10.0 * u); + EXPECT_EQ(y, 10.0 * u); } } -TEST_CASE("static_delay_zero_initialized") { +TEST(filter, static_delay_zero_initialized) { Filter filter{0.0, 0.0, 0.0, 0.0, 10.0}; const double us[]{1.0, 2.0, -1.0, 0.0, 5.0, 0.0, 0.0}; @@ -23,12 +20,11 @@ TEST_CASE("static_delay_zero_initialized") { for (size_t i = 0; i < 7; ++i) { const double y = filter.step(us[i]); - - CHECK(y == 10.0 * us_delayed[i]); + EXPECT_EQ(y, 10.0 * us_delayed[i]); } } -TEST_CASE("static_delay_initialized") { +TEST(filter, static_delay_initialized) { Filter filter{0.0, 0.0, 0.0, 0.0, 10.0}; filter.initialize(10.0); @@ -37,12 +33,11 @@ TEST_CASE("static_delay_initialized") { for (size_t i = 0; i < 7; ++i) { const double y = filter.step(us[i]); - - CHECK(y == 10.0 * us_delayed[i]); + EXPECT_NEAR(y, 10.0 * us_delayed[i], 1e-12); } } -TEST_CASE("zero_initialized") { +TEST(filter, zero_initialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -56,15 +51,12 @@ TEST_CASE("zero_initialized") { for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; - - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("initialized") { +TEST(filter, initialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -78,22 +70,19 @@ TEST_CASE("initialized") { Filter filter{a1, a0, b2, b1, b0}; const double y0 = filter.initialize(u0); - REQUIRE(y0 == y0c); + EXPECT_EQ(y0, y0c); const double us[]{u0, u0, 1.0, 2.0, -1.0, 0.0, 5.0}; double ys[7]{y0c, y0c, 0.0}; for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; - - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("reinitialized") { +TEST(filter, reinitialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -107,34 +96,28 @@ TEST_CASE("reinitialized") { Filter filter{a1, a0, b2, b1, b0}; const double y0 = filter.initialize(u0); - REQUIRE(y0 == y0c); + EXPECT_EQ(y0, y0c); const double us[]{u0, u0, 1.0, 2.0, -1.0, 0.0, 5.0}; double ys[7]{y0c, y0c, 0.0}; for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; - - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; + EXPECT_NEAR(y, ys[i], 1e-12); } const double y0r = filter.initialize(u0); - REQUIRE(y0r == y0c); + EXPECT_EQ(y0r, y0c); for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; - - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("pt1") { +TEST(filter, pt1) { Filter filter = Filter::From_continuous_first_order(10.0, 0.01); const double u = 1.0; @@ -161,12 +144,11 @@ TEST_CASE("pt1") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("pt2") { +TEST(filter, pt2) { Filter filter = Filter::From_continuous_second_order(20.0, 100.0, 0.01); const double u = 1.0; @@ -193,14 +175,12 @@ TEST_CASE("pt2") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("pt1 * pt1") { +TEST(filter, pt1_times_pt1) { Filter pt1 = Filter::From_continuous_first_order(10.0, 0.01); - Filter filter = pt1 * pt1; const double u = 1.0; @@ -227,15 +207,13 @@ TEST_CASE("pt1 * pt1") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-6)); + EXPECT_NEAR(y, ys[i], 1e-6); } } -TEST_CASE("pt1 * pt2") { +TEST(filter, pt1_times_pt2) { Filter pt1 = Filter::From_continuous_first_order(10.0, 0.01); Filter pt2 = Filter::From_continuous_second_order(40.0, 400.0, 0.01); - Filter filter = pt1 * pt2; const double u = 1.0; @@ -263,11 +241,11 @@ TEST_CASE("pt1 * pt2") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-6)); + EXPECT_NEAR(y, ys[i], 1e-6); } } -TEST_CASE("pt2 * pt2 * pt2") { +TEST(filter,pt2_three_times) { Filter pt2a = Filter::From_continuous_second_order(20.0, 100.0, 0.01); Filter pt2b = Filter::From_continuous_second_order(40.0, 400.0, 0.01); Filter pt2c = Filter::From_continuous_second_order(5.0, 100.0, 0.01); @@ -298,7 +276,6 @@ TEST_CASE("pt2 * pt2 * pt2") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-6)); + EXPECT_NEAR(y, ys[i], 1e-6); } } diff --git a/src/filter2.cpp b/src/filter2.cpp index fc6c6dc40e7b4162e642b608956505386b7c5402..32010e4a8ca4cc19f336aca57f728184088394ee 100644 --- a/src/filter2.cpp +++ b/src/filter2.cpp @@ -1 +1 @@ -#include "filter2.h" +#include "filter2.hpp" diff --git a/src/filter2.h b/src/filter2.hpp similarity index 100% rename from src/filter2.h rename to src/filter2.hpp diff --git a/src/filter2.test.cpp b/src/filter2.test.cpp index d7480a2eeff4b70b21ccddd24c4d3ff285045e6d..8c95ab2075af687d2b51f5758e922a6cfc8edf7a 100644 --- a/src/filter2.test.cpp +++ b/src/filter2.test.cpp @@ -1,9 +1,8 @@ -#include "filter2.h" +#include "filter2.hpp" -#include <catch2/catch_test_macros.hpp> -#include <catch2/matchers/catch_matchers_floating_point.hpp> +#include <gtest/gtest.h> -TEST_CASE("static_gain") { +TEST(filter2,static_gain) { Filter2 filter{0.0, 0.0, 10.0, 0.0, 0.0}; const double us[]{1.0, 2.0, -1.0, 0.0, 5.0}; @@ -11,11 +10,11 @@ TEST_CASE("static_gain") { for (const auto u : us) { const double y = filter.step(u); - CHECK(y == 10.0 * u); + EXPECT_EQ(y, 10.0 * u); } } -TEST_CASE("static_delay_zero_initialized") { +TEST(filter2,static_delay_zero_initialized) { Filter2 filter{0.0, 0.0, 0.0, 0.0, 10.0}; const double us[]{1.0, 2.0, -1.0, 0.0, 5.0, 0.0, 0.0}; @@ -24,11 +23,11 @@ TEST_CASE("static_delay_zero_initialized") { for (size_t i = 0; i < 7; ++i) { const double y = filter.step(us[i]); - CHECK(y == 10.0 * us_delayed[i]); + EXPECT_EQ(y , 10.0 * us_delayed[i]); } } -TEST_CASE("static_delay_initialized") { +TEST(filter2,static_delay_initialized) { Filter2 filter{0.0, 0.0, 0.0, 0.0, 10.0}; filter.initialize(10.0); @@ -38,11 +37,11 @@ TEST_CASE("static_delay_initialized") { for (size_t i = 0; i < 7; ++i) { const double y = filter.step(us[i]); - CHECK(y == 10.0 * us_delayed[i]); + EXPECT_EQ(y , 10.0 * us_delayed[i]); } } -TEST_CASE("zero_initialized") { +TEST(filter2,zero_initialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -57,14 +56,13 @@ TEST_CASE("zero_initialized") { for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("initialized") { +TEST(filter2,initialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -78,7 +76,7 @@ TEST_CASE("initialized") { Filter2 filter{a1, a0, b2, b1, b0}; const double y0 = filter.initialize(u0); - REQUIRE(y0 == y0c); + EXPECT_EQ(y0 , y0c); const double us[]{u0, u0, 1.0, 2.0, -1.0, 0.0, 5.0}; double ys[7]{y0c, y0c, 0.0}; @@ -86,14 +84,13 @@ TEST_CASE("initialized") { for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("reinitialized") { +TEST(filter2,reinitialized) { const double a1 = 4.0; const double a0 = 3.0; const double b2 = 2.0; @@ -107,7 +104,7 @@ TEST_CASE("reinitialized") { Filter2 filter{a1, a0, b2, b1, b0}; const double y0 = filter.initialize(u0); - REQUIRE(y0 == y0c); + EXPECT_EQ(y0 , y0c); const double us[]{u0, u0, 1.0, 2.0, -1.0, 0.0, 5.0}; double ys[7]{y0c, y0c, 0.0}; @@ -115,26 +112,24 @@ TEST_CASE("reinitialized") { for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } const double y0r = filter.initialize(u0); - REQUIRE(y0r == y0c); + EXPECT_EQ(y0r , y0c); for (size_t i = 2; i < 7; ++i) { const double y = filter.step(us[i]); - ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + - b0 * us[i - 2]; + ys[i] = -a1 * ys[i - 1] - a0 * ys[i - 2] + b2 * us[i] + b1 * us[i - 1] + b0 * us[i - 2]; - CHECK_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("pt1") { +TEST(filter2,pt1) { Filter2 filter = Filter2::From_continuous_first_order(10.0, 0.01); const double u = 1.0; @@ -162,11 +157,11 @@ TEST_CASE("pt1") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } -TEST_CASE("pt2") { +TEST(filter2,pt2) { Filter2 filter = Filter2::From_continuous_second_order(20.0, 100.0, 0.01); const double u = 1.0; @@ -194,6 +189,6 @@ TEST_CASE("pt2") { for (size_t i = 0; i < N; ++i) { const double y = filter.step(u); - REQUIRE_THAT(y, Catch::Matchers::WithinAbs(ys[i], 1e-12)); + EXPECT_NEAR(y, ys[i], 1e-12); } } diff --git a/src/main.cpp b/src/main.cpp index bcea4799d833f4e00eb978c9758a1e7eaa15fd41..6bd8d28ad82ed7c1a575975dc82f1678821a352d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include <iostream> -#include "filter2.h" +#include "filter2.hpp" int main() { Filter2 filter{0.0, 0.0, 0.5, 0.5, 0.0};