packages feed

stack-hpc-coveralls-0.0.1.0: test/SHCHUnits.hs

{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module SHCHUnits
    where

import           Test.HUnit
import           Trace.Hpc.Mix
import           Trace.Hpc.Util

import           SHC.Lix
import           SHC.Types
import           SHC.Utils


(~::) :: String -> [Assertion] -> Test
label ~:: tests = TestList $
    zipWith (\i -> TestLabel $ label ++ " " ++ show i) [1..] (map TestCase tests)

boxes :: [MixEntry]
boxes = [ (undefined, ExpBox False)
        , (undefined, BinBox GuardBinBox True)
        , (undefined, BinBox GuardBinBox False)
        ]

boxes2 :: [MixEntry]
boxes2 = map (\(_, b) -> (toHpcPos (1, 1, 1, 2), b)) boxes

testToHit :: Test
testToHit = "toHit" ~::
    [ Irrelevant @=? toHit []
    , None       @=? toHit [False]
    , None       @=? toHit [False, False]
    , Partial    @=? toHit [False, True]
    , Partial    @=? toHit [True, False]
    , Partial    @=? toHit [False, False, True]
    , Partial    @=? toHit [False, True, False]
    , Partial    @=? toHit [True, False, False]
    , Full       @=? toHit [True]
    , Full       @=? toHit [True, True]
    ]

testToLineHit :: Test
testToLineHit = "toLineHit" ~::
    [ toLineHit ( [(toHpcPos (4, 5, 6, 2), undefined)]
                , [], undefined)     @?= (3, True)
    , toLineHit ( [(toHpcPos (4, 5, 6, 2), undefined)]
                , [1], undefined)    @?= (3, True)
    , toLineHit ( [(toHpcPos (4, 5, 6, 2), undefined)]
                , [0], undefined)    @?= (3, False)
    , toLineHit ( [(toHpcPos (4, 5, 6, 2), undefined)]
                , [0, 1], undefined) @?= (3, False)
    ]

testIsOtherwiseEntry :: Test
testIsOtherwiseEntry = "testIsOtherwiseEntry" ~::
    [ isOtherwiseEntry ([], undefined, [])               @?= False
    , isOtherwiseEntry ([], undefined, ["otherwise"])    @?= False
    , isOtherwiseEntry (boxes, undefined, [])            @?= False
    , isOtherwiseEntry (boxes, undefined, ["otherwise"]) @?= True
    ]

testAdjust :: Test
testAdjust = "testAdjust" ~::
    [ adjust (boxes2, [], ["otherwise"])  @?= (boxes2, [], ["otherwise"])
    , adjust (boxes2, [0], ["otherwise"]) @?= (boxes2, [0], ["otherwise"])
    , adjust (boxes2, [1], ["otherwise"]) @?= (boxes2, [1, 1, 1], ["otherwise"])
    , adjust ([], [0], ["otherwise"])     @?= ([], [0], ["otherwise"])
    , adjust ([], [0], [])                @?= ([], [0], [])
    ]



testMcons :: Test
testMcons = "mcons" ~::
    [ mcons Nothing []   @?= ([]::[Int])
    , mcons (Just 2) []  @?= [2]
    , mcons Nothing [4]  @?= [4]
    , mcons (Just 4) [2] @?= [4, 2]
    ]

testMatchAny :: Test
testMatchAny = "matchAny" ~::
    [ matchAny [] ""                   @?= False
    , matchAny [] "test"               @?= False
    , matchAny ["nothing"] "something" @?= False
    , matchAny ["a"] "also"            @?= True
    , matchAny ["a", "b"] "beta"       @?= True
    , matchAny ["a", "c"] "gamma"      @?= False
    ]

testMapFirst :: Test
testMapFirst = "mapFirst" ~::
    [ mapFirst (+ 1) []        @?= []
    , mapFirst (+ 1) [2]       @?= [3]
    , mapFirst (+ 1) [2, 3]    @?= [3, 3]
    , mapFirst (+ 1) [2, 3, 5] @?= [3, 3, 5]
    ]

testMapLast :: Test
testMapLast = "mapLast" ~::
    [ mapLast (+ 1) []        @?= []
    , mapLast (+ 1) [2]       @?= [3]
    , mapLast (+ 1) [2, 3]    @?= [2, 4]
    , mapLast (+ 1) [2, 3, 5] @?= [2, 3, 6]
    ]

testSubSeq :: Test
testSubSeq = "subSeq" ~::
    [ subSeq 0 0 []        @?= ([] :: [Int])
    , subSeq 0 0 [2]       @?= []
    , subSeq 0 1 [2]       @?= [2]
    , subSeq 0 2 [2]       @?= [2]
    , subSeq 1 1 [2]       @?= []
    , subSeq 1 2 [2]       @?= []
    , subSeq 0 0 [2, 3]    @?= []
    , subSeq 0 1 [2, 3]    @?= [2]
    , subSeq 0 2 [2, 3]    @?= [2, 3]
    , subSeq 0 3 [2, 3]    @?= [2, 3]
    , subSeq 1 1 [2, 3]    @?= []
    , subSeq 1 2 [2, 3]    @?= [3]
    , subSeq 1 3 [2, 3]    @?= [3]
    , subSeq 0 2 [2, 3]    @?= [2, 3]
    , subSeq 1 3 [2, 3, 5] @?= [3, 5]
    , subSeq 0 3 [2, 3, 5] @?= [2, 3, 5]
    ]

testSubSubSeq :: Test
testSubSubSeq = "subSubSeq" ~::
    [ subSubSeq 0 0 [[]]             @?= ([[]] :: [[Int]])
    , subSubSeq 0 0 [[2]]            @?= [[]]
    , subSubSeq 0 1 [[2]]            @?= [[2]]
    , subSubSeq 0 0 [[2, 3]]         @?= [[]]
    , subSubSeq 0 1 [[2, 3]]         @?= [[2]]
    , subSubSeq 0 2 [[2, 3]]         @?= [[2, 3]]
    , subSubSeq 1 1 [[2, 3]]         @?= [[]]
    , subSubSeq 1 2 [[2, 3]]         @?= [[3]]
    , subSubSeq 1 3 [[2, 3]]         @?= [[3]]
    , subSubSeq 0 2 [[2, 3]]         @?= [[2, 3]]
    , subSubSeq 1 3 [[2, 3, 5]]      @?= [[3, 5]]
    , subSubSeq 0 3 [[2, 3, 5]]      @?= [[2, 3, 5]]
    , subSubSeq 0 0 [[2, 3], [5, 7]] @?= [[2, 3], []]
    , subSubSeq 0 1 [[2, 3], [5, 7]] @?= [[2, 3], [5]]
    , subSubSeq 0 2 [[2, 3], [5, 7]] @?= [[2, 3], [5, 7]]
    , subSubSeq 1 0 [[2, 3], [5, 7]] @?= [[3], []]
    , subSubSeq 1 1 [[2, 3], [5, 7]] @?= [[3], [5]]
    , subSubSeq 1 2 [[2, 3], [5, 7]] @?= [[3], [5, 7]]
    , subSubSeq 2 0 [[2, 3], [5, 7]] @?= [[], []]
    , subSubSeq 2 1 [[2, 3], [5, 7]] @?= [[], [5]]
    , subSubSeq 2 2 [[2, 3], [5, 7]] @?= [[], [5, 7]]
    ]

testGroupByIndex :: Test
testGroupByIndex = "groupByIndex" ~::
    [ groupByIndex 0 [(0, 2)]         @?= []
    , groupByIndex 1 [(0, 2)]         @?= [[2]]
    , groupByIndex 2 [(0, 2)]         @?= [[2], []]
    , groupByIndex 0 [(1, 2)]         @?= []
    , groupByIndex 1 [(1, 2)]         @?= [[]]
    , groupByIndex 2 [(1, 2)]         @?= [[], [2]]
    , groupByIndex 3 [(1, 2)]         @?= [[], [2], []]
    , groupByIndex 0 [(0, 2), (0, 3)] @?= []
    , groupByIndex 1 [(0, 2), (0, 3)] @?= [[3, 2]]
    , groupByIndex 1 [(0, 2), (1, 3)] @?= [[2]]
    , groupByIndex 1 [(1, 2), (1, 3)] @?= [[]]
    , groupByIndex 2 [(0, 2), (0, 3)] @?= [[3, 2], []]
    , groupByIndex 2 [(0, 2), (1, 3)] @?= [[2], [3]]
    , groupByIndex 2 [(1, 2), (1, 3)] @?= [[], [3, 2]]
    , groupByIndex 3 [(0, 2), (0, 3)] @?= [[3, 2], [], []]
    , groupByIndex 3 [(0, 2), (1, 3)] @?= [[2], [3], []]
    , groupByIndex 3 [(1, 2), (1, 3)] @?= [[], [3, 2], []]
    , groupByIndex 5 [(0, 2), (2, 5), (2, 3), (4, 13), (4, 11), (4, 7)] @?= [[2], [], [3, 5], [], [7, 11, 13]]
    ]