]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Tests/Cube.hs
Rework a bunch of Cube stuff and re-enable now-passing tests.
[spline3.git] / src / Tests / Cube.hs
index 3cfefd4abe832747d430f9b70d57c75c7602b5c4..b78888434d7cfc03a2956c2e30b8b06509dc853d 100644 (file)
@@ -3,6 +3,7 @@ where
 
 import Test.QuickCheck
 
+import Comparisons
 import Cube
 import FunctionValues (FunctionValues(FunctionValues))
 import Tests.FunctionValues
@@ -26,15 +27,24 @@ instance Arbitrary Cube where
 -- | Since the grid size is necessarily positive, all tetrahedrons
 --   (which comprise cubes of positive volume) must have positive volume
 --   as well.
-prop_all_volumes_positive :: Cube -> Property
+prop_all_volumes_positive :: Cube -> Bool
 prop_all_volumes_positive c =
-    (delta > 0) ==> (null nonpositive_volumes)
+    null nonpositive_volumes
     where
-      delta = h c
       ts = tetrahedrons c
       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_all_volumes_exact :: Cube -> Bool
+prop_all_volumes_exact c =
+    volume t ~= (1/24)*(delta^(3::Int))
+    where
+      t = head $ tetrahedrons c
+      delta = h c
+
 -- | All tetrahedron should have their v0 located at the center of the cube.
 prop_v0_all_equal :: Cube -> Bool
 prop_v0_all_equal c = (v0 t0) == (v0 t1)
@@ -44,24 +54,49 @@ prop_v0_all_equal c = (v0 t0) == (v0 t1)
 
 
 -- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which face's vertices are disoriented.
-prop_front_face_volumes_positive :: Cube -> Property
-prop_front_face_volumes_positive c =
-    (delta > 0) ==> (null nonpositive_volumes)
-    where
-      delta = h c
-      ts = [tetrahedron0 c, tetrahedron1 c, tetrahedron2 c, tetrahedron3 c]
-      volumes = map volume ts
-      nonpositive_volumes = filter (<= 0) volumes
+--   but will let me know which tetrahedrons's vertices are disoriented.
+prop_tetrahedron0_volumes_positive :: Cube -> Bool
+prop_tetrahedron0_volumes_positive c =
+    volume (tetrahedron0 c) > 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 c =
+    volume (tetrahedron1 c) > 0
 
 -- | This pretty much repeats the prop_all_volumes_positive property,
---   but will let me know which face's vertices are disoriented.
-prop_top_face_volumes_positive :: Cube -> Property
-prop_top_face_volumes_positive c =
-    (delta > 0) ==> (null nonpositive_volumes)
-    where
-      delta = h c
-      ts = [tetrahedron4 c, tetrahedron5 c, tetrahedron6 c, tetrahedron7 c]
-      volumes = map volume ts
-      nonpositive_volumes = filter (<= 0) volumes
+--   but will let me know which tetrahedrons's vertices are disoriented.
+prop_tetrahedron2_volumes_positive :: Cube -> Bool
+prop_tetrahedron2_volumes_positive c =
+    volume (tetrahedron2 c) > 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 c =
+    volume (tetrahedron3 c) > 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 c =
+    volume (tetrahedron4 c) > 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 c =
+    volume (tetrahedron5 c) > 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 c =
+    volume (tetrahedron6 c) > 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 c =
+    volume (tetrahedron7 c) > 0