heap-1.0.0: Test/Heap/Item.hs
{-# LANGUAGE FlexibleContexts #-}
module Test.Heap.Item
( runTests
) where
import Data.Heap.Item
import Test.Heap.Common
import Test.QuickCheck
runTests :: IO ()
runTests = do
qc "Eq for MinPolicy" (eqProperty
:: Prio MinPolicy Int -> Prio MinPolicy Int -> Prio MinPolicy Int -> Bool)
qc "Eq for MaxPolicy" (eqProperty
:: Prio MaxPolicy Int -> Prio MaxPolicy Int -> Prio MaxPolicy Int -> Bool)
qc "Eq for FstMinPolicy" (eqProperty
:: Prio FstMinPolicy (Int, Char) -> Prio FstMinPolicy (Int, Char)
-> Prio FstMinPolicy (Int, Char) -> Bool)
qc "Eq for FstMaxPolicy" (eqProperty
:: Prio FstMaxPolicy (Int, Char) -> Prio FstMaxPolicy (Int, Char)
-> Prio FstMaxPolicy (Int, Char) -> Bool)
qc "Ord for MinPolicy" (ordProperty
:: Prio MinPolicy Int -> Prio MinPolicy Int -> Prio MinPolicy Int -> Bool)
qc "Ord for MaxPolicy" (ordProperty
:: Prio MaxPolicy Int -> Prio MaxPolicy Int -> Prio MaxPolicy Int -> Bool)
qc "Ord for FstMinPolicy" (ordProperty
:: Prio FstMinPolicy (Int, Char) -> Prio FstMinPolicy (Int, Char)
-> Prio FstMinPolicy (Int, Char) -> Bool)
qc "Ord for FstMaxPolicy" (ordProperty
:: Prio FstMaxPolicy (Int, Char) -> Prio FstMaxPolicy (Int, Char)
-> Prio FstMaxPolicy (Int, Char) -> Bool)
qc "read/show for MinPolicy" (readShowProperty :: [Prio MinPolicy Int] -> Bool)
qc "read/show for MaxPolicy" (readShowProperty :: [Prio MaxPolicy Int] -> Bool)
qc "read/show for FstMinPolicy" (readShowProperty :: [Prio FstMinPolicy (Int, Char)] -> Bool)
qc "read/show for FstMaxPolicy" (readShowProperty :: [Prio FstMaxPolicy (Int, Char)] -> Bool)
qc "split/merge for MinPolicy" (splitMergeProperty
:: Prio MinPolicy Int -> Val MinPolicy Int -> Bool)
qc "split/merge for MaxPolicy" (splitMergeProperty
:: Prio MaxPolicy Int -> Val MaxPolicy Int -> Bool)
qc "split/merge for FstMinPolicy" (splitMergeProperty
:: Prio FstMinPolicy (Int, Char) -> Val FstMinPolicy (Int, Char) -> Bool)
qc "split/merge for FstMaxPolicy" (splitMergeProperty
:: Prio FstMaxPolicy (Int, Char) -> Val FstMaxPolicy (Int, Char) -> Bool)
qc "priority/value for MinPolicy" (priorityValueProperty succ
:: Prio MinPolicy Int -> Val MinPolicy Int -> Bool)
qc "priority/value for MaxPolicy" (priorityValueProperty succ
:: Prio MaxPolicy Int -> Val MaxPolicy Int -> Bool)
qc "priority/value for FstMinPolicy" (priorityValueProperty succ
:: Prio FstMinPolicy (Int, Char) -> Val FstMinPolicy (Int, Char) -> Bool)
qc "priority/value for FstMaxPolicy" (priorityValueProperty succ
:: Prio FstMaxPolicy (Int, Char) -> Val FstMaxPolicy (Int, Char) -> Bool)
qc "splitF for MinPolicy" (splitFProperty (\x -> 4 * x - 7)
:: Prio MinPolicy Int -> Val MinPolicy Int -> Bool)
qc "splitF for MaxPolicy" (splitFProperty (\x -> 4 * x - 7)
:: Prio MaxPolicy Int -> Val MaxPolicy Int -> Bool)
qc "splitF for FstMinPolicy" (splitFProperty (\(x, y) -> (pred x, succ y))
:: Prio FstMinPolicy (Int, Char) -> Val FstMinPolicy (Int, Char) -> Bool)
qc "splitF for FstMaxPolicy" (splitFProperty (\(x, y) -> (pred x, succ y))
:: Prio FstMaxPolicy (Int, Char) -> Val FstMaxPolicy (Int, Char) -> Bool)
instance (Arbitrary item, HeapItem pol item) => Arbitrary (Prio pol item) where
arbitrary = fmap (fst . split) arbitrary
splitMergeProperty :: (HeapItem pol item, Eq (Prio pol item), Eq (Val pol item))
=> Prio pol item -> Val pol item -> Bool
splitMergeProperty p v = (p, v) == split (merge (p, v))
priorityValueProperty :: (HeapItem pol item, Eq (Prio pol item))
=> (Val pol item -> Val pol item) -> Prio pol item -> Val pol item -> Bool
priorityValueProperty f p v = p == fst (split (merge (p, v)))
&& p == fst (split (merge (p, f v)))
splitFProperty :: (HeapItem pol item, Eq a)
=> (item -> a) -> Prio pol item -> Val pol item -> Bool
splitFProperty f p v = f (merge (p, v)) == splitF f (p, v)