packages feed

PrimitiveArray-0.10.1.1: tests/properties.hs

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 qualified Test.QuickCheck as QC

import Data.PrimitiveArray.Index.IOC
import Data.PrimitiveArray.Index.Point
--import Data.PrimitiveArray.Index.Set
import Data.PrimitiveArray.Index.Class

import QuickCheck
import SmallCheck



-- * Points

-- | @linearIndex <-> fromLinearIndex@

prop_FromLinear_ZP ( x :: PointL I, a')
  | ix == frm = True
  | otherwise = error $ show (x,a',lt, ix, lin, frm)
  where ltx = LtPointL $ QC.getNonNegative a' + fromPointL x
        lt  = ZZ:..ltx
        ix  = Z:.x
        lin = linearIndex lt ix
        frm = fromLinearIndex lt lin

prop_FromLinear_ZPP ( x :: PointL I, y :: PointL I, a', b')
  | ix == frm = True
  | otherwise = error $ show (x,y,a',b',lt, ix, lin, frm)
  where ltx = LtPointL $ QC.getNonNegative a' + fromPointL x
        lty = LtPointL $ QC.getNonNegative b' + fromPointL y
        lt  = ZZ:..ltx:..lty
        ix  = Z:.x:.y
        lin = linearIndex lt ix
        frm = fromLinearIndex lt lin

-- * 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
    ]