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']]