From 7fc4e3c0a0d6e32ca6685647e107473f1d96c3e5 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Sun, 20 Aug 2017 09:21:49 +0000 Subject: Unit tests --- test/src/unittests-math.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/src/unittests-math.cpp (limited to 'test/src/unittests-math.cpp') diff --git a/test/src/unittests-math.cpp b/test/src/unittests-math.cpp new file mode 100644 index 0000000..11aadf6 --- /dev/null +++ b/test/src/unittests-math.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "gsl/gsl_matrix.h" +#include "mathfunc.h" +#include +#include +#include + +using namespace std; + +TEST_CASE( "Math functions", "[math]" ) { + double data[] = { 2,-1, 0, + -1, 2,-1, + 0,-1, 2}; + gsl_matrix *m = gsl_matrix_alloc(3,3); + copy(data, data+9, m->data); + REQUIRE( isMatrixPositiveDefinite(m) ); + REQUIRE( isMatrixSymmetric(m) ); + REQUIRE( checkMatrixEigen(m,0.001) ); + + double data1[] = {1.0,0,0, + 0,3.0,0, + 0,0,2.0}; + copy(data1, data1+9, m->data); + REQUIRE( isMatrixPositiveDefinite(m) ); + REQUIRE( checkMatrixEigen(m) ); + + double data2[] = {1,1,1, + 1,1,1, + 1,1,0.5}; + copy(data2, data2+9, m->data); + REQUIRE( !isMatrixPositiveDefinite(m)); + REQUIRE( !checkMatrixEigen(m) ); + + double data3[] = {1.0, 0, 0, + 3.0,3.0, 0, + 0, 0,2.0}; + copy(data3, data3+9, m->data); + REQUIRE( !isMatrixPositiveDefinite(m) ); + REQUIRE( !isMatrixSymmetric(m) ); + REQUIRE( !checkMatrixEigen(m) ); + + // ---- NaN checks + vector v = {1.0, 2.0}; + REQUIRE (!std::isnan(std::accumulate(v.begin(), v.end(), 0))); + vector v2 = {1.0, 2.0, std::numeric_limits::quiet_NaN()}; + REQUIRE (std::isnan(v2[2])); + REQUIRE(has_nan(v2)); + // test minus nan + vector v3 = {1.0, 2.0, -std::numeric_limits::quiet_NaN()}; + REQUIRE (std::isnan(v3[2])); + REQUIRE(has_nan(v3)); +} -- cgit v1.2.3