4 import Control.Monad (liftM, liftM2)
5 import Prelude hiding (LT)
12 instance Arbitrary Cardinal where
13 arbitrary = oneof [f,b,l,r,d,t,fl,fr,fd,ft,bl,br,bd,bt,ld,lt,
14 rd,rt,fld,flt,frd,frt,bld,blt,brd,brt,i,
15 scalar,csum,cdiff,cprod,cquot]
44 scalar = liftM Scalar arbitrary
45 csum = liftM2 Sum arbitrary arbitrary
46 cdiff = liftM2 Difference arbitrary arbitrary
47 cprod = liftM2 Product arbitrary arbitrary
48 cquot = liftM2 Quotient arbitrary arbitrary
51 prop_ccwx_rotation_changes_direction :: Cardinal -> Property
52 prop_ccwx_rotation_changes_direction c =
53 -- The front and back faces are unchanged by x-rotation.
54 c `elem` [L, R, D, T, FL, FR, FD, FT, BL, BR, BD, BT, LD, LT,
55 RD, RT, FLD, FLT, FRD, FRT, BLD, BLT, BRD, BRT]
58 prop_cwx_rotation_changes_direction :: Cardinal -> Property
59 prop_cwx_rotation_changes_direction c =
60 -- The front and back faces are unchanged by x-rotation.
61 c `elem` [L, R, D, T, FL, FR, FD, FT, BL, BR, BD, BT, LD, LT,
62 RD, RT, FLD, FLT, FRD, FRT, BLD, BLT, BRD, BRT]