]> gitweb.michael.orlitzky.com - spline3.git/blob - test/TestSuite.hs
Reduce more duplication in the Grid tests.
[spline3.git] / test / TestSuite.hs
1 module TestSuite
2 where
3
4 import Test.Framework (defaultMain, testGroup, Test, TestName, TestOptions(..))
5 import Test.Framework.Providers.API (TestName)
6 import Test.Framework.Providers.DocTest
7 import Test.Framework.Providers.HUnit (testCase)
8 import Test.Framework.Providers.QuickCheck2 (testProperty)
9 import Test.HUnit
10 import Test.QuickCheck (Testable ())
11
12 import Tests.Cardinal
13 import Tests.Cube as TC
14 import Tests.FunctionValues
15 import Tests.Grid
16 import Tests.Misc
17 import Tests.Tetrahedron as TT
18
19 main :: IO ()
20 main = do
21 dt <- docTest ["src/Everything.hs"] ["-isrc"]
22 defaultMain $ [dt] ++ tests
23
24 -- | Defined so that my test names fit on one line.
25 tc :: Test.Framework.Providers.API.TestName -> Test.HUnit.Assertion -> Test.Framework.Test
26 tc = testCase
27
28 cardinal_tests :: Test.Framework.Test
29 cardinal_tests =
30 testGroup "Cardinal Tests" [
31 tc "c-tilde_2100 rotation correct" test_c_tilde_2100_rotation_correct ]
32
33 function_values_tests :: Test.Framework.Test
34 function_values_tests =
35 testGroup "FunctionValues Tests" [ tc "test directions" test_directions ]
36
37 grid_tests :: Test.Framework.Test
38 grid_tests =
39 testGroup "Grid Tests" [
40 trilinear_c0_t0_tests,
41 tc "tetrahedra collision test isn't too sensitive"
42 test_tetrahedra_collision_sensitivity,
43 tc "trilinear reproduced" test_trilinear_reproduced,
44 tc "zeros reproduced" test_zeros_reproduced,
45 tc "trilinear9x9x9 reproduced" test_trilinear9x9x9_reproduced ]
46
47
48 misc_tests :: Test.Framework.Test
49 misc_tests =
50 testGroup "Misc Tests" [
51 tc "flatten (1)" test_flatten1 ]
52
53 tetrahedron_tests :: Test.Framework.Test
54 tetrahedron_tests =
55 testGroup "Tetrahedron Tests" [
56 tc "volume (1)" test_volume1,
57 tc "volume (2)" test_volume2,
58 tc "contains point (1)" test_contains_point1,
59 tc "doesn't contain point (1)" test_doesnt_contain_point1,
60 tc "doesn't contain point (2)" test_doesnt_contain_point2,
61 tc "doesn't contain point (3)" test_doesnt_contain_point3,
62 tc "doesn't contain point (4)" test_doesnt_contain_point4,
63 tc "doesn't contain point (5)" test_doesnt_contain_point5 ]
64
65 -- | Defined so that my test names fit on one line.
66 tp :: Test.QuickCheck.Testable a => Test.Framework.TestName -> a -> Test.Framework.Test
67 tp = testProperty
68
69 misc_properties :: Test.Framework.Test
70 misc_properties =
71 testGroup "Misc Properties" [
72 tp "factorial greater" prop_factorial_greater ]
73
74 cardinal_properties :: Test.Framework.Test
75 cardinal_properties =
76 testGroup "Cardinal Properties" [
77 tp "ccwx rotation changes direction" prop_ccwx_rotation_changes_direction,
78 tp "cwx rotation changes direction" prop_cwx_rotation_changes_direction,
79 tp "ccwy rotation changes direction" prop_ccwy_rotation_changes_direction,
80 tp "cwy rotation changes direction" prop_cwy_rotation_changes_direction,
81 tp "ccwz rotation changes direction" prop_ccwz_rotation_changes_direction,
82 tp "cwz rotation changes direction" prop_cwz_rotation_changes_direction,
83 tp "ccwx rotation result unique" prop_ccwx_rotation_result_unique,
84 tp "cwx rotation result unique" prop_cwx_rotation_result_unique,
85 tp "ccwy rotation result unique" prop_ccwy_rotation_result_unique,
86 tp "cwy rotation result unique" prop_cwy_rotation_result_unique,
87 tp "ccwz rotation result unique" prop_ccwz_rotation_result_unique,
88 tp "cwz rotation result unique" prop_cwz_rotation_result_unique,
89 tp "four cwx is identity" prop_four_cwx_is_identity,
90 tp "four ccwx is identity" prop_four_ccwx_is_identity,
91 tp "four cwy is identity" prop_four_cwy_is_identity,
92 tp "four ccwy is identity" prop_four_ccwy_is_identity,
93 tp "four cwz is identity" prop_four_cwz_is_identity,
94 tp "four ccwz is identity" prop_four_ccwz_is_identity]
95
96
97 p78_24_properties :: Test.Framework.Test
98 p78_24_properties =
99 testGroup "p. 78, Section (2.4) Properties" [
100 tp "c3000 identity" TT.prop_c3000_identity,
101 tp "c2100 identity" TT.prop_c2100_identity,
102 tp "c1110 identity" TT.prop_c1110_identity]
103
104 p78_25_properties :: Test.Framework.Test
105 p78_25_properties =
106 testGroup "p. 78, Section (2.5) Properties" [
107 tp "c_ijk1 identity" prop_cijk1_identity ]
108
109 edge_incidence_tests :: Test.Framework.Test
110 edge_incidence_tests =
111 testGroup "Edge Incidence Tests" [
112 tp "t0 shares edge with t6" prop_t0_shares_edge_with_t6,
113 tp "t0 shares edge with t1" prop_t0_shares_edge_with_t1,
114 tp "t0 shares edge with t3" prop_t0_shares_edge_with_t3,
115 tp "t1 shares edge with t2" prop_t1_shares_edge_with_t2,
116 tp "t1 shares edge with t19" prop_t1_shares_edge_with_t19,
117 tp "t2 shares edge with t3" prop_t2_shares_edge_with_t3,
118 tp "t2 shares edge with t12" prop_t2_shares_edge_with_t12,
119 tp "t3 shares edge with t21" prop_t3_shares_edge_with_t21,
120 tp "t4 shares edge with t5" prop_t4_shares_edge_with_t5,
121 tp "t4 shares edge with t7" prop_t4_shares_edge_with_t7,
122 tp "t4 shares edge with t10" prop_t4_shares_edge_with_t10,
123 tp "t5 shares edge with t6" prop_t5_shares_edge_with_t6,
124 tp "t5 shares edge with t16" prop_t5_shares_edge_with_t16,
125 tp "t6 shares edge with t7" prop_t6_shares_edge_with_t7,
126 tp "t7 shares edge with t20" prop_t7_shares_edge_with_t20 ]
127
128
129 p79_26_properties :: Test.Framework.Test
130 p79_26_properties =
131 testGroup "p. 79, Section (2.6) Properties" [
132 tp "c0120 identity1" TC.prop_c0120_identity1,
133 tp "c0120 identity2" TC.prop_c0120_identity2,
134 tp "c0120 identity3" TC.prop_c0120_identity3,
135 tp "c0120 identity4" TC.prop_c0120_identity4,
136 tp "c0120 identity5" TC.prop_c0120_identity5,
137 tp "c0120 identity6" TC.prop_c0120_identity6,
138 tp "c0120 identity7" TC.prop_c0120_identity7,
139 tp "c0210 identity1" TC.prop_c0210_identity1,
140 tp "c0300 identity1" TC.prop_c0300_identity1,
141 tp "c1110 identity" TC.prop_c1110_identity,
142 tp "c1200 identity1" TC.prop_c1200_identity1,
143 tp "c2100 identity1" TC.prop_c2100_identity1]
144
145 p79_27_properties :: Test.Framework.Test
146 p79_27_properties =
147 testGroup "p. 79, Section (2.7) Properties" [
148 tp "c0102 identity1" TC.prop_c0102_identity1,
149 tp "c0201 identity1" TC.prop_c0201_identity1,
150 tp "c0300 identity2" TC.prop_c0300_identity2,
151 tp "c1101 identity" TC.prop_c1101_identity,
152 tp "c1200 identity2" TC.prop_c1200_identity2,
153 tp "c2100 identity2" TC.prop_c2100_identity2 ]
154
155
156 p79_28_properties :: Test.Framework.Test
157 p79_28_properties =
158 testGroup "p. 79, Section (2.8) Properties" [
159 tp "c3000 identity" TC.prop_c3000_identity,
160 tp "c2010 identity" TC.prop_c2010_identity,
161 tp "c2001 identity" TC.prop_c2001_identity,
162 tp "c1020 identity" TC.prop_c1020_identity,
163 tp "c1002 identity" TC.prop_c1002_identity,
164 tp "c1011 identity" TC.prop_c1011_identity ]
165
166
167 cube_properties :: Test.Framework.Test
168 cube_properties =
169 testGroup "Cube Properties" [
170 tp "all volumes positive" prop_all_volumes_positive,
171 tp "all volumes exact" prop_all_volumes_exact,
172 tp "v0 all equal" prop_v0_all_equal,
173 tp "interior values all identical" prop_interior_values_all_identical,
174 tp "c-tilde_2100 rotation correct" prop_c_tilde_2100_rotation_correct,
175 tp "c-tilde_2100 correct" prop_c_tilde_2100_correct ]
176
177
178 tetrahedron_properties :: Test.Framework.Test
179 tetrahedron_properties =
180 testGroup "Tetrahedron Properties" [
181 tp "b0_v0_always_unity" prop_b0_v0_always_unity,
182 tp "b0_v1_always_zero" prop_b0_v1_always_zero,
183 tp "b0_v2_always_zero" prop_b0_v2_always_zero,
184 tp "b0_v3_always_zero" prop_b0_v3_always_zero,
185 tp "b1_v1_always_unity" prop_b1_v1_always_unity,
186 tp "b1_v0_always_zero" prop_b1_v0_always_zero,
187 tp "b1_v2_always_zero" prop_b1_v2_always_zero,
188 tp "b1_v3_always_zero" prop_b1_v3_always_zero,
189 tp "b2_v2_always_unity" prop_b2_v2_always_unity,
190 tp "b2_v0_always_zero" prop_b2_v0_always_zero,
191 tp "b2_v1_always_zero" prop_b2_v1_always_zero,
192 tp "b2_v3_always_zero" prop_b2_v3_always_zero,
193 tp "b3_v3_always_unity" prop_b3_v3_always_unity,
194 tp "b3_v0_always_zero" prop_b3_v0_always_zero,
195 tp "b3_v1_always_zero" prop_b3_v1_always_zero,
196 tp "b3_v2_always_zero" prop_b3_v2_always_zero,
197 tp "swapping_vertices_doesnt_affect_coefficients1"
198 $ prop_swapping_vertices_doesnt_affect_coefficients1,
199 tp "swapping_vertices_doesnt_affect_coefficients2"
200 $ prop_swapping_vertices_doesnt_affect_coefficients2,
201 tp "swapping_vertices_doesnt_affect_coefficients3"
202 $ prop_swapping_vertices_doesnt_affect_coefficients3,
203 tp "swapping_vertices_doesnt_affect_coefficients4"
204 $ prop_swapping_vertices_doesnt_affect_coefficients4,
205 tp "x rotation doesn't affect front" prop_x_rotation_doesnt_affect_front,
206 tp "x rotation doesn't affect back" prop_x_rotation_doesnt_affect_back,
207 tp "y rotation doesn't affect left" prop_y_rotation_doesnt_affect_left,
208 tp "y rotation doesn't affect right" prop_y_rotation_doesnt_affect_right,
209 tp "z rotation doesn't affect top" prop_z_rotation_doesnt_affect_top,
210 tp "z rotation doesn't affect down" prop_z_rotation_doesnt_affect_down ]
211
212 tests :: [Test.Framework.Test]
213 tests = [ cardinal_tests,
214 function_values_tests,
215 grid_tests,
216 misc_tests,
217 tetrahedron_tests,
218 cube_properties,
219 tetrahedron_properties,
220 misc_properties,
221 cardinal_properties,
222 edge_incidence_tests,
223 p78_24_properties,
224 -- p78_25_properties,
225 p79_26_properties,
226 p79_27_properties,
227 p79_28_properties ]