def test_map_map(xs: Dict[str, int]): items = FrozenList(xs.items()) mapper: Callable[[str, int], int] = lambda k, v: v * 20 ys = map.of_frozenlist(items).map(mapper) expected = [(k, mapper(k, v)) for k, v in sorted(list(items))] assert expected == list(ys.to_list())
def test_list_unfold(x: int): def unfolder(state: int) -> Option[Tuple[int, int]]: if state < x: return Some((state, state + 1)) return Nothing result = FrozenList.unfold(unfolder, 0) assert list(result) == list(range(x))
async def update(msg: Msg[TSource], model: Model[TSource]) -> Model[TSource]: # log.debug("update: %s, model: %s", msg, model) with match(msg) as case: for xs in case(InnerObservableMsg[TSource]): if max_concurrent == 0 or len( model.subscriptions) < max_concurrent: inner = await xs.subscribe_async(obv(model.key) ) return model.replace( subscriptions=model.subscriptions.add( model.key, inner), key=Key(model.key + 1), ) lst = FrozenList.singleton(xs) return model.replace(queue=model.queue.append(lst)) for key in case(InnerCompletedMsg[Key]): subscriptions = model.subscriptions.remove(key) if len(model.queue): xs = model.queue[0] inner = await xs.subscribe_async(obv(model.key) ) return model.replace( subscriptions=subscriptions.add( model.key, inner), key=model.key + 1, queue=model.queue.tail(), ) elif len(subscriptions): return model.replace( subscriptions=subscriptions) else: if model.is_stopped: await safe_obv.aclose() return model.replace(subscriptions=map.empty) while case(CompletedMsg): if not model.subscriptions: log.debug("merge_inner: closing!") await safe_obv.aclose() return model.replace(is_stopped=True) while case.default(): for dispose in model.subscriptions.values(): await dispose.dispose_async() return initial_model.replace(is_stopped=True)
def test_map_to_list(xs: Dict[str, int]): items = FrozenList(xs.items()) ys = map.of_list(items).to_seq() assert sorted(list(items)) == list(ys)
def test_match_destructure() -> None: xs: FrozenList[int] = FrozenList.empty().cons(42) with match(xs) as case: for (head, *_) in case(FrozenList[int]): assert head == 42