Exemple #1
0
def test_zio_effect_catch_3() -> None:
    def _impure_function() -> None:
        raise Bippy

    program = ZIO.effect_catch(_impure_function, NotBippy)
    with pytest.raises(Bippy):
        program._run(())
Exemple #2
0
 def input(
     self,
     prompt: Optional[str] = None
 ) -> ZIO[object, Union[EOFError, KeyboardInterrupt], str]:
     return (ZIO.effect_catch(
         lambda: builtins.input(prompt)
         if prompt is not None else builtins.input(),
         EOFError).catch(KeyboardInterrupt))
Exemple #3
0
def test_zio_effect_catch_1() -> None:
    x: Optional[int] = None

    def _impure_function() -> int:
        nonlocal x
        x = 100
        return 42

    program = ZIO.effect_catch(_impure_function, Bippy)
    assert x is None
    assert program._run(()) == Right(42)
    assert x == 100
Exemple #4
0
def test_zio_effect_catch_2() -> None:
    def _impure_function() -> None:
        raise Bippy

    program = ZIO.effect_catch(_impure_function, Bippy)
    assert program._run(()) == Left(Bippy())
Exemple #5
0
    assert Environment[int]().provide(42)._run(()) == Right(42)


def test_environment_3() -> None:
    assert Environment[int]().provide(42).provide("asdf")._run(()) == Right(42)


@pytest.mark.parametrize(
    "program,environment,expected_result",
    [
        (ZIO.succeed(42), None, Right(42)),
        (ZIO.fail(Bippy()), None, Left(Bippy)),
        (ZIO.effect(lambda: 42), None, Right(42)),
        (ZIO.effect(lambda: _raise(Bippy())), None,
         Left(Bippy)),  # type: ignore
        (ZIO.effect_catch(lambda: 42, Bippy), None, Right(42)),
        (ZIO.effect_catch(lambda: _raise(Bippy()),
                          Bippy), None, Left(Bippy)),  # type: ignore
        (ZIO.effect_catch(lambda: _raise(Bippy()),
                          NotBippy), None, Left(Bippy)),  # type: ignore
        (ZIO.succeed(42).catch(Bippy), None, Right(42)),
        (ZIO.access(len), "hello", Right(5)),
        (ZIO.access_m(lambda s: ZIO.succeed(len(s))), "hello",
         Right(5)),  # type: ignore
        (ZIO.access_m(lambda s: ZIO.fail(Bippy())), "hello",
         Left(Bippy)),  # type: ignore
        (ZIO.effect_total(lambda: 42), None, Right(42)),
        (ZIO.fail(Bippy()).catch(Bippy).either(), None, Right(Left(Bippy()))),
        (ZIO.succeed("Yay").catch(Bippy).either(), None, Right(Right("Yay"))),
        (ZIO.succeed(1).map(lambda x: x + 1).map(lambda x: x + 10), None,
         Right(12)),
Exemple #6
0
def _q6(do: ZIOMonad[object, Bippy]) -> ZIO[object, Bippy, int]:
    result = do << ZIO.effect_catch(lambda: _raise(Bippy()), Bippy)  # type: ignore
    return ZIO.succeed(result)
Exemple #7
0
def _q7(do: ZIOMonad[object, NotBippy]) -> ZIO[object, NotBippy, int]:
    result: int = do << (
        ZIO.effect_catch(lambda: _raise(Bippy()), NotBippy).catch(Bippy)  # type: ignore
    )
    return ZIO.succeed(result)
Exemple #8
0
@monadic
def _q5(do: ZIOMonad[object, Exception]) -> ZIO[object, Exception, int]:
    do << ZIO.effect(lambda: _raise(Bippy()))  # type: ignore
    return ZIO.succeed(42)


EQ5: Final = Equiv(ZIO.effect(lambda: _raise(Bippy())), _q5(), (), Left(Bippy()))


@monadic
def _q6(do: ZIOMonad[object, Bippy]) -> ZIO[object, Bippy, int]:
    result = do << ZIO.effect_catch(lambda: _raise(Bippy()), Bippy)  # type: ignore
    return ZIO.succeed(result)


EQ6: Final = Equiv(ZIO.effect_catch(lambda: _raise(Bippy()), Bippy), _q6(), None, Left(Bippy()))


@monadic
def _q7(do: ZIOMonad[object, NotBippy]) -> ZIO[object, NotBippy, int]:
    result: int = do << (
        ZIO.effect_catch(lambda: _raise(Bippy()), NotBippy).catch(Bippy)  # type: ignore
    )
    return ZIO.succeed(result)


EQ7: Final = Equiv(
    ZIO.effect_catch(lambda: _raise(Bippy()), NotBippy).catch(Bippy),  # type: ignore
    _q7(),
    None,
    Left(Bippy())