Index: trunk/tests/test_truncatedInverseSqrt.cc =================================================================== --- trunk/tests/test_truncatedInverseSqrt.cc (revision 0) +++ trunk/tests/test_truncatedInverseSqrt.cc (revision 571) @@ -0,0 +1,50 @@ +#include "UnitTest++.h" + +#include "npstat/stat/InMemoryNtuple.hh" +#include "npstat/stat/MultivariateSumsqAccumulator.hh" + +#include "npstat/rng/MersenneTwister.hh" + +#include "npstat/nm/truncatedInverseSqrt.hh" + +using namespace npstat; + +namespace { + TEST(truncatedInverseSqrt) + { + const double eps = 1.0e-12; + + const unsigned dim = 5; + const unsigned npoints = 100; + const unsigned ntries = 3; + + std::vector row(dim); + MersenneTwister rng; + + for (unsigned itry=0; itry nt(simpleColumnNames(dim)); + + for (unsigned ipt=0; ipt sums; + nt.cycleOverRows(sums); + MultivariateSumsqAccumulator<> sumsqs(sums); + nt.cycleOverRows(sumsqs); + const Matrix covmat(sumsqs.covMat()); + + Matrix invSqr; + const double frac = truncatedInverseSqrt(covmat, dim, &invSqr); + CHECK(frac == 0.0); + + const Matrix& invmat = covmat.symPDInv(); + const double delta = (invSqr.TtimesThis() - invmat).maxAbsValue(); + CHECK(delta < eps); + } + } +}