@@ -73,19 +73,37 @@ public class DelayedEnqueuer
73
73
public SharedQueue m_q ;
74
74
public int m_delayMs ;
75
75
public object m_v ;
76
- public void Run ( )
76
+ public DelayedEnqueuer ( SharedQueue q , int delayMs , object v ) {
77
+ m_q = q ;
78
+ m_delayMs = delayMs ;
79
+ m_v = v ;
80
+ }
81
+ public void EnqueueValue ( )
77
82
{
78
83
Thread . Sleep ( m_delayMs ) ;
79
84
m_q . Enqueue ( m_v ) ;
80
85
}
86
+ public void Dequeue ( )
87
+ {
88
+ m_q . Dequeue ( ) ;
89
+ }
90
+ public void DequeueNoWaitZero ( )
91
+ {
92
+ m_q . DequeueNoWait ( 0 ) ;
93
+ }
94
+ public void DequeueAfterOneIntoV ( )
95
+ {
96
+ m_q . Dequeue ( 1 , out m_v ) ;
97
+ }
98
+ public void BackgroundEofExpectingDequeue ( )
99
+ {
100
+ ExpectEof ( new Thunk ( this . Dequeue ) ) ;
101
+ }
81
102
}
82
103
83
104
public static void EnqueueAfter ( int delayMs , SharedQueue q , object v ) {
84
- DelayedEnqueuer de = new DelayedEnqueuer ( ) ;
85
- de . m_q = q ;
86
- de . m_delayMs = delayMs ;
87
- de . m_v = v ;
88
- new Thread ( new ThreadStart ( de . Run ) ) . Start ( ) ;
105
+ DelayedEnqueuer de = new DelayedEnqueuer ( q , delayMs , v ) ;
106
+ new Thread ( new ThreadStart ( de . EnqueueValue ) ) . Start ( ) ;
89
107
}
90
108
91
109
public static void ExpectEof ( Thunk thunk ) {
@@ -261,13 +279,12 @@ public void TestDoublePoll() {
261
279
262
280
[ Test ]
263
281
public void TestCloseWhenEmpty ( ) {
264
- SharedQueue q = new SharedQueue ( ) ;
265
- object v ;
266
- q . Close ( ) ;
267
- ExpectEof ( delegate ( ) { q . Enqueue ( 1 ) ; } ) ;
268
- ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
269
- ExpectEof ( delegate ( ) { q . DequeueNoWait ( 0 ) ; } ) ;
270
- ExpectEof ( delegate ( ) { q . Dequeue ( 1 , out v ) ; } ) ;
282
+ DelayedEnqueuer de = new DelayedEnqueuer ( new SharedQueue ( ) , 0 , 1 ) ;
283
+ de . m_q . Close ( ) ;
284
+ ExpectEof ( new Thunk ( de . EnqueueValue ) ) ;
285
+ ExpectEof ( new Thunk ( de . Dequeue ) ) ;
286
+ ExpectEof ( new Thunk ( de . DequeueNoWaitZero ) ) ;
287
+ ExpectEof ( new Thunk ( de . DequeueAfterOneIntoV ) ) ;
271
288
}
272
289
273
290
[ Test ]
@@ -278,21 +295,22 @@ public void TestCloseWhenFull() {
278
295
q . Enqueue ( 2 ) ;
279
296
q . Enqueue ( 3 ) ;
280
297
q . Close ( ) ;
281
- ExpectEof ( delegate ( ) { q . Enqueue ( 4 ) ; } ) ;
298
+ DelayedEnqueuer de = new DelayedEnqueuer ( q , 0 , 4 ) ;
299
+ ExpectEof ( new Thunk ( de . EnqueueValue ) ) ;
282
300
Assert . AreEqual ( 1 , q . Dequeue ( ) ) ;
283
301
Assert . AreEqual ( 2 , q . DequeueNoWait ( 0 ) ) ;
284
302
bool r = q . Dequeue ( 1 , out v ) ;
285
303
Assert . IsTrue ( r ) ;
286
304
Assert . AreEqual ( 3 , v ) ;
287
- ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
305
+ ExpectEof ( new Thunk ( de . Dequeue ) ) ;
288
306
}
289
307
290
308
[ Test ]
291
309
public void TestCloseWhenWaiting ( ) {
292
310
SharedQueue q = new SharedQueue ( ) ;
293
- Thread t = new Thread ( delegate ( ) {
294
- ExpectEof ( delegate ( ) { q . Dequeue ( ) ; } ) ;
295
- } ) ;
311
+ DelayedEnqueuer de = new DelayedEnqueuer ( q , 0 , null ) ;
312
+ Thread t =
313
+ new Thread ( new ThreadStart ( de . BackgroundEofExpectingDequeue ) ) ;
296
314
t . Start ( ) ;
297
315
Thread . Sleep ( 10 ) ;
298
316
q . Close ( ) ;
0 commit comments