1
exercism fetch haskell pascals-triangle

test/Tests.hs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{-# OPTIONS_GHC -fno-warn-type-defaults #-}

import Data.Foldable     (for_)
import Test.Hspec        (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)

import Triangle (rows)

main :: IO ()
main = hspecWith defaultConfig {configFastFail = True} specs

specs :: Spec
specs = describe "rows" $ for_ rowsCases rowsTest
  where

    rowsTest (description, n, expected) = it description assertion
      where
        assertion = rows n `shouldBe` expected

    rowsCases = [ ("no rows"      , 0, [                                    ])
                , ("single row"   , 1, [[1]                                 ])
                , ("two rows"     , 2, [[1], [1, 1]                         ])
                , ("three rows"   , 3, [[1], [1, 1], [1, 2, 1]              ])
                , ("four rows"    , 4, [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]])
                , ("five rows"    , 5, [[1],
                                        [1, 1],
                                        [1, 2, 1],
                                        [1, 3, 3, 1],
                                        [1, 4, 6, 4, 1]])
                , ("six rows"     , 6, [[1],
                                        [1, 1],
                                        [1, 2, 1],
                                        [1, 3, 3, 1],
                                        [1, 4, 6, 4, 1],
                                        [1, 5, 10, 10, 5, 1]])
                , ("ten rows"     ,10, [[1],
                                        [1, 1],
                                        [1, 2, 1],
                                        [1, 3, 3, 1],
                                        [1, 4, 6, 4, 1],
                                        [1, 5, 10, 10, 5, 1],
                                        [1, 6, 15, 20, 15, 6, 1],
                                        [1, 7, 21, 35, 35, 21, 7, 1],
                                        [1, 8, 28, 56, 70, 56, 28, 8, 1],
                                        [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]])
                , ("negative rows",-1, []) ]