/// @file /// @brief Task2: tests #include "task2.hpp" #include // assert #include // std::abs|sin #include // std::cout|endl #include // 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 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 x = range(2, 10, 6); std::vector 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 x = range(0, 5, 6); std::vector 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 x = {0, 1, 2, 3, 4}; std::vector f = {0, 1, 1, 1, 0.5}; std::vector 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 x = {0*s, 1*s, 2*s, 3*s, 4*s}; std::vector f = {0, 1, 1, 1, 0.5}; std::vector 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 x = {0, 1, 2, 3, 4}; std::vector f = {0, 1, 1, 1, 0}; std::vector 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 x = {0*s, 1*s, 2*s, 3*s, 4*s, 5*s}; std::vector f = {0, 1, 1, 1, 0, -1}; std::vector 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; }