tuple-th-0.2.1: tests/Test.hs
{-# LANGUAGE TemplateHaskell, FlexibleInstances, MultiParamTypeClasses, NoMonomorphismRestriction, ScopedTypeVariables #-}
{-# OPTIONS_GHC -ddump-splices -Wall -fno-warn-name-shadowing #-}
import TupleTH
import Test.QuickCheck.All
import Data.Char
import Test.QuickCheck.Property
prop_foldrTuple :: (Int, Int, Int) -> Bool
prop_foldrTuple t@(x::Int,y,z) = $(foldrTuple 3) (:) [] t == [x,y,z]
prop_foldlTuple :: (Int, Int, Int) -> Bool
prop_foldlTuple t@(x::Int,y,z) = $(foldlTuple 3) (flip (:)) [] t == [z,y,x]
prop_foldr1Tuple :: (Int, Int, Int) -> Bool
prop_foldr1Tuple t@(x::Int,y,z) = $(foldr1Tuple 3) (-) t == x - (y - z)
prop_foldl1Tuple :: (Int, Int, Int) -> Bool
prop_foldl1Tuple t@(x::Int,y,z) = $(foldl1Tuple 3) (-) t == (x - y) - z
prop_filterTuple :: (Int, Int) -> Bool
prop_filterTuple t@(x::Int,y) = $(filterTuple 2) even t == filter even [x,y]
prop_mapTuple :: (Char, Char, Char, Char) -> Bool
prop_mapTuple t@(x,y,z,a) = $(mapTuple 4) ord t == (ord x, ord y, ord z, ord a)
prop_nth :: (Int, Int, Int) -> Bool
prop_nth t@(x::Int,y,z) = [ $(proj 3 0) t, $(proj 3 1) t, $(proj 3 2) t ] == [x,y,z]
prop_zipTuple :: (Int, Integer) -> (Char, String) -> Bool
prop_zipTuple t@(x::Int,y::Integer) t'@(x'::Char,y'::String) =
$(zipTuple 2) t t' == ((x,x'),(y,y'))
prop_tupleFromList :: Int -> Int -> Int -> Bool
prop_tupleFromList (x::Int) y z = $(tupleFromList 3) [x,y,z] == (x,y,z)
prop_safeTupleFromList :: Int -> Int -> Int -> Bool
prop_safeTupleFromList (x::Int) y z = $(safeTupleFromList 3) [x,y,z] == Just (x,y,z)
prop_safeTupleFromList_tooLarge :: Int -> Int -> Int -> Bool
prop_safeTupleFromList_tooLarge (x::Int) y z = $(safeTupleFromList 2) [x,y,z] == Nothing
prop_safeTupleFromList_tooSmall :: Int -> Int -> Int -> Bool
prop_safeTupleFromList_tooSmall (x::Int) y z = $(safeTupleFromList 4) [x,y,z] == Nothing
prop_elemTuple :: Int -> Int -> Int -> Int -> Int -> Bool
prop_elemTuple (x::Int) a b c d = $(elemTuple 4) x (a,b,c,d) == elem x [a,b,c,d]
prop_reindexTuple :: Int -> Int -> Int -> Bool
prop_reindexTuple (x::Int) y z = $(reindexTuple 3 [1,1,0,0]) (x,y,z) == (y,y,x,x)
prop_deleteAtTuple :: Int -> Int -> Int -> Property
prop_deleteAtTuple x y z =
(deleteAtTuple3 0 t == (y,z) )
.&. (deleteAtTuple3 1 t == (x,z) )
.&. (deleteAtTuple3 2 t == (x,y) )
where
t = (x,y,z)
deleteAtTuple3 :: Integer -> (Int,Int,Int) -> (Int,Int)
deleteAtTuple3 = $(deleteAtTuple 3)
prop_deleteAtTuple_oob1 :: Property
prop_deleteAtTuple_oob1 = expectFailure (deleteAtTuple3 (-1) (1,2,3) `seq` True)
prop_deleteAtTuple_oob2 :: Property
prop_deleteAtTuple_oob2 = expectFailure (deleteAtTuple3 3 (1,2,3) `seq` True)
main :: IO Bool
main = $(quickCheckAll)