Exemplo n.º 1
0
def test_state_context():
    from block.chain import StateF
    from block.chain import inc, put

    ctx = StateF()
    assert chain.chain.value(ctx, ctx.unit(10))(0) == (0, 10)
    assert chain.chain.do(inc).do(inc).value(ctx, ctx.unit(10))(0) == (2, 10)
    assert chain.chain.do(inc).do(inc).do(put(100)).do(inc).do(inc).value(ctx, ctx.unit(10))(0) == (102, 10)
    assert chain.chain.do(inc).map(lambda x : x + 10).value(ctx, ctx.unit(10))(0) == (1, 20)


    def twice(ctx, _):
        return lambda s: (s, s*s)
    assert chain.chain.do(chain["x"]).value(ctx, ctx.unit({"x": 100}))(10) == (10, 100)
    assert chain.chain.do(inc).do(chain["x"]).value(ctx, ctx.unit({"x": 100}))(10) == (11, 100)
    assert chain.chain.do(chain["x"]).do(inc).value(ctx, ctx.unit({"x": 100}))(10) == (11, 100)
    assert chain.chain.do(put(10)).do(inc).do(twice).do(twice).do(inc).do(twice).value(ctx, ctx.unit(-1))(0) == (12, 144)
    assert chain.chain.do(chain(lambda x: x+1)).value(ctx, ctx.unit(10))(0) == (0, 11)
    class X:
        def sq(self, x):
            return x * x
    assert  chain.chain.do(chain.sq(10)).value(ctx, ctx.unit(X()))(10) == (10, 100)
Exemplo n.º 2
0
def test_map():
    from block.chain import (
        ListF,
        ErrorF,
        MaybeF,
        StateF,
        Nothing,
        Failure
        )
    assert chain.chain.map(lambda x : x+1).value(MaybeF(),Nothing) == Nothing
    assert chain.chain.map(lambda x : x+1).value(MaybeF(), 10) == 11
    assert chain.chain.map(lambda x,y : x+y ,12).value(MaybeF(), 10) == 22
    assert chain.chain.map(lambda x,y : x+y ,Nothing).value(MaybeF(), 10) == Nothing
    assert chain.chain.map(lambda x,y,z : [x,y,z] ,12, 13).value(MaybeF(), 11) == [11,12,13]
    assert chain.chain.map(lambda x,y,z : [x,y,z] ,Nothing, 12).value(MaybeF(), 11) == Nothing

    assert repr(chain.chain.map(lambda x : x+1).value(ErrorF(), Failure(10))) == "'Failure':[10]"
    assert chain.chain.map(lambda x : x+1).value(ErrorF(), 10) == 11
    assert chain.chain.map(lambda x,y : x+y ,12).value(ErrorF(), 10) == 22
    assert repr(chain.chain.map(lambda x,y : x+y ,Failure(11)).value(ErrorF(), 10)) == "'Failure':[11]"
    assert chain.chain.map(lambda x,y,z : [x,y,z] ,12, 13).value(ErrorF(), 11) == [11,12,13]
    assert repr(chain.chain.map(lambda x,y,z : [x,y,z] ,Failure(11), 12).value(ErrorF(), 11)) ==  "'Failure':[11]"
    ctx = StateF()
    assert chain.chain.map(lambda x : x+1).value(ctx, ctx.unit(10))(0) == (0,11)
    assert chain.chain.map(lambda x,y : x+y ,ctx.unit(12)).value(ctx, ctx.unit(10))(0) == (0, 22)
    assert chain.chain.map(lambda x,y : x+y, ctx.put(ctx.unit(12), 20)).value(ctx, ctx.unit(10))(0) == (20, 22)
    assert chain.chain.map(lambda x,y : x+y, ctx.chain(ctx.unit(12)).put(20).value()).value(ctx, ctx.unit(10))(0) == (20, 22)
    assert chain.chain.map(lambda x,y,z : [x,y,z], ctx.unit(12), ctx.chain(ctx.unit(13)).put(20).value()).value(ctx, ctx.unit(11))(0) == (20,  [11, 12, 13])

    ctx = ListF()
    assert chain.chain.map(lambda x : x+1).value(ctx, [10,20,30]) == [11,21,31]
    assert chain.chain.map(lambda x,y : x+y, [7,8,9]).value(ctx, [10,20,30]) == [17, 18, 19, 27, 28, 29, 37, 38, 39]
    assert chain.chain.map(lambda x,y,z : [x,y,z], [7,8,9], ["a", "b"]).value(ctx, [10,20,30]) == [[10, 7, 'a'], [10, 7, 'b'], [10, 8, 'a'], [10, 8, 'b'], [10, 9, 'a'], [10, 9, 'b'], [20, 7, 'a'], [20, 7, 'b'], [20, 8, 'a'], [20, 8, 'b'], [20, 9, 'a'], [20, 9, 'b'], [30, 7, 'a'], [30, 7, 'b'], [30, 8, 'a'], [30, 8, 'b'], [30, 9, 'a'], [30, 9, 'b']]