]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Cube.hs
Add bang patterns to the FunctionValues module (Ben Lippmeier).
[spline3.git] / src / Cube.hs
index 3a997a4ab25e917eccd7e9e18587589b7bc98a32..bec49b4086a09947697ec183ff97459e76f43122 100644 (file)
@@ -25,18 +25,18 @@ import Test.QuickCheck (Arbitrary(..), Gen, Positive(..), choose)
 import Cardinal
 import Comparisons ((~=), (~~=))
 import qualified Face (Face(Face, v0, v1, v2, v3))
-import FunctionValues
+import FunctionValues (FunctionValues, eval, rotate)
 import Misc (all_equal, disjoint)
 import Point
 import Tetrahedron (Tetrahedron(..), c, volume)
 import ThreeDimensional
 
-data Cube = Cube { h :: Double,
-                   i :: Int,
-                   j :: Int,
-                   k :: Int,
-                   fv :: FunctionValues,
-                   tetrahedra_volume :: Double }
+data Cube = Cube { h  :: !Double,
+                   i  :: !Int,
+                   j  :: !Int,
+                   k  :: !Int,
+                   fv :: !FunctionValues,
+                   tetrahedra_volume :: !Double }
             deriving (Eq)
 
 
@@ -49,9 +49,13 @@ instance Arbitrary Cube where
       fv' <- arbitrary :: Gen FunctionValues
       (Positive tet_vol) <- arbitrary :: Gen (Positive Double)
       return (Cube h' i' j' k' fv' tet_vol)
-        where
-          coordmin = -268435456 -- -(2^29 / 2)
-          coordmax = 268435456  -- +(2^29 / 2)
+      where
+        -- The idea here is that, when cubed in the volume formula,
+        -- these numbers don't overflow 64 bits. This number is not
+        -- magic in any other sense than that it does not cause test
+        -- failures, while 2^23 does.
+        coordmax = 4194304 -- 2^22
+        coordmin = -coordmax
 
 
 instance Show Cube where
@@ -64,8 +68,7 @@ instance Show Cube where
         " ymin: " ++ (show (ymin cube)) ++ "\n" ++
         " ymax: " ++ (show (ymax cube)) ++ "\n" ++
         " zmin: " ++ (show (zmin cube)) ++ "\n" ++
-        " zmax: " ++ (show (zmax cube)) ++ "\n" ++
-        " fv: " ++ (show (Cube.fv cube)) ++ "\n"
+        " zmax: " ++ (show (zmax cube)) ++ "\n"
         where
           subscript =
               (show (i cube)) ++ "," ++ (show (j cube)) ++ "," ++ (show (k cube))
@@ -665,15 +668,15 @@ prop_opposite_octant_tetrahedra_disjoint6 cube =
 
 
 -- | Since the grid size is necessarily positive, all tetrahedra
---   (which comprise cubes of positive volume) must have positive volume
---   as well.
+--   (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
+    all (>= 0) volumes
     where
       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