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, tc "trilinear9x9x9 reproduced" test_trilinear9x9x9_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, tp "c0120 identity4" TC.prop_c0120_identity4, tp "c0120 identity5" TC.prop_c0120_identity5, tp "c0120 identity6" TC.prop_c0120_identity6, tp "c0120 identity7" TC.prop_c0120_identity7, 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 "all volumes exact" prop_all_volumes_exact, 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 ]