diff --git a/tests/kahan.cc b/tests/kahan.cc index be4b8c0..3f06d1d 100644 --- a/tests/kahan.cc +++ b/tests/kahan.cc @@ -4,16 +4,27 @@ Test for the Kahan summation algorithm Copyright 2018 Ahmet Inan */ +#include +#include +#include "const.hh" #include "kahan.hh" +template +bool Kahan_summation_algorithm_test() +{ + DSP::Kahan sum(3); + for (T i = T(2); i < T(181423); i += T(4)) { + sum(T(4) / (i * (i + T(1)) * (i + T(2)))); + sum(T(-4) / ((i + T(2)) * (i + T(3)) * (i + T(4)))); + } + return sum() == DSP::Const::Pi(); +} + int main() { - const double pi = 3.14159265358979323846; - DSP::Kahan kahan(3.0); - for (double i = 2.0; i < 181423.0; i += 4.0) { - kahan(4.0 / (i * (i + 1.0) * (i + 2.0))); - kahan(-4.0 / ((i + 2.0) * (i + 3.0) * (i + 4.0))); - } - return kahan() != pi; + assert(Kahan_summation_algorithm_test()); + assert(Kahan_summation_algorithm_test()); + std::cerr << "Kahan summation algorithm test passed!" << std::endl; + return 0; }