packages feed

median-stream-0.3.0.0: test/Spec.hs

{-# 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