]> gitweb.michael.orlitzky.com - spline3.git/blob - test/TestSuite.hs
Replace individual tetrahedron volume tests with combined ones.
[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 tc "trilinear c0030" test_trilinear_c0030,
41 tc "trilinear c0003" test_trilinear_c0003,
42 tc "trilinear c0021" test_trilinear_c0021,
43 tc "trilinear c0012" test_trilinear_c0012,
44 tc "trilinear c0120" test_trilinear_c0120,
45 tc "trilinear c0102" test_trilinear_c0102,
46 tc "trilinear c0111" test_trilinear_c0111,
47 tc "trilinear c0210" test_trilinear_c0210,
48 tc "trilinear c0201" test_trilinear_c0201,
49 tc "trilinear c0300" test_trilinear_c0300,
50 tc "trilinear c1020" test_trilinear_c1020,
51 tc "trilinear c1002" test_trilinear_c1002,
52 tc "trilinear c1011" test_trilinear_c1011,
53 tc "trilinear c1110" test_trilinear_c1110,
54 tc "trilinear c1101" test_trilinear_c1101,
55 tc "trilinear c1200" test_trilinear_c1200,
56 tc "trilinear c2010" test_trilinear_c2010,
57 tc "trilinear c2001" test_trilinear_c2001,
58 tc "trilinear c2100" test_trilinear_c2100,
59 tc "trilinear c3000" test_trilinear_c3000,
60 tc "trilinear f0_t0_v0" test_trilinear_f0_t0_v0,
61 tc "trilinear f0_t0_v1" test_trilinear_f0_t0_v1,
62 tc "trilinear f0_t0_v2" test_trilinear_f0_t0_v2,
63 tc "trilinear f0_t0_v3" test_trilinear_f0_t0_v3,
64 tc "trilinear reproduced" test_trilinear_reproduced,
65 tc "zeros reproduced" test_zeros_reproduced,
66 tc "trilinearx2 reproduced (t0)" test_trilinearx2_reproduced_t0 ]
67
68
69 misc_tests :: Test.Framework.Test
70 misc_tests =
71 testGroup "Misc Tests" [
72 tc "flatten (1)" test_flatten1 ]
73
74 tetrahedron_tests :: Test.Framework.Test
75 tetrahedron_tests =
76 testGroup "Tetrahedron Tests" [
77 tc "volume (1)" test_volume1,
78 tc "volume (2)" test_volume2,
79 tc "contains point (1)" test_contains_point1,
80 tc "doesn't contain point (1)" test_doesnt_contain_point1,
81 tc "doesn't contain point (2)" test_doesnt_contain_point2,
82 tc "doesn't contain point (3)" test_doesnt_contain_point3,
83 tc "doesn't contain point (4)" test_doesnt_contain_point4,
84 tc "doesn't contain point (5)" test_doesnt_contain_point5 ]
85
86 -- | Defined so that my test names fit on one line.
87 tp :: Test.QuickCheck.Testable a => Test.Framework.TestName -> a -> Test.Framework.Test
88 tp = testProperty
89
90 misc_properties :: Test.Framework.Test
91 misc_properties =
92 testGroup "Misc Properties" [
93 tp "factorial greater" prop_factorial_greater ]
94
95 cardinal_properties :: Test.Framework.Test
96 cardinal_properties =
97 testGroup "Cardinal Properties" [
98 tp "ccwx rotation changes direction" prop_ccwx_rotation_changes_direction,
99 tp "cwx rotation changes direction" prop_cwx_rotation_changes_direction,
100 tp "ccwy rotation changes direction" prop_ccwy_rotation_changes_direction,
101 tp "cwy rotation changes direction" prop_cwy_rotation_changes_direction,
102 tp "ccwz rotation changes direction" prop_ccwz_rotation_changes_direction,
103 tp "cwz rotation changes direction" prop_cwz_rotation_changes_direction,
104 tp "ccwx rotation result unique" prop_ccwx_rotation_result_unique,
105 tp "cwx rotation result unique" prop_cwx_rotation_result_unique,
106 tp "ccwy rotation result unique" prop_ccwy_rotation_result_unique,
107 tp "cwy rotation result unique" prop_cwy_rotation_result_unique,
108 tp "ccwz rotation result unique" prop_ccwz_rotation_result_unique,
109 tp "cwz rotation result unique" prop_cwz_rotation_result_unique,
110 tp "four cwx is identity" prop_four_cwx_is_identity,
111 tp "four ccwx is identity" prop_four_ccwx_is_identity,
112 tp "four cwy is identity" prop_four_cwy_is_identity,
113 tp "four ccwy is identity" prop_four_ccwy_is_identity,
114 tp "four cwz is identity" prop_four_cwz_is_identity,
115 tp "four ccwz is identity" prop_four_ccwz_is_identity]
116
117
118 p78_24_properties :: Test.Framework.Test
119 p78_24_properties =
120 testGroup "p. 78, Section (2.4) Properties" [
121 tp "c3000 identity" TT.prop_c3000_identity,
122 tp "c2100 identity" TT.prop_c2100_identity,
123 tp "c1110 identity" TT.prop_c1110_identity]
124
125 p78_25_properties :: Test.Framework.Test
126 p78_25_properties =
127 testGroup "p. 78, Section (2.5) Properties" [
128 tp "c_ijk1 identity" prop_cijk1_identity ]
129
130 edge_incidence_tests :: Test.Framework.Test
131 edge_incidence_tests =
132 testGroup "Edge Incidence Tests" [
133 tp "t0 shares edge with t6" prop_t0_shares_edge_with_t6,
134 tp "t0 shares edge with t1" prop_t0_shares_edge_with_t1,
135 tp "t0 shares edge with t3" prop_t0_shares_edge_with_t3,
136 tp "t1 shares edge with t2" prop_t1_shares_edge_with_t2,
137 tp "t1 shares edge with t19" prop_t1_shares_edge_with_t19,
138 tp "t2 shares edge with t3" prop_t2_shares_edge_with_t3,
139 tp "t2 shares edge with t12" prop_t2_shares_edge_with_t12,
140 tp "t3 shares edge with t21" prop_t3_shares_edge_with_t21,
141 tp "t4 shares edge with t5" prop_t4_shares_edge_with_t5,
142 tp "t4 shares edge with t7" prop_t4_shares_edge_with_t7,
143 tp "t4 shares edge with t10" prop_t4_shares_edge_with_t10,
144 tp "t5 shares edge with t6" prop_t5_shares_edge_with_t6,
145 tp "t5 shares edge with t16" prop_t5_shares_edge_with_t16,
146 tp "t6 shares edge with t7" prop_t6_shares_edge_with_t7,
147 tp "t7 shares edge with t20" prop_t7_shares_edge_with_t20 ]
148
149
150 p79_26_properties :: Test.Framework.Test
151 p79_26_properties =
152 testGroup "p. 79, Section (2.6) Properties" [
153 tp "c0120 identity1" TC.prop_c0120_identity1,
154 tp "c0120 identity2" TC.prop_c0120_identity2,
155 tp "c0120 identity3" TC.prop_c0120_identity3,
156 tp "c0120 identity4" TC.prop_c0120_identity4,
157 tp "c0120 identity5" TC.prop_c0120_identity5,
158 tp "c0120 identity6" TC.prop_c0120_identity6,
159 tp "c0120 identity7" TC.prop_c0120_identity7,
160 tp "c0210 identity1" TC.prop_c0210_identity1,
161 tp "c0300 identity1" TC.prop_c0300_identity1,
162 tp "c1110 identity" TC.prop_c1110_identity,
163 tp "c1200 identity1" TC.prop_c1200_identity1,
164 tp "c2100 identity1" TC.prop_c2100_identity1]
165
166 p79_27_properties :: Test.Framework.Test
167 p79_27_properties =
168 testGroup "p. 79, Section (2.7) Properties" [
169 tp "c0102 identity1" TC.prop_c0102_identity1,
170 tp "c0201 identity1" TC.prop_c0201_identity1,
171 tp "c0300 identity2" TC.prop_c0300_identity2,
172 tp "c1101 identity" TC.prop_c1101_identity,
173 tp "c1200 identity2" TC.prop_c1200_identity2,
174 tp "c2100 identity2" TC.prop_c2100_identity2 ]
175
176
177 p79_28_properties :: Test.Framework.Test
178 p79_28_properties =
179 testGroup "p. 79, Section (2.8) Properties" [
180 tp "c3000 identity" TC.prop_c3000_identity,
181 tp "c2010 identity" TC.prop_c2010_identity,
182 tp "c2001 identity" TC.prop_c2001_identity,
183 tp "c1020 identity" TC.prop_c1020_identity,
184 tp "c1002 identity" TC.prop_c1002_identity,
185 tp "c1011 identity" TC.prop_c1011_identity ]
186
187
188 cube_properties :: Test.Framework.Test
189 cube_properties =
190 testGroup "Cube Properties" [
191 tp "all volumes positive" prop_all_volumes_positive,
192 tp "all volumes exact" prop_all_volumes_exact,
193 tp "tetrahedron0 volumes positive" prop_tetrahedron0_volumes_positive,
194 tp "tetrahedron1 volumes positive" prop_tetrahedron1_volumes_positive,
195 tp "tetrahedron2 volumes positive" prop_tetrahedron2_volumes_positive,
196 tp "tetrahedron3 volumes positive" prop_tetrahedron3_volumes_positive,
197 tp "tetrahedron4 volumes positive" prop_tetrahedron4_volumes_positive,
198 tp "tetrahedron5 volumes positive" prop_tetrahedron5_volumes_positive,
199 tp "tetrahedron6 volumes positive" prop_tetrahedron6_volumes_positive,
200 tp "tetrahedron7 volumes positive" prop_tetrahedron7_volumes_positive,
201 tp "tetrahedron8 volumes positive" prop_tetrahedron8_volumes_positive,
202 tp "tetrahedron9 volumes positive" prop_tetrahedron9_volumes_positive,
203 tp "tetrahedron10 volumes positive" prop_tetrahedron10_volumes_positive,
204 tp "tetrahedron11 volumes positive" prop_tetrahedron11_volumes_positive,
205 tp "tetrahedron12 volumes positive" prop_tetrahedron12_volumes_positive,
206 tp "tetrahedron13 volumes positive" prop_tetrahedron13_volumes_positive,
207 tp "tetrahedron14 volumes positive" prop_tetrahedron14_volumes_positive,
208 tp "tetrahedron15 volumes positive" prop_tetrahedron15_volumes_positive,
209 tp "tetrahedron16 volumes positive" prop_tetrahedron16_volumes_positive,
210 tp "tetrahedron17 volumes positive" prop_tetrahedron17_volumes_positive,
211 tp "tetrahedron18 volumes positive" prop_tetrahedron18_volumes_positive,
212 tp "tetrahedron19 volumes positive" prop_tetrahedron19_volumes_positive,
213 tp "tetrahedron20 volumes positive" prop_tetrahedron20_volumes_positive,
214 tp "tetrahedron21 volumes positive" prop_tetrahedron21_volumes_positive,
215 tp "tetrahedron22 volumes positive" prop_tetrahedron22_volumes_positive,
216 tp "tetrahedron23 volumes positive" prop_tetrahedron23_volumes_positive,
217 tp "v0 all equal" prop_v0_all_equal,
218 tp "interior values all identical" prop_interior_values_all_identical,
219 tp "c-tilde_2100 rotation correct" prop_c_tilde_2100_rotation_correct,
220 tp "c-tilde_2100 correct" prop_c_tilde_2100_correct ]
221
222
223 tetrahedron_properties :: Test.Framework.Test
224 tetrahedron_properties =
225 testGroup "Tetrahedron Properties" [
226 tp "b0_v0_always_unity" prop_b0_v0_always_unity,
227 tp "b0_v1_always_zero" prop_b0_v1_always_zero,
228 tp "b0_v2_always_zero" prop_b0_v2_always_zero,
229 tp "b0_v3_always_zero" prop_b0_v3_always_zero,
230 tp "b1_v1_always_unity" prop_b1_v1_always_unity,
231 tp "b1_v0_always_zero" prop_b1_v0_always_zero,
232 tp "b1_v2_always_zero" prop_b1_v2_always_zero,
233 tp "b1_v3_always_zero" prop_b1_v3_always_zero,
234 tp "b2_v2_always_unity" prop_b2_v2_always_unity,
235 tp "b2_v0_always_zero" prop_b2_v0_always_zero,
236 tp "b2_v1_always_zero" prop_b2_v1_always_zero,
237 tp "b2_v3_always_zero" prop_b2_v3_always_zero,
238 tp "b3_v3_always_unity" prop_b3_v3_always_unity,
239 tp "b3_v0_always_zero" prop_b3_v0_always_zero,
240 tp "b3_v1_always_zero" prop_b3_v1_always_zero,
241 tp "b3_v2_always_zero" prop_b3_v2_always_zero,
242 tp "swapping_vertices_doesnt_affect_coefficients1"
243 $ prop_swapping_vertices_doesnt_affect_coefficients1,
244 tp "swapping_vertices_doesnt_affect_coefficients2"
245 $ prop_swapping_vertices_doesnt_affect_coefficients2,
246 tp "swapping_vertices_doesnt_affect_coefficients3"
247 $ prop_swapping_vertices_doesnt_affect_coefficients3,
248 tp "swapping_vertices_doesnt_affect_coefficients4"
249 $ prop_swapping_vertices_doesnt_affect_coefficients4,
250 tp "x rotation doesn't affect front" prop_x_rotation_doesnt_affect_front,
251 tp "x rotation doesn't affect back" prop_x_rotation_doesnt_affect_back,
252 tp "y rotation doesn't affect left" prop_y_rotation_doesnt_affect_left,
253 tp "y rotation doesn't affect right" prop_y_rotation_doesnt_affect_right,
254 tp "z rotation doesn't affect top" prop_z_rotation_doesnt_affect_top,
255 tp "z rotation doesn't affect down" prop_z_rotation_doesnt_affect_down ]
256
257 tests :: [Test.Framework.Test]
258 tests = [ cardinal_tests,
259 function_values_tests,
260 grid_tests,
261 misc_tests,
262 tetrahedron_tests,
263 cube_properties,
264 tetrahedron_properties,
265 misc_properties,
266 cardinal_properties,
267 edge_incidence_tests,
268 p78_24_properties,
269 -- p78_25_properties,
270 p79_26_properties,
271 p79_27_properties,
272 p79_28_properties ]