From 69734ef9828854aa668b104d47e08526b7a2bed0 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 23 Feb 2023 20:00:05 +0100 Subject: doublenull: add unit tests --- Makefile | 5 ++++- doublenull.py | 4 ++-- test/__init__.py | 0 test/test_doublenull.npz | Bin 0 -> 103064 bytes test/test_doublenull.py | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 test/__init__.py create mode 100644 test/test_doublenull.npz create mode 100644 test/test_doublenull.py diff --git a/Makefile b/Makefile index b10c533..a64b7fb 100644 --- a/Makefile +++ b/Makefile @@ -12,9 +12,12 @@ $(TARGET): $(OBJS) %.o: %.c $(CC) $(CFLAGS) -MMD -MF $(@:.o=.d) -MT $@ -c -o $@ $< +test: $(TARGET) + LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH python3 -m unittest + clean: -rm -f *.o *.d $(TARGET) -include $(OBJS:.o=.d) -.PHONY: clean +.PHONY: clean test diff --git a/doublenull.py b/doublenull.py index 5aafc06..78e5632 100644 --- a/doublenull.py +++ b/doublenull.py @@ -109,7 +109,7 @@ def calc_null_coordinates(times, spatial_coords, u_rays, v_rays, for i, t in enumerate(times): Xu = X_of_ut[:, i] Xv = X_of_vt[:, i] - u_of_tx[i] = interp.interp1d(Xu, u_rays)(spatial_coords) - v_of_tx[i] = interp.interp1d(Xv, v_rays)(spatial_coords) + u_of_tx[i] = interp.interp1d(Xu, u_rays, fill_value = 'extrapolate')(spatial_coords) + v_of_tx[i] = interp.interp1d(Xv, v_rays, fill_value = 'extrapolate')(spatial_coords) return (u_of_tx, v_of_tx) diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_doublenull.npz b/test/test_doublenull.npz new file mode 100644 index 0000000..4745593 Binary files /dev/null and b/test/test_doublenull.npz differ diff --git a/test/test_doublenull.py b/test/test_doublenull.py new file mode 100644 index 0000000..e50003e --- /dev/null +++ b/test/test_doublenull.py @@ -0,0 +1,36 @@ +import os +from unittest import TestCase + +import numpy as np +from numpy.testing import assert_allclose + +from math_utils import array_utils +from nr_analysis_axi import doublenull, invars + +class TestDoubleNull(TestCase): + + def setUp(self): + datafile = os.path.splitext(__file__)[0] + '.npz' + + self.data = np.load(datafile) + + def test_null_curves(self): + rays = doublenull.calc_null_curves(self.data['t'], self.data['x'], + self.data['gxx'], np.zeros_like(self.data['gxx']), + -(self.data['alpha'] ** 2)) + + assert_allclose(rays[0], self.data['ray_times'], 1e-12) + assert_allclose(rays[1], self.data['rays_pos'], 1e-12) + assert_allclose(rays[2], self.data['rays_neg'], 1e-12) + + def test_null_coordinates(self): + x = self.data['x'] + idx = x.shape[0] // 2 + gxx = self.data['gxx'] + uv = 0.5 * array_utils.array_reflect(invars.dist_proper(x[idx:], gxx[0, idx:]), -1) + + coords = doublenull.calc_null_coordinates(self.data['t'], x, uv, uv, + gxx, np.zeros_like(gxx), + -(self.data['alpha'] ** 2)) + assert_allclose(coords[0], self.data['uxt'], 1e-12) + assert_allclose(coords[1], self.data['vxt'], 1e-12) -- cgit v1.2.3