def test_mergemap(self): marbles = ['A B C D', '_1 2 3 4', '__K L M N'] event = Event.range(3) \ .mergemap(lambda v: Event.marble(marbles[v])) self.assertEqual( event.run(), ['A', '1', 'K', 'B', '2', 'L', '3', 'C', 'M', '4', 'D', 'N'])
def test_switchmap(self): marbles = [ 'A B C D ', '_ K L M N', '__ 1 2 3 4' ] event = Event.range(3) \ .switchmap(lambda v: Event.marble(marbles[v])) self.assertEqual(event.run(), ['A', 'B', '1', '2', 'K', 'L', 'M', 'N'])
def test_async_map_unordered(self): class A(): def __init__(self): self.t = 0.1 async def coro(self, x): self.t -= 0.01 await asyncio.sleep(self.t) return x * x a = A() event = Event.range(10).map(a.coro, ordered=False) self.assertEqual(event.run(), [i * i for i in reversed(range(10))])
def test_debounce_on_first(self): event = Event.range(10, interval=0.05) \ .mergemap(lambda t: Event.sequence(array2, 0.001)) \ .debounce(0.02, on_first=True) self.assertEqual(event.run(), [100] * 10)
def test_sample(self): timer = Event.timer(0.021, 4) event = Event.range(10, interval=0.01).sample(timer) self.assertEqual(event.run(), [2, 4, 6, 8])
def test_fork(self): event = Event.range(4, 10)[ev.Min, ev.Max, ev.Op().sum()].zip() self.assertEqual(event.run(), [ (4, 4, 4), (4, 5, 9), (4, 6, 15), (4, 7, 22), (4, 8, 30), (4, 9, 39)])
def test_mergemap2(self): a = ['ABC', 'UVW', 'XYZ'] event = Event.range(3, interval=0.01) \ .mergemap(lambda v: Event.sequence(a[v], 0.05 * v)) self.assertEqual(event.run(), ['A', 'B', 'C', 'U', 'X', 'V', 'W', 'Y', 'Z'])