import Char
import List
import Test.QuickCheck
import Text.Printf
import qualified Data.Heap.Binary as B
import qualified Data.Heap.Binomial as N
import qualified Data.Heap.Skew as S
import qualified Data.Tree.AVL as A
import qualified Data.Tree.Splay as P
binary_fromListToList s = (B.toList . B.fromList) s == sort s
where _ = s :: [Int]
binomial_fromListToList s = (N.toList . N.fromList) s == sort s
where _ = s :: [Int]
skew_fromListToList s = (S.toList . S.fromList) s == sort s
where _ = s :: [Int]
avl_fromListToList s = (map fst . A.toList . A.fromList) s == (map fst . sort) s
where _ = s :: [(Int,Int)]
splay_fromListToList s = (map fst . P.toList . P.fromList) s == (map fst . sort) s
where _ = s :: [(Int,Int)]
tests = [
("Heap.Binary: toList.fromList/sort", test binary_fromListToList),
("Heap.Binomial: toList.fromList/sort", test binomial_fromListToList),
("Heap.Skew: toList.fromList/sort", test skew_fromListToList),
("Tree.AVL: toList.fromList/sort", test avl_fromListToList),
("Tree.Splay: toList.fromList/sort", test splay_fromListToList)]
main = mapM_ (\(s,a) -> printf "%-25s: " s >> a) tests
instance Arbitrary Char where
arbitrary = choose ('\0', '\128')
coarbitrary c = variant (ord c `rem` 4)