@@ -38,8 +38,8 @@ module Examples where
38
38
apathize $ throwError (error "Oh noes !")
39
39
liftEff $ trace " Success: Exceptions don't stop the apathetic"
40
40
41
- test_put TakeQueue :: TestAVar
42
- test_put TakeQueue = do
41
+ test_put TakeVar :: TestAVar
42
+ test_put TakeVar = do
43
43
v <- makeVar
44
44
forkAff (later $ putVar v 1.0)
45
45
a <- takeVar v
@@ -52,8 +52,8 @@ module Examples where
52
52
liftEff $ trace (if b then "Success : Killed first forked " else "Failure : Couldn't kill first forked ")
53
53
54
54
55
- test_kill Queue :: TestAVar
56
- test_kill Queue = do
55
+ test_kill Var :: TestAVar
56
+ test_kill Var = do
57
57
v <- makeVar
58
58
killVar v (error "DOA ")
59
59
e <- attempt $ takeVar v
@@ -77,6 +77,31 @@ module Examples where
77
77
Par (later' 200 $ throwError (error ("Oh noes!"))))
78
78
liftEff $ either (const $ trace "Success : Killing both kills it dead ") (const $ trace "Failure : It's alive !!!") e
79
79
80
+ test_semigroupCanceler :: Test
81
+ test_semigroupCanceler =
82
+ let
83
+ c = Canceler (const (pure true)) <> Canceler (const (pure true))
84
+ in do
85
+ v <- cancel c (error "CANCEL ")
86
+ liftEff $ trace (if v then "Success : Canceled semigroup composite canceler "
87
+ else "Failure : Could not cancel semigroup composite canceler ")
88
+
89
+ test_cancelLater :: TestAVar
90
+ test_cancelLater = do
91
+ c <- forkAff $ (do pure "Binding "
92
+ _ <- later' 100 $ liftEff $ trace ("Failure: Later was not canceled!")
93
+ pure "Binding ")
94
+ v <- cancel c (error "Cause ")
95
+ liftEff $ trace (if v then "Success : Canceled later " else "Failure : Did not cancel later ")
96
+
97
+ test_cancelPar :: TestAVar
98
+ test_cancelPar = do
99
+ c <- forkAff <<< runPar $ Par (later' 100 $ liftEff $ trace "Failure : #1 should not get through ") <|>
100
+ Par (later' 100 $ liftEff $ trace "Failure : #2 should not get through ")
101
+ v <- c `cancel` (error "Must cancel ")
102
+ liftEff $ trace (if v then "Success : Canceling composite of two Par succeeded "
103
+ else "Failure : Canceling composite of two Par failed ")
104
+
80
105
main = launchAff $ do
81
106
liftEff $ trace " Testing sequencing"
82
107
test_sequencing 3
@@ -90,17 +115,23 @@ module Examples where
90
115
liftEff $ trace " Testing later"
91
116
later $ liftEff $ trace " Success: It happened later"
92
117
118
+ liftEff $ trace " Testing kill of later"
119
+ test_cancelLater
120
+
93
121
liftEff $ trace " Testing kill of first forked"
94
122
test_killFirstForked
95
123
96
124
liftEff $ trace " Testing apathize"
97
125
test_apathize
98
126
99
- liftEff $ trace " Testing Queue - putVar, takeVar "
100
- test_put TakeQueue
127
+ liftEff $ trace " Testing semigroup canceler "
128
+ test_semigroup Canceler
101
129
102
- liftEff $ trace " Testing killVar"
103
- test_killQueue
130
+ liftEff $ trace " Testing AVar - putVar, takeVar"
131
+ test_putTakeVar
132
+
133
+ liftEff $ trace " Testing AVar killVar"
134
+ test_killVar
104
135
105
136
liftEff $ trace " Testing Par (<|>)"
106
137
test_parRace
@@ -111,4 +142,7 @@ module Examples where
111
142
liftEff $ trace " Testing Par (<|>) - kill two"
112
143
test_parRaceKill2
113
144
145
+ liftEff $ trace " Testing cancel of Par (<|>)"
146
+ test_cancelPar
147
+
114
148
liftEff $ trace " Done testing"
0 commit comments