text: import time
  
  import vanilla
  import vanilla.core
  
  
  def test_lazy():
      class C(object):
          @vanilla.core.lazy
          def now(self):
              return time.time()
  
      c = C()
      want = c.now
      time.sleep(0.01)
      assert c.now == want
  
  
  def test_Scheduler():
      s = vanilla.core.Scheduler()
      s.add(4, 'f2')
      s.add(9, 'f4')
      s.add(3, 'f1')
      item3 = s.add(7, 'f3')
  
      assert 0.003 - s.timeout() < 0.001
      assert len(s) == 4
  
      s.remove(item3)
      assert 0.003 - s.timeout() < 0.001
      assert len(s) == 3
  
      assert s.pop() == ('f1', ())
      assert 0.004 - s.timeout() < 0.001
      assert len(s) == 2
  
      assert s.pop() == ('f2', ())
      assert 0.009 - s.timeout() < 0.001
      assert len(s) == 1
  
      assert s.pop() == ('f4', ())
      assert not s
  
  
  class TestHub(object):
      def test_spawn(self):
          h = vanilla.Hub()
          a = []
  
          h.spawn_later(10, lambda: a.append(1))
          h.spawn(lambda: a.append(2))
  
          h.sleep(1)
          assert a == [2]
  
          h.sleep(10)
          assert a == [2, 1]
  
      def test_exception(self):
          h = vanilla.Hub()
  
          def raiser():
              raise Exception()
          h.spawn(raiser)
          h.sleep(1)
  
          a = []
          h.spawn(lambda: a.append(2))
          h.sleep(1)
          assert a == [2]
  
      def test_stop(self):
          h = vanilla.Hub()
  
          @h.spawn
          def _():
              h.sleep(20)
  
          h.stop()
  