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(())
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))
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
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())
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)),
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)
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)
@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())