Ejemplo n.º 1
0
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())
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
                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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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