diff --git a/test/test_kernels.py b/test/test_kernels.py index c4f08b1d1f0725b33b0d6b10c7d39e08d31e209a..24c2dbe8b1e28b76d68b480287b7eb533cc60613 100644 --- a/test/test_kernels.py +++ b/test/test_kernels.py @@ -297,14 +297,29 @@ class PConvergenceVerifier(object): def __call__(self): orders = np.array(self.orders, np.float64) - log_errors = np.log10(1e-20+np.abs(np.array(self.errors, np.float64))) + errors = np.abs(np.array(self.errors, np.float64)) - constant_ish = log_errors/orders + rel_change = np.diff(1e-20 + np.log10(errors)) / np.diff(orders) - c_max = np.max(constant_ish) - c_min = np.min(constant_ish) + assert (rel_change < -0.2).all() - assert c_max < c_min + 2, constant_ish + +def test_p_convergence_verifier(): + pconv_verifier = PConvergenceVerifier() + for order in [2, 3, 4, 5]: + pconv_verifier.add_data_point(order, 0.1**order) + pconv_verifier() + + pconv_verifier = PConvergenceVerifier() + for order in [2, 3, 4, 5]: + pconv_verifier.add_data_point(order, 0.5**order) + pconv_verifier() + + pconv_verifier = PConvergenceVerifier() + for order in [2, 3, 4, 5]: + pconv_verifier.add_data_point(order, 2) + with pytest.raises(AssertionError): + pconv_verifier() @pytools.test.mark_test.opencl @@ -359,7 +374,7 @@ def test_translations(ctx_getter, knl): del eval_offset - for order in [2, 3]: + for order in [2, 3, 4, 5]: m_expn = VolumeTaylorMultipoleExpansion(knl, order=order) l_expn = VolumeTaylorLocalExpansion(knl, order=order)