module HCube.Test (runTests)
where
import Data.Int
import Test.QuickCheck.Test(verboseCheckWith,quickCheck,quickCheckWith, Args(..))
import Test.QuickCheck.Arbitrary(Arbitrary, arbitrary, shrink, shrinkIntegral)
import Test.QuickCheck.Gen(Gen,sized, choose)
import HCube.Data (Vec, Numb)
import HCube.Lib (posToId, getPos, initCube)
import HCube.OrientGroup (Orient (..), rawToOrientNumber, rawOrientNum, orientNumberToRaw)
import HCube.Utility (mapVec, modNot, gateMinus, modMinus)
idProperty sz = f where
f = [posToId sz . getPos sz $ a | a <- [1..g]] == [1..g]
g = sz*sz*sz
orientId = [f . g $ a | a <- [1..24]] == [1..24] where
f = rawToOrientNumber . rawOrientNum . Orient
g = h . orientNumberToRaw where
h cd = [j . k $ (i 2, i 3, i 5), k (i 7, i 11,i 13)] where
i = modNot cd
j = gateMinus cd
k = modMinus cd 17
orientProperty :: Numb -> Bool
orientProperty _ = orientId
args = Args {
replay = Nothing,
maxDiscardRatio=5,
maxSuccess = 5,
maxSize = 10,
chatty = True
}
args2 = args {maxSuccess = 1,
maxDiscardRatio = 1}
runTests :: IO ()
runTests = f where
f = h orientProperty
>> g idProperty
g = quickCheckWith args
h = quickCheckWith args2