module Tests.Grid where import Data.Maybe (fromJust) import Test.HUnit import Test.QuickCheck import Assertions import Comparisons import Cube import Grid import Misc import Point import Tetrahedron instance Arbitrary Grid where arbitrary = do (Positive h') <- arbitrary :: Gen (Positive Double) fv <- arbitrary :: Gen [[[Double]]] return (make_grid h' fv) -- | Values of the function f(x,y,z) = 1 + x + xy + xyz taken at nine -- points (hi, hj, jk) with h = 1. From example one in the paper. -- Used in the next bunch of tests. trilinear :: [[[Double]]] trilinear = [ [ [ 1, 2, 3 ], [ 1, 3, 5 ], [ 1, 4, 7 ] ], [ [ 1, 2, 3 ], [ 1, 4, 7 ], [ 1, 6, 11 ] ], [ [ 1, 2, 3 ], [ 1, 5, 9 ], [ 1, 8, 15 ]]] -- | Check the value of c0030 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0030 :: Test test_trilinear_c0030 = TestCase $ assertAlmostEqual "c0030 is correct" (c t 0 0 3 0) (17/8) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0003 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0003 :: Test test_trilinear_c0003 = TestCase $ assertAlmostEqual "c0003 is correct" (c t 0 0 0 3) (27/8) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0021 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0021 :: Test test_trilinear_c0021 = TestCase $ assertAlmostEqual "c0021 is correct" (c t 0 0 2 1) (61/24) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0012 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0012 :: Test test_trilinear_c0012 = TestCase $ assertAlmostEqual "c0012 is correct" (c t 0 0 1 2) (71/24) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0120 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0120 :: Test test_trilinear_c0120 = TestCase $ assertAlmostEqual "c0120 is correct" (c t 0 1 2 0) (55/24) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0102 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0102 :: Test test_trilinear_c0102 = TestCase $ assertAlmostEqual "c0102 is correct" (c t 0 1 0 2) (73/24) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0111 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0111 :: Test test_trilinear_c0111 = TestCase $ assertAlmostEqual "c0111 is correct" (c t 0 1 1 1) (8/3) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0210 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0210 :: Test test_trilinear_c0210 = TestCase $ assertAlmostEqual "c0210 is correct" (c t 0 2 1 0) (29/12) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0201 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0201 :: Test test_trilinear_c0201 = TestCase $ assertAlmostEqual "c0201 is correct" (c t 0 2 0 1) (11/4) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c0300 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c0300 :: Test test_trilinear_c0300 = TestCase $ assertAlmostEqual "c0300 is correct" (c t 0 3 0 0) (5/2) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1020 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1020 :: Test test_trilinear_c1020 = TestCase $ assertAlmostEqual "c1020 is correct" (c t 1 0 2 0) (8/3) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1002 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1002 :: Test test_trilinear_c1002 = TestCase $ assertAlmostEqual "c1002 is correct" (c t 1 0 0 2) (23/6) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1011 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1011 :: Test test_trilinear_c1011 = TestCase $ assertAlmostEqual "c1011 is correct" (c t 1 0 1 1) (13/4) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1110 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1110 :: Test test_trilinear_c1110 = TestCase $ assertAlmostEqual "c1110 is correct" (c t 1 1 1 0) (23/8) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1101 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1101 :: Test test_trilinear_c1101 = TestCase $ assertAlmostEqual "c1101 is correct" (c t 1 1 0 1) (27/8) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c1200 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c1200 :: Test test_trilinear_c1200 = TestCase $ assertAlmostEqual "c1200 is correct" (c t 1 2 0 0) 3 where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c2010 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c2010 :: Test test_trilinear_c2010 = TestCase $ assertAlmostEqual "c2010 is correct" (c t 2 0 1 0) (10/3) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c2001 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c2001 :: Test test_trilinear_c2001 = TestCase $ assertAlmostEqual "c2001 is correct" (c t 2 0 0 1) 4 where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c2100 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c2100 :: Test test_trilinear_c2100 = TestCase $ assertAlmostEqual "c2100 is correct" (c t 2 1 0 0) (7/2) where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | Check the value of c3000 for tetrahedron0 belonging to the -- cube centered on (1,1,1) with a grid constructed from the -- trilinear values. See example one in the paper. test_trilinear_c3000 :: Test test_trilinear_c3000 = TestCase $ assertAlmostEqual "c3000 is correct" (c t 3 0 0 0) 4 where g = make_grid 1 trilinear cube = fromJust $ cube_at g 1 1 1 t = tetrahedron0 cube -- | A list of all HUnit tests defined in this module. grid_tests :: [Test] grid_tests = [test_trilinear_c0030, test_trilinear_c0003, test_trilinear_c0021, test_trilinear_c0012, test_trilinear_c0120, test_trilinear_c0102, test_trilinear_c0111, test_trilinear_c0210, test_trilinear_c0201, test_trilinear_c0300, test_trilinear_c1020, test_trilinear_c1002, test_trilinear_c1011, test_trilinear_c1110, test_trilinear_c1101, test_trilinear_c1200, test_trilinear_c2010, test_trilinear_c2001, test_trilinear_c2100, test_trilinear_c3000]