packages feed

bit-vector-0.1.0: test/Data/Vector/Bit/Tests.hs

import Data.Vector.Bit
import qualified Data.Vector.Unboxed as V
import Test.QuickCheck
import Test.Framework
import Test.Framework.Providers.QuickCheck2

prop_packUnpack :: Int -> Bool
prop_packUnpack x | x >= 0 = pack (unpack x) == x
                  | otherwise = True

prop_unpackPack :: [Bool] -> Bool
prop_unpackPack xs 
    | length xs < 64 && (pack (V.fromList xs') :: Int) >= 0 
    = unpack (pack (V.fromList xs') :: Int) == V.fromList xs'
    | otherwise = True
  where xs' = reverse . dropWhile not . reverse $ xs

prop_addCorrect :: Int -> Int -> Bool
prop_addCorrect x y = x + y == pack (unpack x + unpack y)

prop_multCorrect :: Int -> Int -> Bool
prop_multCorrect x y = x * y == pack (unpack x * unpack y)

prop_subCorrect :: Int -> Int -> Bool
prop_subCorrect x y | x >= y = x - y == pack (unpack x - unpack y)
                    | otherwise = True

prop_absSignum :: Int -> Bool
prop_absSignum x | x >= 0 = abs (unpack x) * signum (unpack x) == unpack x
                 | otherwise = True

main = defaultMain tests

tests = [ testGroup "Pack/Unpack" [
                          testProperty "pack . unpack" prop_packUnpack
                        , testProperty "unpack . pack" prop_unpackPack
                        ]
        , testGroup "Num instance" [
                          testProperty "+" prop_addCorrect
                        , testProperty "*" prop_multCorrect
                        , testProperty "-" prop_subCorrect
                        , testProperty "abs / signum" prop_absSignum
                        ]
        ]