From 935d8dfb409d7317e833cd5f1e3f80312b9c3fb4 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 6 May 2011 18:37:47 -0400 Subject: [PATCH] Re-enable the prop_all_volumes_positive check and add some new ones. --- src/Tests/Cube.hs | 50 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/src/Tests/Cube.hs b/src/Tests/Cube.hs index a832f5a..3cfefd4 100644 --- a/src/Tests/Cube.hs +++ b/src/Tests/Cube.hs @@ -3,9 +3,10 @@ where import Test.QuickCheck -import Cube (Cube(Cube)) +import Cube import FunctionValues (FunctionValues(FunctionValues)) import Tests.FunctionValues +import Tetrahedron (v0, volume) instance Arbitrary Cube where arbitrary = do @@ -25,11 +26,42 @@ 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 c = --- (delta > 0) ==> (null nonpositive_volumes) --- where --- delta = h (grid c) --- ts = tetrahedrons c --- volumes = map volume ts --- nonpositive_volumes = filter (<= 0) volumes +prop_all_volumes_positive :: Cube -> Property +prop_all_volumes_positive c = + (delta > 0) ==> (null nonpositive_volumes) + where + delta = h c + ts = tetrahedrons c + volumes = map volume ts + nonpositive_volumes = filter (<= 0) volumes + +-- | 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) + where + t0 = head (tetrahedrons c) -- Doesn't matter which two we choose. + t1 = head $ tail (tetrahedrons c) + + +-- | 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 + + +-- | 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 -- 2.43.2