diff --git a/apps/antidote_crdt/src/antidote_crdt_map_go.erl b/apps/antidote_crdt/src/antidote_crdt_map_go.erl index bec421df..a02a02de 100644 --- a/apps/antidote_crdt/src/antidote_crdt_map_go.erl +++ b/apps/antidote_crdt/src/antidote_crdt_map_go.erl @@ -176,6 +176,14 @@ update2_test() -> Map1 = new(), {ok, Effect1} = downstream({update, [{{a, antidote_crdt_set_aw}, {add, a}}]}, Map1), {ok, Map2} = update(Effect1, Map1), - ?assertEqual([{{a, antidote_crdt_set_aw}, [a]}], value(Map2)). + ?assertEqual([{{a, antidote_crdt_set_aw}, [a]}], value(Map2)), + Op = {update, [ + {{a, antidote_crdt_set_aw}, {remove, a}}, + {{a, antidote_crdt_set_aw}, {add, b}} + ]}, + ?assert(is_operation(Op)), + {ok, Effect2} = downstream(Op, Map2), + {ok, Map3} = update(Effect2, Map2), + ?assertEqual([{{a, antidote_crdt_set_aw}, [b]}], value(Map3)). -endif. diff --git a/apps/antidote_crdt/src/antidote_crdt_map_rr.erl b/apps/antidote_crdt/src/antidote_crdt_map_rr.erl index c27622bb..344cddef 100644 --- a/apps/antidote_crdt/src/antidote_crdt_map_rr.erl +++ b/apps/antidote_crdt/src/antidote_crdt_map_rr.erl @@ -384,6 +384,17 @@ upd(Update, State) -> {ok, Res} = update(Downstream, State), Res. +multiple_ops_on_same_key_test() -> + M1 = new(), + M2 = upd({update, {{a, antidote_crdt_set_rw}, {add, <<"a">>}}}, M1), + Op = {update, [ + {{a, antidote_crdt_set_rw}, {remove, <<"a">>}}, + {{a, antidote_crdt_set_rw}, {add, <<"b">>}} + ]}, + ?assert(is_operation(Op)), + M3 = upd(Op, M2), + ?assertEqual([{{a, antidote_crdt_set_rw}, [<<"b">>]}], value(M3)). + remove_test() -> M1 = new(), ?assertEqual([], value(M1)),