From 13b32b736c10b3a59be330c74d71be6e6aaaac2c Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Sat, 13 Jun 2009 13:41:28 -0700 Subject: [PATCH] Rewrote test_multiple_waiters to not also test the order of waiters returning. Added test_ordering_of_waiters that does test waiter ordering. --- greentest/test__coros_queue.py | 36 +++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/greentest/test__coros_queue.py b/greentest/test__coros_queue.py index 77939ac..2d672f2 100644 --- a/greentest/test__coros_queue.py +++ b/greentest/test__coros_queue.py @@ -74,6 +74,7 @@ class TestQueue(LimitedTestCase): self.assertEquals(e1.wait(),'done') def test_multiple_waiters(self): + # tests that multiple waiters get their results back q = coros.queue() def waiter(q, evt): @@ -86,14 +87,39 @@ class TestQueue(LimitedTestCase): api.sleep(0.01) # get 'em all waiting + results = set() + def collect_pending_results(): + for i, e in enumerate(evts): + timer = api.exc_after(0.001, api.TimeoutError) + try: + x = e.wait() + results.add(x) + timer.cancel() + except api.TimeoutError: + pass # no pending result at that event + return len(results) q.send(sendings[0]) - self.assertEquals(sendings[0], evts[0].wait()) + self.assertEquals(collect_pending_results(), 1) q.send(sendings[1]) - self.assertEquals(sendings[1], evts[1].wait()) + self.assertEquals(collect_pending_results(), 2) q.send(sendings[2]) q.send(sendings[3]) - self.assertEquals(sendings[2], evts[2].wait()) - self.assertEquals(sendings[3], evts[3].wait()) + self.assertEquals(collect_pending_results(), 4) + + def test_ordering_of_waiters(self): + # test that waiters receive results in the order that they waited + q = coros.queue() + def waiter(q, evt): + evt.send(q.wait()) + + sendings = list(range(10)) + evts = [coros.event() for x in sendings] + for i, x in enumerate(sendings): + api.spawn(waiter, q, evts[i]) + results = [] + for i, s in enumerate(sendings): + q.send(s) + self.assertEquals(s, evts[i].wait()) def test_waiters_that_cancel(self): q = coros.queue() @@ -175,7 +201,7 @@ class TestQueue(LimitedTestCase): api.sleep(0) self.assertEquals(1, waiting(q)) q.send('hi') - api.sleep(0) # *FIX this should not be necessary + api.sleep(0) # *FIX: should not be necessary self.assertEquals(0, waiting(q)) self.assertEquals('hi', e1.wait()) self.assertEquals(0, waiting(q))