packages feed

deque-0.2.6: test/Main.hs

module Main where

import Prelude
import Test.QuickCheck.Instances
import Test.Tasty
import Test.Tasty.Runners
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import qualified Test.QuickCheck as QuickCheck
import qualified Test.QuickCheck.Property as QuickCheck
import qualified Deque as Deque
import qualified Data.List as List


main =
  defaultMain $
  testGroup "List roundtrips" $ let
  testPredicateProperty name listOp dequeOp =
    testProperty name $ \ (list1 :: [Int], list2 :: [Int], threshold :: Int, direction :: Int) -> let
      compare = case mod direction 5 of
        0 -> (>)
        1 -> (>=)
        2 -> (==)
        3 -> (<=)
        4 -> (<)
      predicate = compare threshold
      in
        listOp predicate (list1 <> list2) ===
        toList (dequeOp predicate (Deque.Deque (reverse list2) list1))
    in [
        testPredicateProperty "takeWhile" List.takeWhile Deque.takeWhile
        ,
        testPredicateProperty "dropWhile" List.dropWhile Deque.dropWhile
      ]