module Tests.Cardinal where import Control.Monad (liftM, liftM2) import Prelude hiding (LT) import Test.QuickCheck 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 prop_ccwx_rotation_changes_direction :: Cardinal -> Property prop_ccwx_rotation_changes_direction c = -- The front and back faces are unchanged by x-rotation. c `elem` [L, R, D, T, FL, FR, FD, FT, BL, BR, BD, BT, LD, LT, RD, RT, FLD, FLT, FRD, FRT, BLD, BLT, BRD, BRT] ==> ccwx c /= c prop_cwx_rotation_changes_direction :: Cardinal -> Property prop_cwx_rotation_changes_direction c = -- The front and back faces are unchanged by x-rotation. c `elem` [L, R, D, T, FL, FR, FD, FT, BL, BR, BD, BT, LD, LT, RD, RT, FLD, FLT, FRD, FRT, BLD, BLT, BRD, BRT] ==> cwx c /= c