Skip to content
Snippets Groups Projects
Commit ff6568bd authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

also use for SpecializationTest

parent 7d035ec0
No related branches found
No related tags found
1 merge request!1185MultiQTest: detailed report for worst case only
...@@ -9,33 +9,14 @@ ...@@ -9,33 +9,14 @@
class FFSpecializationTest : public testing::Test { class FFSpecializationTest : public testing::Test {
protected: protected:
void run_test(IFormFactor* p0, IFormFactor* p1, double eps, double qmag1, double qmag2) void run_test(IFormFactor* ff0, IFormFactor* ff1, double eps, double qmag1, double qmag2)
{ {
int failures = formfactorTest::run_test2_for_many_q( int failures = formfactorTest::run_test3_for_many_q(
[&](C3 q, bool report) -> double { return test_ff_eq(q, p0, p1, eps, report); }, qmag1, [&](C3 q) -> complex_t { return ff0->formfactor(q); },
qmag2, eps); [&](C3 q) -> complex_t { return ff1->formfactor(q); },
qmag1, qmag2, eps);
EXPECT_EQ(failures, 0); EXPECT_EQ(failures, 0);
} }
private:
double test_ff_eq(C3 q, IFormFactor* p0, IFormFactor* p1, double eps, bool report)
{
const complex_t f0 = p0->formfactor(q);
const complex_t f1 = p1->formfactor(q);
const double avge = (std::abs(f0) + std::abs(f1)) / 2;
const double abserr = std::max(fabs(real(f0) - real(f1)), fabs(imag(f0) - imag(f1)));
const double result = abserr / avge * std::min(1., eps * avge / 1e-16);
if (report) {
std::cout << "Deviation at q = " << q << ":\n";
std::cout << " Re(f0) = " << std::setprecision(16) << real(f0)
<< ", Im(f0) = " << imag(f0) << "\n";
std::cout << " Re(f1) = " << real(f1) << ", Im(f1) = " << imag(f1) << "\n";
std::cout << " abs dev = " << std::setprecision(8) << abserr
<< ", rel dev = " << abserr / avge << ", score = " << result
<< ", limit = " << eps << "\n";
}
return result;
}
}; };
const double eps_polyh = 6e-12; // Linux 3e-12, relaxed for Win const double eps_polyh = 6e-12; // Linux 3e-12, relaxed for Win
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment