98 lines
3.0 KiB
C++
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;
|
|
}
|