import Control.Monad (liftM, liftM2)
import Prelude hiding (LT)
+import Test.HUnit
import Test.QuickCheck
import Cardinal
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,
-- 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)
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])
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
-- 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... "