@@ -8,7 +8,123 @@ import delay from './delay.mjs'
8
8
// eslint-disable-next-line require-jsdoc
9
9
class TestError extends Error { }
10
10
11
- test ( 'every all pass' , async ( ) => {
11
+ test ( 'every compatibility' , async ( ) => {
12
+ let d = new Deferred ( )
13
+ let p = every ( [ ...range ( 3 ) ] , async ( v ) => {
14
+ await d . promise
15
+ return true
16
+ } , 1 )
17
+ d . resolve ( )
18
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => true ) )
19
+
20
+ d = new Deferred ( )
21
+ p = every ( [ ...range ( 3 ) ] , async ( v ) => {
22
+ await d . promise
23
+ return v !== 2
24
+ } , 1 )
25
+ d . resolve ( )
26
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => v !== 2 ) )
27
+
28
+ d = new Deferred ( )
29
+ p = every ( [ ...range ( 3 ) ] , async ( v ) => {
30
+ await d . promise
31
+ return false
32
+ } , 1 )
33
+ d . resolve ( )
34
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => false ) )
35
+
36
+ d = new Deferred ( )
37
+ p = every ( [ ] , async ( v ) => {
38
+ await d . promise
39
+ return false
40
+ } , 1 )
41
+ d . resolve ( )
42
+ expect ( await p ) . toBe ( [ ] . every ( ( v ) => false ) )
43
+
44
+ d = new Deferred ( )
45
+ p = every ( [ ] , async ( v ) => {
46
+ await d . promise
47
+ return true
48
+ } , 1 )
49
+ d . resolve ( )
50
+ expect ( await p ) . toBe ( [ ] . every ( ( v ) => true ) )
51
+ } )
52
+
53
+ test ( 'every parallel' , async ( ) => {
54
+ let d = new Deferred ( )
55
+ let p = every ( [ ...range ( 3 ) ] , async ( v ) => {
56
+ await d . promise
57
+ return true
58
+ } , 10 )
59
+ d . resolve ( )
60
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => true ) )
61
+
62
+ d = new Deferred ( )
63
+ p = every ( [ ...range ( 3 ) ] , async ( v ) => {
64
+ await d . promise
65
+ return v !== 2
66
+ } , 10 )
67
+ d . resolve ( )
68
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => v !== 2 ) )
69
+
70
+ d = new Deferred ( )
71
+ p = every ( [ ...range ( 3 ) ] , async ( v ) => {
72
+ await d . promise
73
+ return false
74
+ } , 10 )
75
+ d . resolve ( )
76
+ expect ( await p ) . toBe ( [ ...range ( 3 ) ] . every ( ( v ) => false ) )
77
+
78
+ d = new Deferred ( )
79
+ p = every ( [ ] , async ( v ) => {
80
+ await d . promise
81
+ return false
82
+ } , 10 )
83
+ d . resolve ( )
84
+ expect ( await p ) . toBe ( [ ] . every ( ( v ) => false ) )
85
+
86
+ d = new Deferred ( )
87
+ p = every ( [ ] , async ( v ) => {
88
+ await d . promise
89
+ return true
90
+ } , 10 )
91
+ d . resolve ( )
92
+ expect ( await p ) . toBe ( [ ] . every ( ( v ) => true ) )
93
+ } )
94
+
95
+ test ( 'every first in time' , async ( ) => {
96
+ const ds = [ ...range ( 3 ) ] . map ( ( ) => new Deferred ( ) )
97
+ const p = every ( range ( 3 ) , async ( v , i ) => {
98
+ await ds [ i ]
99
+ return false
100
+ } , 3 )
101
+ ds [ 2 ] . resolve ( )
102
+ const res = await p
103
+ expect ( res ) . toBe ( false )
104
+ } )
105
+
106
+ test ( 'every error' , async ( ) => {
107
+ const callList = [ ...range ( 3 ) ] . map ( ( ) => 0 )
108
+ const p = every ( [ ...range ( 3 ) ] , async ( v , i ) => {
109
+ callList [ i ] += 1
110
+ if ( i === 1 ) {
111
+ throw new TestError ( )
112
+ }
113
+ return true
114
+ } , 1 )
115
+ try {
116
+ await p
117
+ expect ( true ) . toStrictEqual ( false )
118
+ } catch ( e ) {
119
+ expect ( e ) . toBeInstanceOf ( TestError )
120
+ }
121
+ await delay ( )
122
+ expect ( callList [ 0 ] ) . toStrictEqual ( 1 )
123
+ expect ( callList [ 1 ] ) . toStrictEqual ( 1 )
124
+ expect ( callList [ 2 ] ) . toStrictEqual ( 0 )
125
+ } )
126
+
127
+ test ( 'every infinite concurrency all pass' , async ( ) => {
12
128
const callCount = { }
13
129
; [ ...range ( 3 ) ] . forEach ( ( i ) => { callCount [ i ] = 0 } )
14
130
const d = new Deferred ( )
@@ -18,7 +134,7 @@ test('every all pass', async () => {
18
134
ds [ i ] . resolve ( )
19
135
await d . promise
20
136
return true
21
- } )
137
+ } , Number . POSITIVE_INFINITY )
22
138
await ds [ 2 ] . promise
23
139
expect ( callCount [ 0 ] ) . toBe ( 1 )
24
140
expect ( callCount [ 1 ] ) . toBe ( 1 )
@@ -31,7 +147,7 @@ test('every all pass', async () => {
31
147
expect ( callCount [ 2 ] ) . toBe ( 1 )
32
148
} )
33
149
34
- test ( 'every no all pass' , async ( ) => {
150
+ test ( 'every infinite concurrency no all pass' , async ( ) => {
35
151
const callCount = { }
36
152
; [ ...range ( 3 ) ] . forEach ( ( i ) => { callCount [ i ] = 0 } )
37
153
const d = new Deferred ( )
@@ -45,7 +161,7 @@ test('every no all pass', async () => {
45
161
} else {
46
162
return true
47
163
}
48
- } )
164
+ } , Number . POSITIVE_INFINITY )
49
165
await ds [ 2 ] . promise
50
166
expect ( callCount [ 0 ] ) . toBe ( 1 )
51
167
expect ( callCount [ 1 ] ) . toBe ( 1 )
@@ -58,19 +174,90 @@ test('every no all pass', async () => {
58
174
expect ( callCount [ 2 ] ) . toBe ( 1 )
59
175
} )
60
176
61
- test ( 'every error' , async ( ) => {
177
+ test ( 'every infinite concurrency error' , async ( ) => {
62
178
const p = every ( [ ...range ( 3 ) ] , async ( v , i ) => {
63
179
if ( i === 1 ) {
64
180
throw new TestError ( )
65
181
}
66
182
return true
183
+ } , Number . POSITIVE_INFINITY )
184
+
185
+ try {
186
+ await p
187
+ expect ( true ) . toStrictEqual ( false )
188
+ } catch ( e ) {
189
+ expect ( e ) . toBeInstanceOf ( TestError )
190
+ }
191
+ await delay ( )
192
+ } )
193
+
194
+ test ( 'every concurrency 1 all pass' , async ( ) => {
195
+ const callCount = { }
196
+ ; [ ...range ( 3 ) ] . forEach ( ( i ) => { callCount [ i ] = 0 } )
197
+ const d = new Deferred ( )
198
+ const ds = [ ...range ( 3 ) ] . map ( ( ) => new Deferred ( ) )
199
+ const p = every ( [ ...range ( 3 ) ] , async ( v , i ) => {
200
+ callCount [ i ] += 1
201
+ ds [ i ] . resolve ( )
202
+ await d . promise
203
+ return true
67
204
} )
205
+ await ds [ 0 ] . promise
206
+ expect ( callCount [ 0 ] ) . toBe ( 1 )
207
+ expect ( callCount [ 1 ] ) . toBe ( 0 )
208
+ expect ( callCount [ 2 ] ) . toBe ( 0 )
209
+ d . resolve ( )
210
+ const res = await p
211
+ expect ( res ) . toBe ( true )
212
+ expect ( callCount [ 0 ] ) . toBe ( 1 )
213
+ expect ( callCount [ 1 ] ) . toBe ( 1 )
214
+ expect ( callCount [ 2 ] ) . toBe ( 1 )
215
+ } )
68
216
217
+ test ( 'every concurrency 1 no all pass' , async ( ) => {
218
+ const callCount = { }
219
+ ; [ ...range ( 3 ) ] . forEach ( ( i ) => { callCount [ i ] = 0 } )
220
+ const d = new Deferred ( )
221
+ const ds = [ ...range ( 3 ) ] . map ( ( ) => new Deferred ( ) )
222
+ const p = every ( [ ...range ( 3 ) ] , async ( v , i ) => {
223
+ callCount [ i ] += 1
224
+ ds [ i ] . resolve ( )
225
+ await d . promise
226
+ if ( i === 1 ) {
227
+ return false
228
+ } else {
229
+ return true
230
+ }
231
+ } )
232
+ await ds [ 0 ] . promise
233
+ expect ( callCount [ 0 ] ) . toBe ( 1 )
234
+ expect ( callCount [ 1 ] ) . toBe ( 0 )
235
+ expect ( callCount [ 2 ] ) . toBe ( 0 )
236
+ d . resolve ( )
237
+ const res = await p
238
+ expect ( res ) . toBe ( false )
239
+ expect ( callCount [ 0 ] ) . toBe ( 1 )
240
+ expect ( callCount [ 1 ] ) . toBe ( 1 )
241
+ expect ( callCount [ 2 ] ) . toBe ( 0 )
242
+ } )
243
+
244
+ test ( 'every concurrency 1 error' , async ( ) => {
245
+ const callList = [ ...range ( 3 ) ] . map ( ( ) => 0 )
246
+ const p = every ( [ ...range ( 3 ) ] , async ( v , i ) => {
247
+ callList [ i ] += 1
248
+ if ( i === 1 ) {
249
+ throw new TestError ( )
250
+ }
251
+ return true
252
+ } )
69
253
try {
70
254
await p
71
255
expect ( true ) . toStrictEqual ( false )
72
256
} catch ( e ) {
73
257
expect ( e ) . toBeInstanceOf ( TestError )
74
258
}
75
259
await delay ( )
260
+ expect ( callList [ 0 ] ) . toStrictEqual ( 1 )
261
+ expect ( callList [ 1 ] ) . toStrictEqual ( 1 )
262
+ expect ( callList [ 2 ] ) . toStrictEqual ( 0 )
76
263
} )
0 commit comments