def test_filter_none(): source = Stream() L = source.filter(None).sink_to_list() for i in range(10): source.emit(i % 3) assert L == [1, 2, 1, 2, 1, 2]
def test_filter(): source = Stream() L = source.filter(lambda x: x % 2 == 0).sink_to_list() for i in range(10): source.emit(i) assert L == [0, 2, 4, 6, 8]
def test_partition(): source = Stream() L = source.partition(2).sink_to_list() for i in range(10): source.emit(i) assert L == [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
def test_remove(): source = Stream() L = source.remove(lambda x: x % 2 == 0).sink_to_list() for i in range(10): source.emit(i) assert L == [1, 3, 5, 7, 9]
def test_separate_thread_without_time(loop, thread): assert thread.is_alive() source = Stream(loop=loop) L = source.map(inc).sink_to_list() for i in range(10): source.emit(i) assert L[-1] == i + 1
def test_zip_same(): a = Stream() b = a.zip(a) L = b.sink_to_list() a.emit(1) a.emit(2) assert L == [(1, 1), (2, 2)]
def test_sliding_window(): source = Stream() L = source.sliding_window(2).sink_to_list() for i in range(10): source.emit(i) assert L == [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
def test_frequencies(): source = Stream() L = source.frequencies().sink_to_list() source.emit('a') source.emit('b') source.emit('a') assert L[-1] == {'a': 2, 'b': 1}
def test_unique(): source = Stream() L = source.unique().sink_to_list() source.emit(1) source.emit(2) source.emit(1) assert L == [1, 2]
def test_map(): def add(x=0, y=0): return x + y source = Stream() L = source.map(add, y=10).sink_to_list() source.emit(1) assert L[0] == 11
def test_partition_timeout(): source = Stream() L = source.partition(10, timeout=0.01).sink_to_list() for i in range(5): source.emit(i) sleep(0.1) assert L == [(0, 1, 2, 3, 4)]
def test_starmap(): def add(x=0, y=0): return x + y source = Stream() L = source.starmap(add).sink_to_list() source.emit((1, 10)) assert L[0] == 11
def test_sink_to_file(): with tmpfile() as fn: source = Stream() with sink_to_file(fn, source) as f: source.emit('a') source.emit('b') with open(fn) as f: data = f.read() assert data == 'a\nb\n'
def test_partition_ref_counts(): source = Stream() _ = source.partition(2) for i in range(10): r = RefCounter() source.emit(i, metadata=[{'ref': r}]) if i % 2 == 0: assert r.count == 1 else: assert r.count == 0
def test_latest_ref_counts(): source = Stream() _ = source.latest() ref1 = RefCounter() source.emit(1, metadata=[{'ref': ref1}]) assert ref1.count == 1 ref2 = RefCounter() source.emit(2, metadata=[{'ref': ref2}]) assert ref1.count == 0 assert ref2.count == 1
def test_kwargs(): source = Stream() def f(acc, x, y=None): acc = acc + x + y return acc L = source.scan(f, y=10).sink_to_list() for i in range(3): source.emit(i) assert L == [0, 11, 23]
def test_scan(): source = Stream() def f(acc, i): acc = acc + i return acc, acc L = source.scan(f, returns_state=True).sink_to_list() for i in range(3): source.emit(i) assert L == [0, 1, 3]
def test_buffer_ref_counts(): source = Stream(asynchronous=True) _ = source.buffer(5) refs = [] for i in range(5): r = RefCounter() refs.append(r) source.emit(i, metadata=[{'ref': r}]) assert all(r.count == 1 for r in refs) yield gen.sleep(0.05) assert all(r.count == 0 for r in refs)
def test_destroy(): source = Stream() s = source.map(inc) L = s.sink_to_list() source.emit(1) assert L == [2] s.destroy() assert not list(source.parents) assert not s.children source.emit(2) assert L == [2]
def test_zip_latest_ref_counts(): a = Stream() b = Stream() _ = a.zip_latest(b) ref1 = RefCounter() a.emit(1, metadata=[{'ref': ref1}]) assert ref1.count == 1 # Retained until stream b has a value # The lossless stream is never retained if all upstreams have a value ref2 = RefCounter() b.emit(2, metadata=[{'ref': ref2}]) assert ref1.count == 0 assert ref2.count == 1 # Kick out the stream b value and verify it has zero references ref3 = RefCounter() b.emit(3, metadata=[{'ref': ref3}]) assert ref2.count == 0 assert ref3.count == 1 # Verify the lossless value is not retained, but the lossy value is ref4 = RefCounter() a.emit(3, metadata=[{'ref': ref4}]) assert ref3.count == 1 assert ref4.count == 0
def test_destroy(): source = Stream() s = source.map(inc) L = s.sink_to_list() source.emit(1) assert L == [2] s.destroy() assert not list(source.downstreams) assert not s.upstreams source.emit(2) assert L == [2]
def test_timed_window_ref_counts(): source = Stream(asynchronous=True) _ = source.timed_window(0.01) ref1 = RefCounter() assert str(ref1) == "<RefCounter count=0>" source.emit(1, metadata=[{'ref': ref1}]) assert ref1.count == 1 yield gen.sleep(0.05) ref2 = RefCounter() source.emit(2, metadata=[{'ref': ref2}]) assert ref1.count == 0 assert ref2.count == 1
def test_collect_ref_counts(): source = Stream() collector = source.collect() refs = [] for i in range(10): r = RefCounter() refs.append(r) source.emit(i, metadata=[{'ref': r}]) assert all(r.count == 1 for r in refs) collector.flush() assert all(r.count == 0 for r in refs)
def test_sink_with_args_and_kwargs(): L = dict() def mycustomsink(elem, key, prefix=""): key = prefix + key if key not in L: L[key] = list() L[key].append(elem) s = Stream() s2 = s.sink(mycustomsink, "cat", "super") s.emit(1) s.emit(2) assert L['supercat'] == [1, 2]
def test_combine_latest_emit_on_stream(): a = Stream() b = Stream() c = a.combine_latest(b, emit_on=0) L = c.sink_to_list() a.emit(1) b.emit('a') a.emit(2) a.emit(3) b.emit('b') a.emit(4) assert L == [(2, 'a'), (3, 'a'), (4, 'b')]
def test_basic(): source = Stream() b1 = source.map(inc) b2 = source.map(double) c = b1.scan(add) Lc = c.sink_to_list() Lb = b2.sink_to_list() for i in range(4): source.emit(i) assert Lc == [1, 3, 6, 10] assert Lb == [0, 2, 4, 6]
def test_zip_latest_reverse(): a = Stream() b = Stream() c = a.zip_latest(b) L = c.sink_to_list() b.emit('a') a.emit(1) a.emit(2) a.emit(3) b.emit('b') a.emit(4) assert L == [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'b')]
def test_partition_timeout_cancel(): source = Stream() L = source.partition(3, timeout=0.1).sink_to_list() for i in range(3): source.emit(i) sleep(0.09) source.emit(3) sleep(0.02) assert L == [(0, 1, 2)] sleep(0.09) assert L == [(0, 1, 2), (3, )]
def test_separate_thread_with_time(clean): # noqa: F811 L = [] @gen.coroutine def slow_write(x): yield gen.sleep(0.1) L.append(x) source = Stream(asynchronous=False) source.map(inc).sink(slow_write) start = time() source.emit(1) stop = time() assert stop - start > 0.1 assert L == [2]
def test_separate_thread_with_time(loop, thread): L = [] @gen.coroutine def slow_write(x): yield gen.sleep(0.1) L.append(x) source = Stream(loop=loop) source.map(inc).sink(slow_write) start = time() source.emit(1) stop = time() assert stop - start > 0.1 assert L == [2]