packages feed

interval-1.20160821: Data/Interval/Test.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test where

import Data.Function (($), (.))
import qualified Data.List as List
import Data.Maybe (Maybe(..), fromJust)
import Data.Monoid ((<>))
import Data.Ord (Ordering(..))
import Prelude (Integer)
import System.IO (IO)
import Test.Tasty
import Test.Tasty.HUnit
import Text.Show (Show(..))

import qualified Data.Interval as Interval
import qualified Sieve.Test as Sieve

main :: IO ()
main =
	defaultMain $
	testGroup "Interval"
	 [ testGroup "position" $
		List.concatMap
		 (\(mi, mj, p) ->
			let i = fromJust mi in
			let j = fromJust mj in
			let (le, ge) =
				case p of
				 Interval.Equal -> (EQ, EQ)
				 _ -> (LT, GT) in
			[ testCase ((show . Interval.Pretty) i <> " " <> (show . Interval.Pretty) j) $
				Interval.position i j @?= (p, le)
			, testCase ((show . Interval.Pretty) j <> " " <> (show . Interval.Pretty) i) $
				Interval.position j i @?= (p, ge)
			]
		 )
		 [ ( (Interval.<..<) 0 (4::Integer)
			 , (Interval.<..<) 5 9
			 , Interval.Away )
		 , ( (Interval.<..<)  0 4
			 , (Interval.<=..<) 4 9
			 , Interval.Adjacent )
		 , ( (Interval.<..<) 0 5
			 , (Interval.<..<) 4 9
			 , Interval.Overlap )
		 , ( (Interval.<..<) 0 5
			 , (Interval.<..<) 0 9
			 , Interval.Prefix )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<) 1 8
			 , Interval.Include )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<) 5 9
			 , Interval.Suffixed )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<) 0 9
			 , Interval.Equal )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<=) 0 9
			 , Interval.Prefix )
		 , ( (Interval.<=..<) 0 9
			 , (Interval.<..<) 0 9
			 , Interval.Suffixed )
		 , ( (Interval.<=..<=) 0 9
			 , (Interval.<..<) 0 9
			 , Interval.Include )
		 ]
	 , testGroup "intersection" $
		List.concatMap
		 (\(mi, mj, e) ->
			let i = fromJust mi in
			let j = fromJust mj in
			[ testCase ((show . Interval.Pretty) i <> " " <> (show . Interval.Pretty) j) $
				Interval.intersection i j @?= e
			, testCase ((show . Interval.Pretty) j <> " " <> (show . Interval.Pretty) i) $
				Interval.intersection j i @?= e
			]
		 )
		 [ ( (Interval.<..<) 0 (4::Integer)
			 , (Interval.<..<) 5 9
			 , Nothing )
		 , ( (Interval.<..<=) 0 5
			 , (Interval.<=..<) 5 9
			 , (Interval.<=..<=) 5 5 )
		 , ( (Interval.<..<) 0 6
			 , (Interval.<..<) 4 9
			 , (Interval.<..<) 4 6 )
		 , ( (Interval.<..<=) 0 6
			 , (Interval.<=..<) 4 9
			 , (Interval.<=..<=) 4 6 )
		 , ( (Interval.<..<) 0 6
			 , (Interval.<=..<) 4 9
			 , (Interval.<=..<) 4 6 )
		 , ( (Interval.<..<=) 0 6
			 , (Interval.<..<) 4 9
			 , (Interval.<..<=) 4 6 )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<) 0 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<=..<) 0 9
			 , (Interval.<..<=) 0 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<..<=) 0 9
			 , (Interval.<=..<) 0 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<=..<=) 0 9
			 , (Interval.<=..<=) 0 9
			 , (Interval.<=..<=) 0 9 )
		 ]
	 , testGroup "union" $
		List.concatMap
		(\(mi, mj, e) ->
			let i = fromJust mi in
			let j = fromJust mj in
			[ testCase ((show . Interval.Pretty) i <> " " <> (show . Interval.Pretty) j) $
				Interval.union i j @?= e
			, testCase ((show . Interval.Pretty) j <> " " <> (show . Interval.Pretty) i) $
				Interval.union j i @?= e
			]
		 )
		 [ ( (Interval.<..<) 0 (4::Integer)
			 , (Interval.<..<) 5 9
			 , Nothing )
		 , ( (Interval.<..<=) 0 5
			 , (Interval.<..<) 5 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<..<) 0 5
			 , (Interval.<=..<) 5 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<..<=) 0 5
			 , (Interval.<=..<) 5 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<..<) 0 6
			 , (Interval.<..<) 4 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<..<) 0 9
			 , (Interval.<..<) 0 9
			 , (Interval.<..<) 0 9 )
		 , ( (Interval.<=..<) 0 9
			 , (Interval.<..<=) 0 9
			 , (Interval.<=..<=) 0 9 )
		 , ( (Interval.<..<=) 0 9
			 , (Interval.<=..<) 0 9
			 , (Interval.<=..<=) 0 9 )
		 , ( (Interval.<=..<=) 0 9
			 , (Interval.<=..<=) 0 9
			 , (Interval.<=..<=) 0 9 )
		 ]
	 , Sieve.tests
	 ]