]> gitweb.michael.orlitzky.com - spline3.git/commitdiff
Add a Cardinal test, computed manually and from Sorokina and Zeilfelder, p. 87.
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 11 May 2011 21:49:35 +0000 (17:49 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 11 May 2011 21:49:35 +0000 (17:49 -0400)
src/Tests/Cardinal.hs
src/Tests/Cube.hs
test/TestSuite.hs

index 0d8d592e7d37a75c233547421c404fa03a53d380..450730da0b86eb849a8f8bc3110e9aee635516b0 100644 (file)
@@ -3,6 +3,7 @@ where
 
 import Control.Monad (liftM, liftM2)
 import Prelude hiding (LT)
+import Test.HUnit
 import Test.QuickCheck
 
 import Cardinal
@@ -48,6 +49,34 @@ instance Arbitrary Cardinal where
           cquot = liftM2 Quotient arbitrary arbitrary
 
 
+-- | We know what (c t6 2 1 0 0) should be from Sorokina and
+--   Zeilfelder, p. 87.  This test checks that the directions are
+--   rotated properly.  The order of the letters has to be just right
+--   since I haven't defined a proper Eq instance for Cardinals.
+test_c_tilde_2100_rotation_correct :: Test
+test_c_tilde_2100_rotation_correct =
+    TestCase $ assertEqual "auto-rotate equals manual rotate" ((ccwz . ccwz . cwy) expr1) expr2
+    where
+      expr1 =
+          (3/8)*I +
+          (1/12)*(T + R + L + D) +
+          (1/64)*(FT + FR + FL + FD) +
+          (7/48)*F +
+          (1/48)*B +
+          (1/96)*(RT + LD + LT + RD) +
+          (1/192)*(BT + BR + BL + BD)
+
+      expr2 =
+          (3/8)*I +
+          (1/12)*(F + L + R + B) +
+          (1/64)*(FT + LT + RT + BT) +
+          (7/48)*T +
+          (1/48)*D +
+          (1/96)*(FL + BR + FR + BL) +
+          (1/192)*(FD + LD + RD + BD)
+
+cardinal_tests = [test_c_tilde_2100_rotation_correct]
+
 -- | A list of all directions, sans the interior and composite types.
 all_directions :: [Cardinal]
 all_directions = [L, R, F, B, D, T, FL, FR, FD, FT,
index 58469779293c33577908dd66b3638d1ee8c5a45b..5a9ca19330465e1e6e9a7b56ab2dfc62405f7060 100644 (file)
@@ -537,7 +537,9 @@ prop_c1011_identity cube =
 --         t1 = tetrahedron1 cube
 
 
+
 -- | We know what (c t6 2 1 0 0) should be from Sorokina and Zeilfelder, p. 87.
+--   This test checks the actual value based on the FunctionValues of the cube.
 prop_c_tilde_2100_correct :: Cube -> Bool
 prop_c_tilde_2100_correct cube =
     c t6 2 1 0 0 == (3/8)*int + (1/12)*(f + r + l + b) + (1/64)*(ft + rt + lt + bt)
index 951899f251548450c7739cf3b05eb71df6af344d..ac1045bc2d1eab200197ef8b833c1d51380fb0ef 100644 (file)
@@ -9,7 +9,8 @@ import Tests.Misc
 import Tests.Tetrahedron as TT
 
 -- The list of HUnit tests.
-test_suite = TestList (concat [function_values_tests,
+test_suite = TestList (concat [cardinal_tests,
+                               function_values_tests,
                                grid_tests,
                                misc_tests,
                                tetrahedron_tests])
@@ -197,7 +198,7 @@ main = do
   putStr "prop_c2100_identity2... "
   quickCheckWith qc_args TC.prop_c2100_identity2
 
-  putStrLn "\np. 79, (2.8)\n"  
+  putStrLn "\np. 79, (2.8)\n"
 
   putStr "prop_c3000_identity... "
   quickCheckWith qc_args TC.prop_c3000_identity
@@ -237,6 +238,10 @@ main = do
   -- putStr "prop_c0300_identity3... "
   -- quickCheckWith qc_args TF.prop_c0300_identity3
 
+  putStrLn "prop_c_tilde_2100_correct... "
+  quickCheckWith qc_args prop_c_tilde_2100_correct
+
+
   putStrLn "\nEdge Incidence Tests\n"
 
   putStr "prop_t0_shares_edge_with_t6... "