-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMain.hs
81 lines (77 loc) · 2.51 KB
/
Main.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
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
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Builder (doubleton, run, singleton, tripleton)
import Data.Builder.Catenable (pattern (:<), pattern (:>))
import Data.Semigroup (stimes)
import Test.Tasty (TestTree, defaultMain, testGroup)
import Test.Tasty.HUnit ((@=?))
import qualified Data.Builder.Catenable as Cat
import qualified Data.Foldable as F
import qualified Data.List as L
import qualified Test.Tasty.HUnit as THU
main :: IO ()
main = defaultMain tests
tests :: TestTree
tests =
testGroup
"Tests"
[ testGroup
"Data.Builder"
[ THU.testCase "A" $
"ABCDEF"
@=? ( F.toList $
run
( singleton 'A'
<> singleton 'B'
<> singleton 'C'
<> singleton 'D'
<> singleton 'E'
<> singleton 'F'
)
)
, THU.testCase "B" $
"ABCCCCCCCCCCCCCCCD"
@=? ( F.toList $
run
( singleton 'A'
<> singleton 'B'
<> stimes (15 :: Int) (singleton 'C')
<> singleton 'D'
)
)
, THU.testCase "C" $
(L.replicate 500 'X')
@=? (F.toList $ run (stimes (500 :: Int) (singleton 'X')))
, THU.testCase "D" $
"ACDCDCDCDCDCDCDCDCDX"
@=? ( F.toList $
run
( singleton 'A'
<> stimes (9 :: Int) (doubleton 'C' 'D')
<> singleton 'X'
)
)
, THU.testCase "E" $
"ABCABCABCABCABCABCABCX"
@=? ( F.toList $
run
( stimes (7 :: Int) (tripleton 'A' 'B' 'C')
<> singleton 'X'
)
)
]
, testGroup
"Data.Builder.Catenable"
[ THU.testCase "A" $
"ABCDEF"
@=? ( F.toList $
Cat.run
( ('A' :< 'B' :< 'C' :< mempty)
<> (mempty :> 'D' :> 'E' :> 'F')
)
)
, THU.testCase "B" $
"DEF"
@=? (F.toList $ Cat.run (mempty :> 'D' :> 'E' :> 'F'))
]
]