TU-Programmieren_2/exercise3/task2.test.cpp
2025-04-09 10:22:44 +02:00

98 lines
3.0 KiB
C++

/// @file
/// @brief Task2: tests
#include "task2.hpp"
#include <cassert> // assert
#include <cmath> // std::abs|sin
#include <iostream> // std::cout|endl
#include <vector> // std::vector
namespace help {
/// @brief only to disambiguate the 'sin'-overloads from cmath
double sin(double value) { return std::sin(value); }
/// @brief only to disambiguate the 'cos'-overloads from cmath
double cos(double value) { return std::cos(value); }
} // namespace help
int main() {
{ // testing function 'range'
std::vector<double> x = range(0, 10, 11);
double dx = x[1] - x[0];
assert(std::abs(dx - 1.0) < 1e-7);
for (unsigned int i = 1; i != x.size(); ++i)
assert(std::abs(x[i] - x[i - 1] - dx) < 1e-7);
}
{ // testing functions 'range' and 'sample'
std::vector<double> x = range(2, 10, 6);
std::vector<double> f = sample(x, help::sin);
for (unsigned int i = 0; i != x.size(); ++i)
assert(std::abs(f[i] - help::sin(x[i])) < 1e-7);
}
{ // testing functions 'range' and 'sample'
std::vector<double> x = range(0, 5, 6);
std::vector<double> f = sample(x, help::cos);
for (unsigned int i = 0; i != x.size(); ++i)
assert(std::abs(f[i] - help::cos(x[i])) < 1e-7);
}
{ // testing function 'numdiff'
std::vector<double> x = {0, 1, 2, 3, 4};
std::vector<double> f = {0, 1, 1, 1, 0.5};
std::vector<double> df = numdiff(x, f);
assert(std::abs(df[0] - 1.0) < 1e-7);
assert(std::abs(df[1] - 0.5) < 1e-7);
assert(std::abs(df[2] - 0.0) < 1e-7);
assert(std::abs(df[3] + 0.25) < 1e-7);
assert(std::abs(df[4] + 0.5) < 1e-7);
}
{ // testing function 'numdiff'
double s = 2.0;
std::vector<double> x = {0*s, 1*s, 2*s, 3*s, 4*s};
std::vector<double> f = {0, 1, 1, 1, 0.5};
std::vector<double> df = numdiff(x, f);
assert(std::abs(df[0] - 1.00/s) < 1e-7);
assert(std::abs(df[1] - 0.50/s) < 1e-7);
assert(std::abs(df[2] - 0.00/s) < 1e-7);
assert(std::abs(df[3] + 0.25/s) < 1e-7);
assert(std::abs(df[4] + 0.50/s) < 1e-7);
}
{ // testing function 'numint'
std::vector<double> x = {0, 1, 2, 3, 4};
std::vector<double> f = {0, 1, 1, 1, 0};
std::vector<double> F = numint(x, f, 0.0);
assert(std::abs(F[0] - 0.0) < 1e-7);
assert(std::abs(F[1] - (F[0] + 0.5)) < 1e-7);
assert(std::abs(F[2] - (F[1] + 1.0)) < 1e-7);
assert(std::abs(F[3] - (F[2] + 1.0)) < 1e-7);
assert(std::abs(F[4] - (F[3] + 0.5)) < 1e-7);
}
{ // testing function 'numint'
double s = 2.0;
std::vector<double> x = {0*s, 1*s, 2*s, 3*s, 4*s, 5*s};
std::vector<double> f = {0, 1, 1, 1, 0, -1};
std::vector<double> F = numint(x, f, 10.0);
assert(std::abs(F[0] - 10.0) < 1e-7);
assert(std::abs(F[1] - (F[0] + 0.5*s)) < 1e-7);
assert(std::abs(F[2] - (F[1] + 1.0*s)) < 1e-7);
assert(std::abs(F[3] - (F[2] + 1.0*s)) < 1e-7);
assert(std::abs(F[4] - (F[3] + 0.5*s)) < 1e-7);
assert(std::abs(F[5] - (F[4] - 0.5*s)) < 1e-7);
}
std::cout << "task2.test.cpp: all asserts passed" << std::endl;
return 0;
}