]> gitweb.michael.orlitzky.com - spline3.git/commitdiff
Add an Arbitrary instance for Cardinal two Cardinal tests.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 6 May 2011 20:38:39 +0000 (16:38 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 6 May 2011 20:38:39 +0000 (16:38 -0400)
src/Tests/Cardinal.hs [new file with mode: 0644]

diff --git a/src/Tests/Cardinal.hs b/src/Tests/Cardinal.hs
new file mode 100644 (file)
index 0000000..cf1be4e
--- /dev/null
@@ -0,0 +1,63 @@
+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