8import Data.List (sort, groupBy)
11import Test.Tasty.HUnit
14tests = testGroup "Tests"
15 [ testGroup "List Monoids"
16 [ testCase "FirstMonoid" $ do
18 getFirst :: [a] -> Maybe a
19 getFirst = destructFirstMonoid . fold . fmap constructFirstMonoid
20 getFirst [1 :: Int, 2, 3] @=? Just 1
21 getFirst [] @=? (Nothing :: Maybe ())
22 getFirst [True, False] @=? Just True
23 getFirst [True, True, False] @=? Just True
24 getFirst [1 .. 1000] @=? Just (1 :: Int)
25 getFirst [100 .. 1000] @=? Just (100 :: Int)
26 getFirst [6, 2, 7, 398, 1984, 383, -1020] @=? Just (6 :: Int)
27 , testCase "LastMonoid" $ do
29 getLast :: [a] -> Maybe a
30 getLast = destructLastMonoid . fold . fmap constructLastMonoid
31 getLast [1 :: Int, 2, 3] @=? Just 3
32 getLast [] @=? (Nothing :: Maybe ())
33 getLast [1 .. 1000] @=? Just (1000 :: Int)
34 getLast [100 .. 10000] @=? Just (10000 :: Int)
35 getLast [6, 2, 7, 398, 1984, 383, -1020, 498] @=? Just (498 :: Int)
36 getLast [True, False] @=? Just False
37 getLast [True, True, False] @=? Just False
38 getLast [True, True, False, True] @=? Just True
40 , testGroup "Todo List" $
41 let createTasks :: [(String, Priority)] -> MyTaskManager
42 createTasks = foldl (\t (a, b) -> createTask a b t) emptyTaskManager
43 getPrioritySets :: MyTaskManager -> [[(Completion, String)]]
45 fmap (sort . fmap (\(a, _, b) -> (a, b)))
46 . groupBy ((==) `on` (\(_, p, _) -> p))
49 [ testCase "emptyTaskManager" $
50 getPriorityList (emptyTaskManager :: MyTaskManager) @=? []
51 , testCase "createTask" $ do
59 @=? [ [(NotCompleted, "AAAAAAAAAA")],
60 [(NotCompleted, "aaa")],
69 @=? [ [(NotCompleted, "AAAAAAAAAA")],
77 ("oh HaiMark", Medium)
80 @=? [ [(NotCompleted, "AAAAAAAAAA")],
81 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
89 ("oh HaiMark", Medium),
93 @=? [ [(NotCompleted, "AAAAAAAAAA"), (NotCompleted, "OH NO")],
94 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
97 , testCase "toggleTaskCompletion" $ do
99 ( toggleTaskCompletion "AAAAAAAAAA" . createTasks $
101 ("AAAAAAAAAA", High),
103 ("oh HaiMark", Medium),
107 @=? [ [(Completed, "AAAAAAAAAA"), (NotCompleted, "OH NO")],
108 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
109 [(NotCompleted, "a")]
112 ( toggleTaskCompletion "AAAAAAAAAA" . toggleTaskCompletion "AAAAAAAAAA" . createTasks $
114 ("AAAAAAAAAA", High),
116 ("oh HaiMark", Medium),
120 @=? [ [(NotCompleted, "AAAAAAAAAA"), (NotCompleted, "OH NO")],
121 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
122 [(NotCompleted, "a")]
125 ( toggleTaskCompletion "a"
126 . toggleTaskCompletion "not here"
127 . toggleTaskCompletion "AAAAAAAAAA"
130 ("AAAAAAAAAA", High),
132 ("oh HaiMark", Medium),
136 @=? [ [(Completed, "AAAAAAAAAA"), (NotCompleted, "OH NO")],
137 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
140 , testCase "removeTask" $ do
142 ( removeTask "AAAAAAAAAA"
145 ("AAAAAAAAAA", High),
147 ("oh HaiMark", Medium),
151 @=? [ [(NotCompleted, "OH NO")],
152 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
153 [(NotCompleted, "a")]
156 ( removeTask "AAAAAAAAAA" . removeTask "AAAAAAAAAA"
159 ("AAAAAAAAAA", High),
161 ("oh HaiMark", Medium),
165 @=? [ [(NotCompleted, "OH NO")],
166 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
167 [(NotCompleted, "a")]
170 ( removeTask "aaa" . removeTask "oh HaiMark"
171 . removeTask "AAAAAAAAAA"
172 . removeTask "AAAAAAAAAA"
175 ("AAAAAAAAAA", High),
177 ("oh HaiMark", Medium),
181 @=? [ [(NotCompleted, "OH NO")],
182 [(NotCompleted, "a")]
184 , testCase "modifyPriority" $ do
186 ( modifyPriority "aaa" High . createTasks $
188 ("AAAAAAAAAA", High),
190 ("oh HaiMark", Medium),
194 @=? [ [(NotCompleted, "AAAAAAAAAA"), (NotCompleted, "OH NO"), (NotCompleted, "aaa")],
195 [(NotCompleted, "oh HaiMark")],
196 [(NotCompleted, "a")]
199 ( modifyPriority "aaa" High
200 . toggleTaskCompletion "a"
201 . modifyPriority "a" High
204 ("AAAAAAAAAA", High),
206 ("oh HaiMark", Medium),
210 @=? [ [ (Completed, "a"),
211 (NotCompleted, "AAAAAAAAAA"),
212 (NotCompleted, "OH NO"),
213 (NotCompleted, "aaa")
215 [(NotCompleted, "oh HaiMark")]
218 ( modifyPriority "aaa" High
219 . modifyPriority "a" High
220 . modifyPriority "a" High
221 . modifyPriority "oh HaiMark" High
224 ("AAAAAAAAAA", High),
226 ("oh HaiMark", Medium),
230 @=? [ [ (NotCompleted, "AAAAAAAAAA"),
231 (NotCompleted, "OH NO"),
233 (NotCompleted, "aaa"),
234 (NotCompleted, "oh HaiMark")
238 ( modifyPriority "aaa" High
239 . modifyPriority "a" High
240 . modifyPriority "ntestCase here sihji" High
241 . modifyPriority "oh HaiMark" Low
242 . modifyPriority "a" High
243 . modifyPriority "oh HaiMark" High
246 ("AAAAAAAAAA", High),
248 ("oh HaiMark", Medium),
252 @=? [ [ (NotCompleted, "AAAAAAAAAA"),
253 (NotCompleted, "OH NO"),
255 (NotCompleted, "aaa")
257 [(NotCompleted, "oh HaiMark")]
259 , testCase "renameTask" $ do
261 ( renameTask "AAAAAAAAAA" "henlo"
264 ("AAAAAAAAAA", High),
266 ("oh HaiMark", Medium),
270 @=? [ [(NotCompleted, "OH NO"), (NotCompleted, "henlo")],
271 [(NotCompleted, "aaa"), (NotCompleted, "oh HaiMark")],
272 [(NotCompleted, "a")]
275 ( renameTask "AAAAAAAAAA" "henlo"
276 . toggleTaskCompletion "a"
277 . renameTask "oh HaiMark" "iz task"
280 ("AAAAAAAAAA", High),
282 ("oh HaiMark", Medium),
286 @=? [ [(NotCompleted, "OH NO"), (NotCompleted, "henlo")],
287 [(NotCompleted, "aaa"), (NotCompleted, "iz task")],
291 ( renameTask "AAAAAAAAAA" "henlo"
292 . toggleTaskCompletion "iz task"
293 . renameTask "oh HaiMark" "iz task"
294 . renameTask "iz not here" "ajajaj"
297 ("AAAAAAAAAA", High),
299 ("oh HaiMark", Medium),
303 @=? [ [(NotCompleted, "OH NO"), (NotCompleted, "henlo")],
304 [(Completed, "iz task"), (NotCompleted, "aaa")],
305 [(NotCompleted, "a")]
309 [ testCase "HasPrice Coffee" $ do
310 price (Coffee 2 [OatMilk, Cinnamon]) @=? 2 + price OatMilk + price Cinnamon
311 price (Coffee 2 [Cinnamon, Cinnamon]) @=? 2 + price Cinnamon + price Cinnamon
312 price (Coffee 2 []) @=? 2
313 price (Coffee 2 [Cinnamon, Cream, Cinnamon])
318 , testCase "chargeCoffee" $ do
319 chargeCoffee (Coffee 2 [OatMilk, Cinnamon]) (DebitCard 199 69)
320 @=? Just (DebitCard 112 69)
321 chargeCoffee (Coffee 2 [OatMilk, Cinnamon]) (DebitCard 87 69)
322 @=? Just (DebitCard 0 69)
323 chargeCoffee (Coffee 2 [OatMilk, Cinnamon]) (DebitCard 86 69)
325 chargeCoffee (Coffee 2 [OatMilk, Cinnamon]) (DebitCard 0 69)
327 chargeCoffee (Coffee 2 [OatMilk, Cinnamon]) (DebitCard (-2189) 69)
329 chargeCoffee (Coffee 2 [OatMilk, Cinnamon, WhiteSugar]) (DebitCard 199 69)
330 @=? Just (DebitCard 97 69)
331 chargeCoffee (Coffee 2 [WhiteSugar, OatMilk, Cinnamon, WhiteSugar]) (DebitCard 199 69)
332 @=? Just (DebitCard 82 69)
333 , let coffee = Coffee 2 [OatMilk, Cinnamon]
334 in testCase "payForCoffee" $ do
335 payForCoffee (Customer [DebitCard 199 69] 0) coffee
336 @=? Just (Card (DebitCard 112 69))
337 payForCoffee (Customer [DebitCard 86 12, DebitCard 199 69] 2) coffee
338 @=? Just (Card (DebitCard 112 69))
339 payForCoffee (Customer [DebitCard (-12) 8, DebitCard 86 12, DebitCard 199 69] 0) coffee
340 @=? Just (Card (DebitCard 112 69))
341 payForCoffee (Customer [DebitCard 87 8, DebitCard 111 12, DebitCard 199 69] 0) coffee
342 @=? Just (Card (DebitCard 0 8))
343 payForCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 82 69] 0) coffee
345 payForCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 82 69] 87) coffee
347 payForCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 81 69] 86) coffee
349 , testCase "applyPayment" $ do
350 applyPayment (Customer [DebitCard 199 69] 0) (Card (DebitCard 112 69))
351 @=? Customer [DebitCard 112 69] 0
352 applyPayment (Customer [DebitCard 111 12, DebitCard 199 69] 2) (Card (DebitCard 112 69))
353 @=? Customer [DebitCard 111 12, DebitCard 112 69] 2
354 applyPayment (Customer [DebitCard (-12) 8, DebitCard 111 12, DebitCard 199 69] 0) (Card (DebitCard 112 69))
355 @=? Customer [DebitCard (-12) 8, DebitCard 111 12, DebitCard 112 69] 0
356 applyPayment (Customer [DebitCard 112 8, DebitCard 111 12, DebitCard 199 69] 0) (Card (DebitCard 0 8))
357 @=? Customer [DebitCard 0 8, DebitCard 111 12, DebitCard 199 69] 0
358 applyPayment (Customer [DebitCard 111 8, DebitCard 111 12, DebitCard 110 69] 112) (Cash 0)
359 @=? Customer [DebitCard 111 8, DebitCard 111 12, DebitCard 110 69] 0
360 applyPayment (Customer [DebitCard 111 8, DebitCard 111 12, DebitCard 110 69] 112) (Card (DebitCard 0 13))
361 @=? Customer [DebitCard 111 8, DebitCard 111 12, DebitCard 110 69] 112
362 , let coffee = Coffee 2 [OatMilk, Cinnamon]
363 in testCase "buyCoffee" $ do
364 buyCoffee (Customer [DebitCard 199 69] 0) coffee
365 @=? Just (Customer [DebitCard 112 69] 0)
366 buyCoffee (Customer [DebitCard 86 12, DebitCard 199 69] 2) coffee
367 @=? Just (Customer [DebitCard 86 12, DebitCard 112 69] 2)
368 buyCoffee (Customer [DebitCard (-12) 8, DebitCard 86 12, DebitCard 199 69] 0) coffee
369 @=? Just (Customer [DebitCard (-12) 8, DebitCard 86 12, DebitCard 112 69] 0)
370 buyCoffee (Customer [DebitCard 87 8, DebitCard 86 12, DebitCard 199 69] 0) coffee
371 @=? Just (Customer [DebitCard 0 8, DebitCard 86 12, DebitCard 199 69] 0)
372 buyCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 84 69] 0) coffee
374 buyCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 82 69] 87) coffee
375 @=? Just (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 82 69] 0)
376 buyCoffee (Customer [DebitCard 86 8, DebitCard 86 12, DebitCard 81 69] 86) coffee
378 , testCase "saveTheDiabetic" $ do
380 [ Coffee 0 [WhiteSugar, BrownSugar, Cinnamon],
381 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon],
382 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon]
385 [ Coffee 0 [Cinnamon],
391 [ Coffee 0 [WhiteSugar, BrownSugar, Cinnamon, BrownSugar, SoyMilk],
392 Coffee 0 [WhiteSugar, BrownSugar, WhiteSugar, WhiteSugar, Cinnamon],
393 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon]
396 [ Coffee 0 [Cinnamon, SoyMilk],
402 [ Coffee 0 [Cinnamon, SoyMilk],
408 [ Coffee 0 [Cinnamon, SoyMilk],
419 , testCase "calculateSugarDanger" $ do
421 [ Coffee 0 [WhiteSugar, BrownSugar, Cinnamon],
422 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon],
423 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon]
427 [ Coffee 0 [WhiteSugar, BrownSugar, Cinnamon, BrownSugar, SoyMilk],
428 Coffee 0 [WhiteSugar, BrownSugar, WhiteSugar, WhiteSugar, Cinnamon],
429 Coffee 0 [WhiteSugar, BrownSugar, Cinnamon],
434 [ Coffee 0 [Cinnamon, SoyMilk],
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list