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