]> gitweb.michael.orlitzky.com - spline3.git/blob - src/Tests/Cardinal.hs
cf1be4effc8fabb2a613b3f177e462050e133526
[spline3.git] / src / Tests / Cardinal.hs
1 module Tests.Cardinal
2 where
3
4 import Control.Monad (liftM, liftM2)
5 import Prelude hiding (LT)
6 import Test.QuickCheck
7
8 import Cardinal
9
10
11
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]
16 where
17 f = return F
18 b = return B
19 l = return L
20 r = return R
21 d = return D
22 t = return T
23 fl = return FL
24 fr = return FR
25 fd = return FD
26 ft = return FT
27 bl = return BL
28 br = return BR
29 bd = return BD
30 bt = return BT
31 ld = return LD
32 lt = return LT
33 rd = return RD
34 rt = return RT
35 fld = return FLD
36 flt = return FLT
37 frd = return FRD
38 frt = return FRT
39 bld = return BLD
40 blt = return BLT
41 brd = return BRD
42 brt = return BRT
43 i = return I
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
49
50
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]
56 ==> ccwx c /= c
57
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]
63 ==> cwx c /= c