def test_parked_closed(self):
     ch = Channel()
     def closing():
         yield sleep(0.005)
         ch.close()
     go(closing)
     self.assertEqual((yield put(ch, 42)), False)
 def test_parked_taken(self):
     ch = Channel()
     def taking():
         yield sleep(0.005)
         yield take(ch)
     go(taking)
     self.assertEqual((yield put(ch, 42)), True)
 def test_parked_closed(self):
     ch = Channel()
     def closing():
         yield sleep(0.005)
         ch.close()
     go(closing)
     self.assertEqual((yield take(ch)), CLOSED)
 def test_parked_put(self):
     ch = Channel()
     def putting():
         yield sleep(0.005)
         yield put(ch, 42)
     go(putting)
     self.assertEqual((yield take(ch)), 42)
 def taken(value):
     def checking():
         # yield control so that the second put can proceed
         # XXX: @inlineCallbacks seems to resume the generator
         # in the same tick if the result is immediately
         # available (not a deferred, or an already resolved
         # deferred), so we need to force next tick by "sleep".
         # I think this is bad behavior from @inlineCallbacks.
         yield sleep(0)
         self.assertEqual(var["count"], 2, "second (buffered) put succeeds")
         d.callback(CLOSED)
     go(checking)
 def test_immediate_put(self):
     ch = Channel()
     def putting():
         yield put(ch, 42)
     go(putting)
     self.assertEqual((yield take(ch)), 42)
 def test_immediate_taken(self):
     ch = Channel()
     def taking():
         yield take(ch)
     go(taking)
     self.assertEqual((yield put(ch, 42)), True)