def test_zio_catch_1() -> None: x: Optional[int] = None def _impure_function() -> int: nonlocal x x = 100 return 42 program = ZIO.effect(_impure_function).catch(NotBippy) assert x is None assert program._run(()) == Right(42) assert x == 100
def test_zio_effect_success() -> None: x: Optional[int] = None def _impure_function() -> None: nonlocal x x = 42 program = ZIO.effect(_impure_function) assert x is None program._run(()) assert x == 42
def test_zio_effect_failure() -> None: def _impure_function() -> None: raise Bippy program = ZIO.effect(_impure_function) assert program._run(()) == Left(Bippy())
def test_zio_catch_2() -> None: def _impure_function() -> int: raise Bippy program = ZIO.effect(_impure_function).catch(Bippy) assert program._run(()) == Left(Bippy())
def test_environment_2() -> None: 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()))),
def _q5(do: ZIOMonad[object, Exception]) -> ZIO[object, Exception, int]: do << ZIO.effect(lambda: _raise(Bippy())) # type: ignore return ZIO.succeed(42)
def _q4(do: ZIOMonad[object, Exception]) -> ZIO[object, Exception, int]: result = do << ZIO.effect(lambda: 42) return ZIO.succeed(result)
@monadic def _q3(do: ZIOMonad[object, Bippy]) -> ZIO[object, Bippy, int]: do << ZIO.fail(Bippy()) return ZIO.succeed(42) EQ3: Final = Equiv(ZIO.fail(Bippy()), _q3(), (), Left(Bippy())) @monadic def _q4(do: ZIOMonad[object, Exception]) -> ZIO[object, Exception, int]: result = do << ZIO.effect(lambda: 42) return ZIO.succeed(result) EQ4: Final = Equiv(ZIO.effect(lambda: 42), _q4(), (), Right(42)) @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)