module Tests.Cardinal
where
-import Control.Monad (liftM, liftM2)
import Prelude hiding (LT)
import Test.HUnit
-import Test.QuickCheck
+import Test.QuickCheck (Property, (==>))
import Cardinal
-
-
-instance Arbitrary Cardinal where
- arbitrary = oneof [f,b,l,r,d,t,fl,fr,fd,ft,bl,br,bd,bt,ld,lt,
- rd,rt,fld,flt,frd,frt,bld,blt,brd,brt,i,
- scalar,csum,cdiff,cprod,cquot]
- where
- f = return F
- b = return B
- l = return L
- r = return R
- d = return D
- t = return T
- fl = return FL
- fr = return FR
- fd = return FD
- ft = return FT
- bl = return BL
- br = return BR
- bd = return BD
- bt = return BT
- ld = return LD
- lt = return LT
- rd = return RD
- rt = return RT
- fld = return FLD
- flt = return FLT
- frd = return FRD
- frt = return FRT
- bld = return BLD
- blt = return BLT
- brd = return BRD
- brt = return BRT
- i = return I
- scalar = liftM Scalar arbitrary
- csum = liftM2 Sum arbitrary arbitrary
- cdiff = liftM2 Difference arbitrary arbitrary
- cprod = liftM2 Product arbitrary arbitrary
- 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 :: Assertion
test_c_tilde_2100_rotation_correct =
- TestCase $ assertEqual "auto-rotate equals manual rotate" ((ccwz . ccwz . cwy) expr1) expr2
+ assertEqual "auto-rotate equals manual rotate" ((ccwz . ccwz . cwy) expr1) expr2
where
expr1 =
(3/8)*I +
(1/96)*(FL + BR + FR + BL) +
(1/192)*(FD + LD + RD + BD)
-cardinal_tests :: [Test]
-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,