Skip to content
Snippets Groups Projects
Commit f73fe041 authored by Stauder, Lucas's avatar Stauder, Lucas
Browse files

Wintersemester 2024/25

parent b3c3808a
No related branches found
No related tags found
No related merge requests found
......@@ -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)
#include "filter.h"
#include "filter.hpp"
File moved
#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);
}
}
#include "filter2.h"
#include "filter2.hpp"
File moved
#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);
}
}
#include <iostream>
#include "filter2.h"
#include "filter2.hpp"
int main() {
Filter2 filter{0.0, 0.0, 0.5, 0.5, 0.0};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment