]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Tests/Cube.hs
A bunch more test cleanup.
[spline3.git] / src / Tests / Cube.hs
index 46b2530ab82053fae93fcf68de6e839ed8cf6304..e9e21d6fad3f5fd389050ce135b1d54d631155ff 100644 (file)
@@ -7,15 +7,34 @@ import Cardinal
 import Comparisons
 import Cube hiding (i, j, k)
 import FunctionValues
-import Misc (all_equal)
-import Tests.FunctionValues ()
+import Misc (all_equal, disjoint)
 import Tetrahedron (b0, b1, b2, b3, c, fv,
                     v0, v1, v2, v3, volume)
 
 
-
 -- Quickcheck tests.
 
+-- | The 'front_half_tetrahedra' and 'back_half_tetrahedra' should
+--   have no tetrahedra in common.
+prop_front_back_tetrahedra_disjoint :: Cube -> Bool
+prop_front_back_tetrahedra_disjoint c =
+    disjoint (front_half_tetrahedra c) (back_half_tetrahedra c)
+
+
+-- | The 'top_half_tetrahedra' and 'down_half_tetrahedra' should
+--   have no tetrahedra in common.
+prop_top_down_tetrahedra_disjoint :: Cube -> Bool
+prop_top_down_tetrahedra_disjoint c =
+    disjoint (top_half_tetrahedra c) (down_half_tetrahedra c)
+
+
+-- | The 'left_half_tetrahedra' and 'right_half_tetrahedra' should
+--   have no tetrahedra in common.
+prop_left_right_tetrahedra_disjoint :: Cube -> Bool
+prop_left_right_tetrahedra_disjoint c =
+    disjoint (left_half_tetrahedra c) (right_half_tetrahedra c)
+
+
 -- | Since the grid size is necessarily positive, all tetrahedra
 --   (which comprise cubes of positive volume) must have positive volume
 --   as well.
@@ -44,151 +63,6 @@ prop_v0_all_equal cube = (v0 t0) == (v0 t1)
       t1 = head $ tail (tetrahedra cube)
 
 
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron0_volumes_positive :: Cube -> Bool
-prop_tetrahedron0_volumes_positive cube =
-    volume (tetrahedron0 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron1_volumes_positive :: Cube -> Bool
-prop_tetrahedron1_volumes_positive cube =
-    volume (tetrahedron1 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron2_volumes_positive :: Cube -> Bool
-prop_tetrahedron2_volumes_positive cube =
-    volume (tetrahedron2 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron3_volumes_positive :: Cube -> Bool
-prop_tetrahedron3_volumes_positive cube =
-    volume (tetrahedron3 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron4_volumes_positive :: Cube -> Bool
-prop_tetrahedron4_volumes_positive cube =
-    volume (tetrahedron4 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron5_volumes_positive :: Cube -> Bool
-prop_tetrahedron5_volumes_positive cube =
-    volume (tetrahedron5 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron6_volumes_positive :: Cube -> Bool
-prop_tetrahedron6_volumes_positive cube =
-    volume (tetrahedron6 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron7_volumes_positive :: Cube -> Bool
-prop_tetrahedron7_volumes_positive cube =
-    volume (tetrahedron7 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron8_volumes_positive :: Cube -> Bool
-prop_tetrahedron8_volumes_positive cube =
-    volume (tetrahedron8 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron9_volumes_positive :: Cube -> Bool
-prop_tetrahedron9_volumes_positive cube =
-    volume (tetrahedron9 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron10_volumes_positive :: Cube -> Bool
-prop_tetrahedron10_volumes_positive cube =
-    volume (tetrahedron10 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron11_volumes_positive :: Cube -> Bool
-prop_tetrahedron11_volumes_positive cube =
-    volume (tetrahedron11 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron12_volumes_positive :: Cube -> Bool
-prop_tetrahedron12_volumes_positive cube =
-    volume (tetrahedron12 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron13_volumes_positive :: Cube -> Bool
-prop_tetrahedron13_volumes_positive cube =
-    volume (tetrahedron13 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron14_volumes_positive :: Cube -> Bool
-prop_tetrahedron14_volumes_positive cube =
-    volume (tetrahedron14 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron15_volumes_positive :: Cube -> Bool
-prop_tetrahedron15_volumes_positive cube =
-    volume (tetrahedron15 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron16_volumes_positive :: Cube -> Bool
-prop_tetrahedron16_volumes_positive cube =
-    volume (tetrahedron16 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron17_volumes_positive :: Cube -> Bool
-prop_tetrahedron17_volumes_positive cube =
-    volume (tetrahedron17 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron18_volumes_positive :: Cube -> Bool
-prop_tetrahedron18_volumes_positive cube =
-    volume (tetrahedron18 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron19_volumes_positive :: Cube -> Bool
-prop_tetrahedron19_volumes_positive cube =
-    volume (tetrahedron19 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron20_volumes_positive :: Cube -> Bool
-prop_tetrahedron20_volumes_positive cube =
-    volume (tetrahedron20 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron21_volumes_positive :: Cube -> Bool
-prop_tetrahedron21_volumes_positive cube =
-    volume (tetrahedron21 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron22_volumes_positive :: Cube -> Bool
-prop_tetrahedron22_volumes_positive cube =
-    volume (tetrahedron22 cube) > 0
-
--- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which tetrahedrons's vertices are disoriented.
-prop_tetrahedron23_volumes_positive :: Cube -> Bool
-prop_tetrahedron23_volumes_positive cube =
-    volume (tetrahedron23 cube) > 0
-
-
 -- | Given in Sorokina and Zeilfelder, p. 79, (2.6). Note that the
 --   third and fourth indices of c-t1 have been switched. This is
 --   because we store the triangles oriented such that their volume is
@@ -524,38 +398,28 @@ prop_c_tilde_2100_rotation_correct cube =
               (1/192)*(FD + RD + LD + BD)
 
 
--- | We know what (c t6 2 1 0 0) should be from Sorokina and Zeilfelder, p. 87.
---   This test checks the actual value based on the FunctionValues of the cube.
+-- | We know what (c t6 2 1 0 0) should be from Sorokina and
+--   Zeilfelder, p. 87.  This test checks the actual value based on
+--   the FunctionValues of the cube.
+--
+--   If 'prop_c_tilde_2100_rotation_correct' passes, then this test is
+--   even meaningful!
 prop_c_tilde_2100_correct :: Cube -> Bool
 prop_c_tilde_2100_correct cube =
-    c t6 2 1 0 0 == (3/8)*int
-                    + (1/12)*(f + r + l + b)
-                    + (1/64)*(ft + rt + lt + bt)
-                    + (7/48)*t + (1/48)*d + (1/96)*(fr + fl + br + bl)
-                    + (1/192)*(fd + rd + ld + bd)
+    c t6 2 1 0 0 == expected
     where
       t0 = tetrahedron0 cube
       t6 = tetrahedron6 cube
       fvs = Tetrahedron.fv t0
-      int = interior fvs
-      f = front fvs
-      r = right fvs
-      l = left fvs
-      b = back fvs
-      ft = front_top fvs
-      rt = right_top fvs
-      lt = left_top fvs
-      bt = back_top fvs
-      t = top fvs
-      d = down fvs
-      fr = front_right fvs
-      fl = front_left fvs
-      br = back_right fvs
-      bl = back_left fvs
-      fd = front_down fvs
-      rd = right_down fvs
-      ld = left_down fvs
-      bd = back_down fvs
+      expected = eval fvs $
+                  (3/8)*I +
+                  (1/12)*(F + R + L + B) +
+                  (1/64)*(FT + RT + LT + BT) +
+                  (7/48)*T +
+                  (1/48)*D +
+                  (1/96)*(FR + FL + BR + BL) +
+                  (1/192)*(FD + RD + LD + BD)
+
 
 -- Tests to check that the correct edges are incidental.
 prop_t0_shares_edge_with_t1 :: Cube -> Bool