module TestSuite where import Test.Framework (defaultMain, testGroup, Test, TestName, TestOptions(..)) import Test.Framework.Providers.API (TestName) import Test.Framework.Providers.DocTest import Test.Framework.Providers.HUnit (testCase) import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.HUnit import Test.QuickCheck (Testable ()) import Tests.Cardinal import Tests.Cube as TC import Tests.FunctionValues import Tests.Grid import Tests.Misc import Tests.Tetrahedron as TT main :: IO () main = do dt <- docTest ["src/Everything.hs"] ["-isrc"] defaultMain $ [dt] ++ tests -- | Defined so that my test names fit on one line. tc :: Test.Framework.Providers.API.TestName -> Test.HUnit.Assertion -> Test.Framework.Test tc = testCase cardinal_tests :: Test.Framework.Test cardinal_tests = testGroup "Cardinal Tests" [ tc "c-tilde_2100 rotation correct" test_c_tilde_2100_rotation_correct ] function_values_tests :: Test.Framework.Test function_values_tests = testGroup "FunctionValues Tests" [ tc "test directions" test_directions ] grid_tests :: Test.Framework.Test grid_tests = testGroup "Grid Tests" [ tc "trilinear c0030" test_trilinear_c0030, tc "trilinear c0003" test_trilinear_c0003, tc "trilinear c0021" test_trilinear_c0021, tc "trilinear c0012" test_trilinear_c0012, tc "trilinear c0120" test_trilinear_c0120, tc "trilinear c0102" test_trilinear_c0102, tc "trilinear c0111" test_trilinear_c0111, tc "trilinear c0210" test_trilinear_c0210, tc "trilinear c0201" test_trilinear_c0201, tc "trilinear c0300" test_trilinear_c0300, tc "trilinear c1020" test_trilinear_c1020, tc "trilinear c1002" test_trilinear_c1002, tc "trilinear c1011" test_trilinear_c1011, tc "trilinear c1110" test_trilinear_c1110, tc "trilinear c1101" test_trilinear_c1101, tc "trilinear c1200" test_trilinear_c1200, tc "trilinear c2010" test_trilinear_c2010, tc "trilinear c2001" test_trilinear_c2001, tc "trilinear c2100" test_trilinear_c2100, tc "trilinear c3000" test_trilinear_c3000, tc "trilinear f0_t0_v0" test_trilinear_f0_t0_v0, tc "trilinear f0_t0_v1" test_trilinear_f0_t0_v1, tc "trilinear f0_t0_v2" test_trilinear_f0_t0_v2, tc "trilinear f0_t0_v3" test_trilinear_f0_t0_v3, tc "trilinear reproduced" test_trilinear_reproduced, tc "zeros reproduced" test_zeros_reproduced ] misc_tests :: Test.Framework.Test misc_tests = testGroup "Misc Tests" [ tc "flatten (1)" test_flatten1 ] tetrahedron_tests :: Test.Framework.Test tetrahedron_tests = testGroup "Tetrahedron Tests" [ tc "volume (1)" test_volume1, tc "volume (2)" test_volume2, tc "contains point (1)" test_contains_point1, tc "doesn't contain point (1)" test_doesnt_contain_point1, tc "doesn't contain point (2)" test_doesnt_contain_point2, tc "doesn't contain point (3)" test_doesnt_contain_point3, tc "doesn't contain point (4)" test_doesnt_contain_point4, tc "doesn't contain point (5)" test_doesnt_contain_point5 ] -- | Defined so that my test names fit on one line. tp :: Test.QuickCheck.Testable a => Test.Framework.TestName -> a -> Test.Framework.Test tp = testProperty misc_properties :: Test.Framework.Test misc_properties = testGroup "Misc Properties" [ tp "factorial greater" prop_factorial_greater ] cardinal_properties :: Test.Framework.Test cardinal_properties = testGroup "Cardinal Properties" [ tp "ccwx rotation changes direction" prop_ccwx_rotation_changes_direction, tp "cwx rotation changes direction" prop_cwx_rotation_changes_direction, tp "ccwy rotation changes direction" prop_ccwy_rotation_changes_direction, tp "cwy rotation changes direction" prop_cwy_rotation_changes_direction, tp "ccwz rotation changes direction" prop_ccwz_rotation_changes_direction, tp "cwz rotation changes direction" prop_cwz_rotation_changes_direction, tp "ccwx rotation result unique" prop_ccwx_rotation_result_unique, tp "cwx rotation result unique" prop_cwx_rotation_result_unique, tp "ccwy rotation result unique" prop_ccwy_rotation_result_unique, tp "cwy rotation result unique" prop_cwy_rotation_result_unique, tp "ccwz rotation result unique" prop_ccwz_rotation_result_unique, tp "cwz rotation result unique" prop_cwz_rotation_result_unique, tp "four cwx is identity" prop_four_cwx_is_identity, tp "four ccwx is identity" prop_four_ccwx_is_identity, tp "four cwy is identity" prop_four_cwy_is_identity, tp "four ccwy is identity" prop_four_ccwy_is_identity, tp "four cwz is identity" prop_four_cwz_is_identity, tp "four ccwz is identity" prop_four_ccwz_is_identity] p78_24_properties :: Test.Framework.Test p78_24_properties = testGroup "p. 78, Section (2.4) Properties" [ tp "c3000 identity" TT.prop_c3000_identity, tp "c2100 identity" TT.prop_c2100_identity, tp "c1110 _identity" TT.prop_c1110_identity] p78_25_properties :: Test.Framework.Test p78_25_properties = testGroup "p. 78, Section (2.5) Properties" [ tp "c_ijk1 identity" prop_cijk1_identity ] edge_incidence_tests :: Test.Framework.Test edge_incidence_tests = testGroup "Edge Incidence Tests" [ tp "t0 shares edge with t6" prop_t0_shares_edge_with_t6, tp "t0 shares edge with t1" prop_t0_shares_edge_with_t1, tp "t0 shares edge with t3" prop_t0_shares_edge_with_t3, tp "t1 shares edge with t2" prop_t1_shares_edge_with_t2, tp "t1 shares edge with t19" prop_t1_shares_edge_with_t19, tp "t2 shares edge with t3" prop_t2_shares_edge_with_t3, tp "t2 shares edge with t12" prop_t2_shares_edge_with_t12, tp "t3 shares edge with t21" prop_t3_shares_edge_with_t21, tp "t4 shares edge with t5" prop_t4_shares_edge_with_t5, tp "t4 shares edge with t7" prop_t4_shares_edge_with_t7, tp "t4 shares edge with t10" prop_t4_shares_edge_with_t10, tp "t5 shares edge with t6" prop_t5_shares_edge_with_t6, tp "t5 shares edge with t16" prop_t5_shares_edge_with_t16, tp "t6 shares edge with t7" prop_t6_shares_edge_with_t7, tp "t7 shares edge with t20" prop_t7_shares_edge_with_t20 ] p79_26_properties :: Test.Framework.Test p79_26_properties = testGroup "p. 79, Section (2.6) Properties" [ tp "c0120 identity1" TC.prop_c0120_identity1, tp "c0120 identity2" TC.prop_c0120_identity2, tp "c0120 identity3" TC.prop_c0120_identity3, -- -- These repeats of the previous test are failing at the moment. -- -- tp "c0120 identity4" TC.prop_c0120_identity4, -- tp "c0120 identity5" TC.prop_c0120_identity5, -- tp "c0120 identity6" TC.prop_c0120_identity6, tp "c0210 identity1" TC.prop_c0210_identity1, tp "c0300 identity1" TC.prop_c0300_identity1, tp "c1110 identity" TC.prop_c1110_identity, tp "c1200 identity1" TC.prop_c1200_identity1, tp "c2100 identity1" TC.prop_c2100_identity1] p79_27_properties :: Test.Framework.Test p79_27_properties = testGroup "p. 79, Section (2.7) Properties" [ tp "c0102 identity1" TC.prop_c0102_identity1, tp "c0201 identity1" TC.prop_c0201_identity1, tp "c0300 identity2" TC.prop_c0300_identity2, tp "c1101 identity" TC.prop_c1101_identity, tp "c1200 identity2" TC.prop_c1200_identity2, tp "c2100 identity2" TC.prop_c2100_identity2 ] p79_28_properties :: Test.Framework.Test p79_28_properties = testGroup "p. 79, Section (2.8) Properties" [ tp "c3000 identity" TC.prop_c3000_identity, tp "c2010 identity" TC.prop_c2010_identity, tp "c2001 identity" TC.prop_c2001_identity, tp "c1020 identity" TC.prop_c1020_identity, tp "c1002 identity" TC.prop_c1002_identity, tp "c1011 identity" TC.prop_c1011_identity ] cube_properties :: Test.Framework.Test cube_properties = testGroup "Cube Properties" [ tp "all volumes positive" prop_all_volumes_positive, tp "tetrahedron0 volumes exact" prop_tetrahedron0_volumes_exact, tp "tetrahedron1 volumes exact" prop_tetrahedron1_volumes_exact, tp "tetrahedron2 volumes exact" prop_tetrahedron2_volumes_exact, tp "tetrahedron3 volumes exact" prop_tetrahedron3_volumes_exact, tp "tetrahedron4 volumes exact" prop_tetrahedron4_volumes_exact, tp "tetrahedron5 volumes exact" prop_tetrahedron5_volumes_exact, tp "tetrahedron6 volumes exact" prop_tetrahedron6_volumes_exact, tp "tetrahedron7 volumes exact" prop_tetrahedron7_volumes_exact, tp "tetrahedron8 volumes exact" prop_tetrahedron8_volumes_exact, tp "tetrahedron9 volumes exact" prop_tetrahedron9_volumes_exact, tp "tetrahedron10 volumes exact" prop_tetrahedron10_volumes_exact, tp "tetrahedron11 volumes exact" prop_tetrahedron11_volumes_exact, tp "tetrahedron12 volumes exact" prop_tetrahedron12_volumes_exact, tp "tetrahedron13 volumes exact" prop_tetrahedron13_volumes_exact, tp "tetrahedron14 volumes exact" prop_tetrahedron14_volumes_exact, tp "tetrahedron15 volumes exact" prop_tetrahedron15_volumes_exact, tp "tetrahedron16 volumes exact" prop_tetrahedron16_volumes_exact, tp "tetrahedron17 volumes exact" prop_tetrahedron17_volumes_exact, tp "tetrahedron18 volumes exact" prop_tetrahedron18_volumes_exact, tp "tetrahedron19 volumes exact" prop_tetrahedron19_volumes_exact, tp "tetrahedron20 volumes exact" prop_tetrahedron20_volumes_exact, tp "tetrahedron21 volumes exact" prop_tetrahedron21_volumes_exact, tp "tetrahedron22 volumes exact" prop_tetrahedron22_volumes_exact, tp "tetrahedron23 volumes exact" prop_tetrahedron23_volumes_exact, tp "tetrahedron0 volumes positive" prop_tetrahedron0_volumes_positive, tp "tetrahedron1 volumes positive" prop_tetrahedron1_volumes_positive, tp "tetrahedron2 volumes positive" prop_tetrahedron2_volumes_positive, tp "tetrahedron3 volumes positive" prop_tetrahedron3_volumes_positive, tp "tetrahedron4 volumes positive" prop_tetrahedron4_volumes_positive, tp "tetrahedron5 volumes positive" prop_tetrahedron5_volumes_positive, tp "tetrahedron6 volumes positive" prop_tetrahedron6_volumes_positive, tp "tetrahedron7 volumes positive" prop_tetrahedron7_volumes_positive, tp "tetrahedron8 volumes positive" prop_tetrahedron8_volumes_positive, tp "tetrahedron9 volumes positive" prop_tetrahedron9_volumes_positive, tp "tetrahedron10 volumes positive" prop_tetrahedron10_volumes_positive, tp "tetrahedron11 volumes positive" prop_tetrahedron11_volumes_positive, tp "tetrahedron12 volumes positive" prop_tetrahedron12_volumes_positive, tp "tetrahedron13 volumes positive" prop_tetrahedron13_volumes_positive, tp "tetrahedron14 volumes positive" prop_tetrahedron14_volumes_positive, tp "tetrahedron15 volumes positive" prop_tetrahedron15_volumes_positive, tp "tetrahedron16 volumes positive" prop_tetrahedron16_volumes_positive, tp "tetrahedron17 volumes positive" prop_tetrahedron17_volumes_positive, tp "tetrahedron18 volumes positive" prop_tetrahedron18_volumes_positive, tp "tetrahedron19 volumes positive" prop_tetrahedron19_volumes_positive, tp "tetrahedron20 volumes positive" prop_tetrahedron20_volumes_positive, tp "tetrahedron21 volumes positive" prop_tetrahedron21_volumes_positive, tp "tetrahedron22 volumes positive" prop_tetrahedron22_volumes_positive, tp "tetrahedron23 volumes positive" prop_tetrahedron23_volumes_positive, tp "v0 all equal" prop_v0_all_equal, tp "interior values all identical" prop_interior_values_all_identical, tp "c-tilde_2100 rotation correct" prop_c_tilde_2100_rotation_correct, tp "c-tilde_2100 correct" prop_c_tilde_2100_correct ] tetrahedron_properties :: Test.Framework.Test tetrahedron_properties = testGroup "Tetrahedron Properties" [ tp "b0_v0_always_unity" prop_b0_v0_always_unity, tp "b0_v1_always_zero" prop_b0_v1_always_zero, tp "b0_v2_always_zero" prop_b0_v2_always_zero, tp "b0_v3_always_zero" prop_b0_v3_always_zero, tp "b1_v1_always_unity" prop_b1_v1_always_unity, tp "b1_v0_always_zero" prop_b1_v0_always_zero, tp "b1_v2_always_zero" prop_b1_v2_always_zero, tp "b1_v3_always_zero" prop_b1_v3_always_zero, tp "b2_v2_always_unity" prop_b2_v2_always_unity, tp "b2_v0_always_zero" prop_b2_v0_always_zero, tp "b2_v1_always_zero" prop_b2_v1_always_zero, tp "b2_v3_always_zero" prop_b2_v3_always_zero, tp "b3_v3_always_unity" prop_b3_v3_always_unity, tp "b3_v0_always_zero" prop_b3_v0_always_zero, tp "b3_v1_always_zero" prop_b3_v1_always_zero, tp "b3_v2_always_zero" prop_b3_v2_always_zero, tp "swapping_vertices_doesnt_affect_coefficients1" $ prop_swapping_vertices_doesnt_affect_coefficients1, tp "swapping_vertices_doesnt_affect_coefficients2" $ prop_swapping_vertices_doesnt_affect_coefficients2, tp "swapping_vertices_doesnt_affect_coefficients3" $ prop_swapping_vertices_doesnt_affect_coefficients3, tp "swapping_vertices_doesnt_affect_coefficients4" $ prop_swapping_vertices_doesnt_affect_coefficients4, tp "x rotation doesn't affect front" prop_x_rotation_doesnt_affect_front, tp "x rotation doesn't affect back" prop_x_rotation_doesnt_affect_back, tp "y rotation doesn't affect left" prop_y_rotation_doesnt_affect_left, tp "y rotation doesn't affect right" prop_y_rotation_doesnt_affect_right, tp "z rotation doesn't affect top" prop_z_rotation_doesnt_affect_top, tp "z rotation doesn't affect down" prop_z_rotation_doesnt_affect_down ] tests :: [Test.Framework.Test] tests = [ cardinal_tests, function_values_tests, grid_tests, misc_tests, tetrahedron_tests, cube_properties, tetrahedron_properties, misc_properties, cardinal_properties, edge_incidence_tests, p78_24_properties, -- p78_25_properties, p79_26_properties, p79_27_properties, p79_28_properties ]