@@ -3,7 +3,7 @@ module Test.Main where
3
3
import Prelude
4
4
5
5
import Control.Alt ((<|>))
6
- import Control.Monad.Aff (Aff , runAff , makeAff , launchAff , later , later' , forkAff , forkAll , Canceler (..), cancel , attempt , finally , apathize )
6
+ import Control.Monad.Aff (Aff , runAff , makeAff , launchAff , delay , forkAff , forkAll , Canceler (..), cancel , attempt , finally , apathize )
7
7
import Control.Monad.Aff.AVar (AVAR , makeVar , makeVar' , putVar , modifyVar , takeVar , peekVar , killVar )
8
8
import Control.Monad.Aff.Console (CONSOLE , log )
9
9
import Control.Monad.Eff (Eff )
@@ -14,16 +14,17 @@ import Control.Monad.Rec.Class (Step(..), tailRecM)
14
14
import Control.Parallel (parallel , sequential )
15
15
import Data.Either (either , fromLeft , fromRight )
16
16
import Data.Maybe (Maybe (..))
17
+ import Data.Time.Duration (Milliseconds (..))
17
18
import Data.Unfoldable (replicate )
18
19
import Partial.Unsafe (unsafePartial )
19
20
20
21
type Test a = forall e . Aff (console :: CONSOLE | e ) a
21
22
type TestAVar a = forall e . Aff (console :: CONSOLE , avar :: AVAR | e ) a
22
23
23
- timeout :: Int → TestAVar Unit → TestAVar Unit
24
+ timeout :: Milliseconds → TestAVar Unit → TestAVar Unit
24
25
timeout ms aff = do
25
26
exn <- makeVar
26
- clr1 <- forkAff (later' ms ( putVar exn (Just " Timed out" ) ))
27
+ clr1 <- forkAff (delay ms *> putVar exn (Just " Timed out" ))
27
28
clr2 <- forkAff (aff *> putVar exn Nothing )
28
29
res ← takeVar exn
29
30
log (show res)
@@ -37,7 +38,8 @@ replicateArray = replicate
37
38
test_sequencing :: Int -> Test Unit
38
39
test_sequencing 0 = log " Done"
39
40
test_sequencing n = do
40
- later' 100 (log (show (n / 10 ) <> " seconds left" ))
41
+ delay $ Milliseconds 100.0
42
+ log (show (n / 10 ) <> " seconds left" )
41
43
test_sequencing (n - 1 )
42
44
43
45
foreign import synchronousUnexpectedThrowError :: forall e . Eff e Unit
@@ -75,30 +77,30 @@ test_apathize = do
75
77
test_putTakeVar :: TestAVar Unit
76
78
test_putTakeVar = do
77
79
v <- makeVar
78
- _ <- forkAff (later $ putVar v 1.0 )
80
+ _ <- forkAff (delay ( Milliseconds 0.0 ) *> putVar v 1.0 )
79
81
a <- takeVar v
80
82
log (" Success: Value " <> show a)
81
83
82
84
test_peekVar :: TestAVar Unit
83
85
test_peekVar = do
84
- timeout 1000 do
86
+ timeout ( Milliseconds 1000.0 ) do
85
87
v <- makeVar
86
- _ <- forkAff (later $ putVar v 1.0 )
88
+ _ <- forkAff (delay ( Milliseconds 0.0 ) *> putVar v 1.0 )
87
89
a1 <- peekVar v
88
90
a2 <- takeVar v
89
91
when (a1 /= a2) do
90
92
throwError (error " Something horrible went wrong - peeked var is not equal to taken var" )
91
93
log (" Success: Peeked value not consumed" )
92
94
93
- timeout 1000 do
95
+ timeout ( Milliseconds 1000.0 ) do
94
96
w <- makeVar
95
97
putVar w true
96
98
b <- peekVar w
97
99
when (not b) do
98
100
throwError (error " Something horrible went wrong - peeked var is not true" )
99
101
log (" Success: Peeked value read from written var" )
100
102
101
- timeout 1000 do
103
+ timeout ( Milliseconds 1000.0 ) do
102
104
x <- makeVar
103
105
res <- makeVar' 1
104
106
_ <- forkAff do
@@ -116,7 +118,7 @@ test_peekVar = do
116
118
117
119
test_killFirstForked :: Test Unit
118
120
test_killFirstForked = do
119
- c <- forkAff (later' 100 $ pure " Failure: This should have been killed!" )
121
+ c <- forkAff (delay ( Milliseconds 100.0 ) $> " Failure: This should have been killed!" )
120
122
b <- c `cancel` (error " Just die" )
121
123
log (if b then " Success: Killed first forked" else " Failure: Couldn't kill first forked" )
122
124
@@ -144,8 +146,8 @@ test_finally = do
144
146
145
147
test_parRace :: TestAVar Unit
146
148
test_parRace = do
147
- s <- sequential (parallel (later' 100 $ pure " Success: Early bird got the worm" ) <|>
148
- parallel (later' 200 $ pure " Failure: Late bird got the worm" ))
149
+ s <- sequential (parallel (delay ( Milliseconds 100.0 ) $> " Success: Early bird got the worm" ) <|>
150
+ parallel (delay ( Milliseconds 200.0 ) $> " Failure: Late bird got the worm" ))
149
151
log s
150
152
151
153
test_parError :: TestAVar Unit
@@ -155,14 +157,14 @@ test_parError = do
155
157
156
158
test_parRaceKill1 :: TestAVar Unit
157
159
test_parRaceKill1 = do
158
- s <- sequential (parallel (later' 100 $ throwError (error (" Oh noes!" ))) <|>
159
- parallel (later' 200 $ pure " Success: Early error was ignored in favor of late success" ))
160
+ s <- sequential (parallel (delay ( Milliseconds 100.0 ) *> throwError (error (" Oh noes!" ))) <|>
161
+ parallel (delay ( Milliseconds 200.0 ) $> " Success: Early error was ignored in favor of late success" ))
160
162
log s
161
163
162
164
test_parRaceKill2 :: TestAVar Unit
163
165
test_parRaceKill2 = do
164
- e <- attempt $ sequential (parallel (later' 100 $ throwError (error (" Oh noes!" ))) <|>
165
- parallel (later' 200 $ throwError (error (" Oh noes!" ))))
166
+ e <- attempt $ sequential (parallel (delay ( Milliseconds 100.0 ) *> throwError (error (" Oh noes!" ))) <|>
167
+ parallel (delay ( Milliseconds 200.0 ) *> throwError (error (" Oh noes!" ))))
166
168
either (const $ log " Success: Killing both kills it dead" ) (const $ log " Failure: It's alive!!!" ) e
167
169
168
170
test_semigroupCanceler :: Test Unit
@@ -174,30 +176,32 @@ test_semigroupCanceler =
174
176
log (if v then " Success: Canceled semigroup composite canceler"
175
177
else " Failure: Could not cancel semigroup composite canceler" )
176
178
177
- test_cancelLater :: TestAVar Unit
178
- test_cancelLater = do
179
- c <- forkAff $ (do _ <- pure " Binding"
180
- _ <- later' 100 $ log (" Failure: Later was not canceled!" )
181
- pure " Binding" )
179
+ test_cancelDelay :: TestAVar Unit
180
+ test_cancelDelay = do
181
+ c <- forkAff do
182
+ _ <- pure " Binding"
183
+ delay (Milliseconds 100.0 )
184
+ log $ " Failure: Delay was not canceled!"
185
+ pure " Binding"
182
186
v <- cancel c (error " Cause" )
183
- log (if v then " Success: Canceled later " else " Failure: Did not cancel later " )
187
+ log (if v then " Success: Canceled delay " else " Failure: Did not cancel delay " )
184
188
185
- test_cancelLaunchLater :: forall e . Eff (console :: CONSOLE , exception :: EXCEPTION | e ) Unit
186
- test_cancelLaunchLater = do
187
- c <- launchAff $ later' 100 $ log (" Failure: Later was not canceled!" )
189
+ test_cancelLaunchDelay :: forall e . Eff (console :: CONSOLE , exception :: EXCEPTION | e ) Unit
190
+ test_cancelLaunchDelay = do
191
+ c <- launchAff $ delay ( Milliseconds 100.0 ) *> log (" Failure: Delay was not canceled!" )
188
192
void $ launchAff $ (do v <- cancel c (error " Cause" )
189
- log (if v then " Success: Canceled later " else " Failure: Did not cancel later " ))
193
+ log (if v then " Success: Canceled delay " else " Failure: Did not cancel delay " ))
190
194
191
- test_cancelRunLater :: forall e . Eff (console :: CONSOLE | e ) Unit
192
- test_cancelRunLater = do
193
- c <- runAff (const (pure unit)) (const (pure unit)) $ later' 100 $ log (" Failure: Later was not canceled!" )
195
+ test_cancelRunDelay :: forall e . Eff (console :: CONSOLE | e ) Unit
196
+ test_cancelRunDelay = do
197
+ c <- runAff (const (pure unit)) (const (pure unit)) $ delay ( Milliseconds 100.0 ) *> log (" Failure: Delay was not canceled!" )
194
198
void $ try $ launchAff $ (do v <- cancel c (error " Cause" )
195
- log (if v then " Success: Canceled later " else " Failure: Did not cancel later " ))
199
+ log (if v then " Success: Canceled delay " else " Failure: Did not cancel delay " ))
196
200
197
201
test_cancelParallel :: TestAVar Unit
198
202
test_cancelParallel = do
199
- c <- forkAff <<< sequential $ parallel (later' 100 $ log " Failure: #1 should not get through" ) <|>
200
- parallel (later' 100 $ log " Failure: #2 should not get through" )
203
+ c <- forkAff <<< sequential $ parallel (delay ( Milliseconds 100.0 ) *> log " Failure: #1 should not get through" ) <|>
204
+ parallel (delay ( Milliseconds 100.0 ) *> log " Failure: #2 should not get through" )
201
205
v <- c `cancel` (error " Must cancel" )
202
206
log (if v then " Success: Canceling composite of two Parallel succeeded"
203
207
else " Failure: Canceling composite of two Parallel failed" )
@@ -206,19 +210,21 @@ test_cancelRaceLeft :: TestAVar Unit
206
210
test_cancelRaceLeft = do
207
211
var <- makeVar
208
212
c <- sequential
209
- $ parallel (later' 250 $ putVar var true )
210
- <|> parallel (later' 100 $ pure unit)
211
- later' 500 $ putVar var false
213
+ $ parallel (delay (Milliseconds 250.0 ) *> putVar var true )
214
+ <|> parallel (delay (Milliseconds 100.0 ))
215
+ delay (Milliseconds 500.0 )
216
+ putVar var false
212
217
l <- takeVar var
213
218
when l $ throwError (error " Failure: left side ran even though it lost the race" )
214
219
215
220
test_cancelRaceRight :: TestAVar Unit
216
221
test_cancelRaceRight = do
217
222
var <- makeVar
218
223
c <- sequential
219
- $ parallel (later' 100 $ pure unit)
220
- <|> parallel (later' 250 $ putVar var true )
221
- later' 500 $ putVar var false
224
+ $ parallel (delay (Milliseconds 100.0 ))
225
+ <|> parallel (delay (Milliseconds 250.0 ) *> putVar var true )
226
+ delay (Milliseconds 500.0 )
227
+ putVar var false
222
228
l <- takeVar var
223
229
when l $ throwError (error " Failure: right side ran even though it lost the race" )
224
230
@@ -242,7 +248,7 @@ loopAndBounce n = do
242
248
where
243
249
go 0 = pure (Done 0 )
244
250
go k | mod k 30000 == 0 = do
245
- later' 10 (pure unit )
251
+ delay ( Milliseconds 10.0 )
246
252
pure (Loop (k - 1 ))
247
253
go k = pure (Loop (k - 1 ))
248
254
@@ -255,20 +261,17 @@ all n = do
255
261
256
262
cancelAll :: forall eff . Int -> Aff (console :: CONSOLE , avar :: AVAR | eff ) Unit
257
263
cancelAll n = do
258
- canceler <- forkAll $ replicateArray n (later' 100000 ( log " oops" ) )
264
+ canceler <- forkAll $ replicateArray n (delay ( Milliseconds 100000.0 ) *> log " oops" )
259
265
canceled <- cancel canceler (error " bye" )
260
266
log (" Cancelled all: " <> show canceled)
261
267
262
- delay :: forall eff . Int -> Aff eff Unit
263
- delay n = later' n (pure unit)
264
-
265
268
main :: Eff (console :: CONSOLE , avar :: AVAR , exception :: EXCEPTION ) Unit
266
269
main = do
267
- Eff .log " Testing kill of later launched in separate Aff"
268
- test_cancelLaunchLater
270
+ Eff .log " Testing kill of delay launched in separate Aff"
271
+ test_cancelLaunchDelay
269
272
270
- Eff .log " Testing kill of later run in separate Aff"
271
- test_cancelRunLater
273
+ Eff .log " Testing kill of delay run in separate Aff"
274
+ test_cancelRunDelay
272
275
273
276
void $ runAff throwException (const (pure unit)) $ do
274
277
log " Testing sequencing"
@@ -283,11 +286,12 @@ main = do
283
286
log " Testing attempt"
284
287
test_attempt
285
288
286
- log " Testing later"
287
- later $ log " Success: It happened later"
289
+ log " Testing delay"
290
+ delay (Milliseconds 0.0 )
291
+ log " Success: It happened later"
288
292
289
- log " Testing kill of later "
290
- test_cancelLater
293
+ log " Testing kill of delay "
294
+ test_cancelDelay
291
295
292
296
log " Testing kill of first forked"
293
297
test_killFirstForked
@@ -335,7 +339,7 @@ main = do
335
339
test_syncTailRecM
336
340
337
341
log " pre-delay"
338
- delay 1000
342
+ delay ( Milliseconds 1000.0 )
339
343
log " post-delay"
340
344
341
345
loopAndBounce 1000000
0 commit comments