1
exercism fetch purescript diamond

test/Main.purs

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
module Test.Main where

import Prelude
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.AVar (AVAR)
import Control.Monad.Eff.Console (CONSOLE)
import Test.Unit.Assert as Assert
import Test.Unit (TestSuite, suite, test)
import Test.Unit.Console (TESTOUTPUT)
import Test.Unit.Main (runTest)
import Diamond (rows)

main :: forall eff
  . Eff ( avar :: AVAR
        , console :: CONSOLE
        , testOutput :: TESTOUTPUT
        | eff                     
        )
        Unit
main = runTest suites

suites :: forall e. TestSuite e
suites = do
  suite "Diamond.rows" do

    test "Degenerate case with a single 'A' row" $
      Assert.equal   [ "A"
                     ]
                   (rows 'A')

    test "Degenerate case with no row containing 3 distinct groups of spaces" $
      Assert.equal   [ " A "
                     , "B B"
                     , " A "
                     ]
                   (rows 'B')

    test "Smallest non-degenerate case with odd diamond side length" $
      Assert.equal   [ "  A  "
                     , " B B "
                     , "C   C"
                     , " B B "
                     , "  A  "
                     ]
                   (rows 'C')

    test "Smallest non-degenerate case with even diamond side length" $
      Assert.equal   [ "   A   "
                     , "  B B  "
                     , " C   C "
                     , "D     D"
                     , " C   C "
                     , "  B B  "
                     , "   A   "
                     ]
                   (rows 'D')

    test "Largest possible diamond" $
      Assert.equal   [ "                         A                         "
                     , "                        B B                        "
                     , "                       C   C                       "
                     , "                      D     D                      "
                     , "                     E       E                     "
                     , "                    F         F                    "
                     , "                   G           G                   "
                     , "                  H             H                  "
                     , "                 I               I                 "
                     , "                J                 J                "
                     , "               K                   K               "
                     , "              L                     L              "
                     , "             M                       M             "
                     , "            N                         N            "
                     , "           O                           O           "
                     , "          P                             P          "
                     , "         Q                               Q         "
                     , "        R                                 R        "
                     , "       S                                   S       "
                     , "      T                                     T      "
                     , "     U                                       U     "
                     , "    V                                         V    "
                     , "   W                                           W   "
                     , "  X                                             X  "
                     , " Y                                               Y "
                     , "Z                                                 Z"
                     , " Y                                               Y "
                     , "  X                                             X  "
                     , "   W                                           W   "
                     , "    V                                         V    "
                     , "     U                                       U     "
                     , "      T                                     T      "
                     , "       S                                   S       "
                     , "        R                                 R        "
                     , "         Q                               Q         "
                     , "          P                             P          "
                     , "           O                           O           "
                     , "            N                         N            "
                     , "             M                       M             "
                     , "              L                     L              "
                     , "               K                   K               "
                     , "                J                 J                "
                     , "                 I               I                 "
                     , "                  H             H                  "
                     , "                   G           G                   "
                     , "                    F         F                    "
                     , "                     E       E                     "
                     , "                      D     D                      "
                     , "                       C   C                       "
                     , "                        B B                        "
                     , "                         A                         "
                     ]
                   (rows 'Z')