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_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_triple_zip_latest(): from streamz.core import Stream s1 = Stream() s2 = Stream() s3 = Stream() s_simple = s1.zip_latest(s2, s3) L_simple = s_simple.sink_to_list() s1.emit(1) s2.emit('I') s2.emit("II") s1.emit(2) s2.emit("III") s3.emit('a') s3.emit('b') s1.emit(3) assert L_simple == [(1, 'III', 'a'), (2, 'III', 'a'), (3, 'III', 'b')]
def test_zip_latest(): a = Stream() b = Stream() c = a.zip_latest(b) d = a.combine_latest(b, emit_on=a) L = c.sink_to_list() L2 = d.sink_to_list() a.emit(1) a.emit(2) b.emit('a') b.emit('b') a.emit(3) assert L == [(1, 'a'), (2, 'a'), (3, 'b')] assert L2 == [(3, 'b')]
def test_zip_latest_metadata(): a = Stream() b = Stream() L = metadata(a.zip_latest(b)).sink_to_list() a.emit(1, metadata=[{'v': 1}]) b.emit(2, metadata=[{'v': 2}]) a.emit(3) b.emit(4, metadata=[{'v': 4}]) assert L == [ [{ 'v': 1 }, { 'v': 2 }], # the first emit when 2 is introduced [{ 'v': 2 }] # 3 has no metadata ]