]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Tests/Cube.hs
Add tests for some functions used in the new 'find_containing_tetrahedron'.
[spline3.git] / src / Tests / Cube.hs
index 6d0f864439fca067fd9bf90555c048ebd97b8d14..0a1cc504179e9e0c7a79dae01c8ced961ac8b434 100644 (file)
@@ -7,240 +7,52 @@ import Cardinal
 import Comparisons
 import Cube hiding (i, j, k)
 import FunctionValues
 import Comparisons
 import Cube hiding (i, j, k)
 import FunctionValues
-import Misc (all_equal)
+import Misc (all_equal, disjoint)
 import Tests.FunctionValues ()
 import Tetrahedron (b0, b1, b2, b3, c, fv,
                     v0, v1, v2, v3, volume)
 
 
 import Tests.FunctionValues ()
 import Tetrahedron (b0, b1, b2, b3, c, fv,
                     v0, v1, v2, v3, volume)
 
 
-
 -- Quickcheck tests.
 
 -- Quickcheck tests.
 
--- | Since the grid size is necessarily positive, all tetrahedrons
+-- | 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.
 prop_all_volumes_positive :: Cube -> Bool
 prop_all_volumes_positive cube =
     null nonpositive_volumes
     where
 --   (which comprise cubes of positive volume) must have positive volume
 --   as well.
 prop_all_volumes_positive :: Cube -> Bool
 prop_all_volumes_positive cube =
     null nonpositive_volumes
     where
-      ts = tetrahedrons cube
+      ts = tetrahedra cube
       volumes = map volume ts
       nonpositive_volumes = filter (<= 0) volumes
 
 -- | In fact, since all of the tetrahedra are identical, we should
 --   already know their volumes. There's 24 tetrahedra to a cube, so
 --   we'd expect the volume of each one to be (1/24)*h^3.
       volumes = map volume ts
       nonpositive_volumes = filter (<= 0) volumes
 
 -- | In fact, since all of the tetrahedra are identical, we should
 --   already know their volumes. There's 24 tetrahedra to a cube, so
 --   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron0_volumes_exact :: Cube -> Bool
-prop_tetrahedron0_volumes_exact cube =
-    volume (tetrahedron0 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron1_volumes_exact :: Cube -> Bool
-prop_tetrahedron1_volumes_exact cube =
-    volume (tetrahedron1 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron2_volumes_exact :: Cube -> Bool
-prop_tetrahedron2_volumes_exact cube =
-    volume (tetrahedron2 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron3_volumes_exact :: Cube -> Bool
-prop_tetrahedron3_volumes_exact cube =
-    volume (tetrahedron3 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron4_volumes_exact :: Cube -> Bool
-prop_tetrahedron4_volumes_exact cube =
-    volume (tetrahedron4 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron5_volumes_exact :: Cube -> Bool
-prop_tetrahedron5_volumes_exact cube =
-    volume (tetrahedron5 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron6_volumes_exact :: Cube -> Bool
-prop_tetrahedron6_volumes_exact cube =
-    volume (tetrahedron6 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron7_volumes_exact :: Cube -> Bool
-prop_tetrahedron7_volumes_exact cube =
-    volume (tetrahedron7 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron8_volumes_exact :: Cube -> Bool
-prop_tetrahedron8_volumes_exact cube =
-    volume (tetrahedron8 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron9_volumes_exact :: Cube -> Bool
-prop_tetrahedron9_volumes_exact cube =
-    volume (tetrahedron9 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron10_volumes_exact :: Cube -> Bool
-prop_tetrahedron10_volumes_exact cube =
-    volume (tetrahedron10 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron11_volumes_exact :: Cube -> Bool
-prop_tetrahedron11_volumes_exact cube =
-    volume (tetrahedron11 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron12_volumes_exact :: Cube -> Bool
-prop_tetrahedron12_volumes_exact cube =
-    volume (tetrahedron12 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron13_volumes_exact :: Cube -> Bool
-prop_tetrahedron13_volumes_exact cube =
-    volume (tetrahedron13 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron14_volumes_exact :: Cube -> Bool
-prop_tetrahedron14_volumes_exact cube =
-    volume (tetrahedron14 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron15_volumes_exact :: Cube -> Bool
-prop_tetrahedron15_volumes_exact cube =
-    volume (tetrahedron15 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron16_volumes_exact :: Cube -> Bool
-prop_tetrahedron16_volumes_exact cube =
-    volume (tetrahedron16 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron17_volumes_exact :: Cube -> Bool
-prop_tetrahedron17_volumes_exact cube =
-    volume (tetrahedron17 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron18_volumes_exact :: Cube -> Bool
-prop_tetrahedron18_volumes_exact cube =
-    volume (tetrahedron18 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron19_volumes_exact :: Cube -> Bool
-prop_tetrahedron19_volumes_exact cube =
-    volume (tetrahedron19 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron20_volumes_exact :: Cube -> Bool
-prop_tetrahedron20_volumes_exact cube =
-    volume (tetrahedron20 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron21_volumes_exact :: Cube -> Bool
-prop_tetrahedron21_volumes_exact cube =
-    volume (tetrahedron21 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron22_volumes_exact :: Cube -> Bool
-prop_tetrahedron22_volumes_exact cube =
-    volume (tetrahedron22 cube) ~~= (1/24)*(delta^(3::Int))
-    where
-      delta = h cube
-
--- | In fact, since all of the tetrahedra are identical, we should
---   already know their volumes. There's 24 tetrahedra to a cube, so
---   we'd expect the volume of each one to be (1/24)*h^3.
-prop_tetrahedron23_volumes_exact :: Cube -> Bool
-prop_tetrahedron23_volumes_exact cube =
-    volume (tetrahedron23 cube) ~~= (1/24)*(delta^(3::Int))
+prop_all_volumes_exact :: Cube -> Bool
+prop_all_volumes_exact cube =
+    and [volume t ~~= (1/24)*(delta^(3::Int)) | t <- tetrahedra cube]
     where
       delta = h cube
 
     where
       delta = h cube
 
@@ -248,153 +60,8 @@ prop_tetrahedron23_volumes_exact cube =
 prop_v0_all_equal :: Cube -> Bool
 prop_v0_all_equal cube = (v0 t0) == (v0 t1)
     where
 prop_v0_all_equal :: Cube -> Bool
 prop_v0_all_equal cube = (v0 t0) == (v0 t1)
     where
-      t0 = head (tetrahedrons cube) -- Doesn't matter which two we choose.
-      t1 = head $ tail (tetrahedrons 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
+      t0 = head (tetrahedra cube) -- Doesn't matter which two we choose.
+      t1 = head $ tail (tetrahedra cube)
 
 
 -- | Given in Sorokina and Zeilfelder, p. 79, (2.6). Note that the
 
 
 -- | Given in Sorokina and Zeilfelder, p. 79, (2.6). Note that the