{-# LANGUAGE TemplateHaskell #-} import Data.List hiding (insert) import Data.MedianStream import Test.QuickCheck import Utils prop_medianStreamOnInts :: [Int] -> Bool prop_medianStreamOnInts xs = medianOf xs == median (foldr insert empty xs) prop_medianStreamOnDoubles :: [Double] -> Bool prop_medianStreamOnDoubles xs = medianOf xs == median (foldr insert empty xs) prop_medianStreamOnIntsV2 :: [Int] -> Bool prop_medianStreamOnIntsV2 xs = medianOf xs == median (foldr (<+) empty xs) prop_medianStreamOnDoublesV2 :: [Double] -> Bool prop_medianStreamOnDoublesV2 xs = medianOf xs == median (foldr (<+) empty xs) prop_medianStreamOnIntsV3 :: [Int] -> Bool prop_medianStreamOnIntsV3 xs = medianOf xs == median (foldl' (+>) empty xs) prop_medianStreamOnDoublesV3 :: [Double] -> Bool prop_medianStreamOnDoublesV3 xs = medianOf xs == median (foldl' (+>) empty xs) prop_medianStreamOnIntsFromList :: [Int] -> Bool prop_medianStreamOnIntsFromList xs = medianOf xs == median (fromList xs) prop_medianStreamOnDoublesFromList :: [Double] -> Bool prop_medianStreamOnDoublesFromList xs = medianOf xs == median (fromList xs) prop_medianStreamOnIntsInsertList :: [Int] -> Bool prop_medianStreamOnIntsInsertList xs = let (fh, sh) = halves xs ms = fromList fh in medianOf fh == median ms && medianOf (fh ++ sh) == median (insertList ms sh) prop_medianStreamOnDoublesInsertList :: [Double] -> Bool prop_medianStreamOnDoublesInsertList xs = let (fh, sh) = halves xs ms = fromList fh in medianOf fh == median ms && medianOf (fh ++ sh) == median (insertList ms sh) halves :: [a] -> ([a], [a]) halves ls = splitAt mid ls where mid = length ls `div` 2 return [] runTests = $quickCheckAll main = runTests