import Test.QuickCheck
+import Comparisons
import Cube
import FunctionValues (FunctionValues(FunctionValues))
import Tests.FunctionValues
-- | 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)
-- | 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