public Logic(PostStopFailer <T> stage) : base(stage.Shape)
                {
                    _stage = stage;

                    SetHandler(stage.Outlet, () => Pull(stage.Inlet));
                    SetHandler(stage.Inlet, () => Push(stage.Outlet, Grab(stage.Inlet)));
                }
        public void Interpreter_must_not_blow_up_when_PostStop_fails()
        {
            var op = new PostStopFailer <string>(() =>
            {
                throw new TestException("Boom!");
            });

            WithOneBoundedSetup(op, (lastEvents, upstream, downstream) =>
            {
                upstream.OnComplete();
                lastEvents().Should().Equal(new OnComplete());
            });
        }
        public void Interpreter_must_continue_wit_stream_shutdown_when_PostStop_fails()
        {
            var op = new PostStopFailer <string>(() =>
            {
                throw new TestException("Boom!");
            });

            WithOneBoundedSetup(op, (lastEvents, upstream, downstream) =>
            {
                lastEvents().Should().BeEmpty();

                upstream.OnComplete();
                lastEvents().Should().Equal(new OnComplete());
            });
        }