module Main where import Control.Applicative import Data.Bits import Data.List (nub, sort, group) import Data.Word (Word) import Test.Tasty import Test.Tasty.TH --import Data.PrimitiveArray.Index.IOC --import Data.PrimitiveArray.Index.Point --import Data.PrimitiveArray.Index.Set --import Data.PrimitiveArray.Index.Class import QuickCheck import SmallCheck -- * Sets -- TODO what exactly does the mask fix? Only bits already @1@, or every bit -- as it is? The mask should actually freeze-fix those bits, where we are -- set to @1@! --prop_Fixed_BitSet_setSucc (u :: Word, Fixed m s :: Fixed (BitSet I)) = traceShow (tgo, tsu) $ tgo == tsu -- where tgo = go s -- tsu = (getFixed <$> setSucc (Fixed 0 0) (Fixed 0 h) (Fixed m s)) -- fb1 = m .&. s -- fixed bits to 1 -- fb0 = m .&. complement s -- fixed bits to 0 -- h = bit (fromIntegral $ u `mod` 8) - 1 -- go x -- continue creating successors, until the mask criterion is met (again). -- | Nothing <- ssx = Nothing -- | Just x' <- ssx -- , fb0 == m .&. complement x' -- , fb1 == m .&. x' = traceShow ('j',fb0,fb1,m,x,x') $ Just x' -- | Just x' <- ssx = traceShow ('g',fb0,fb1,m,x,x') $ go x' -- where ssx = setSucc 0 h x main :: IO () main = do defaultMain $ testGroup "" [ quickcheck_tests -- , smallcheck_tests ]