-module(gleam@map_test). -compile(no_auto_import). -export([from_list_test/0, has_key_test/0, new_test/0, get_test/0, insert_test/0, map_values_test/0, keys_test/0, values_test/0, take_test/0, drop_test/0, merge_same_key_test/0, merge_test/0, delete_test/0, update_test/0, fold_test/0]). -spec from_list_test() -> nil. from_list_test() -> _pipe = [{4, 0}, {1, 0}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:size(_pipe@1), gleam@should:equal(_pipe@2, 2), _pipe@3 = [{1, 0}, {1, 1}], _pipe@4 = gleam@map:from_list(_pipe@3), gleam@should:equal(_pipe@4, gleam@map:from_list([{1, 1}])). -spec has_key_test() -> nil. has_key_test() -> _pipe = [], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:has_key(_pipe@1, 1), gleam@should:be_false(_pipe@2), _pipe@3 = [{1, 0}], _pipe@4 = gleam@map:from_list(_pipe@3), _pipe@5 = gleam@map:has_key(_pipe@4, 1), gleam@should:be_true(_pipe@5), _pipe@6 = [{4, 0}, {1, 0}], _pipe@7 = gleam@map:from_list(_pipe@6), _pipe@8 = gleam@map:has_key(_pipe@7, 1), gleam@should:be_true(_pipe@8), _pipe@9 = [{4, 0}, {1, 0}], _pipe@10 = gleam@map:from_list(_pipe@9), _pipe@11 = gleam@map:has_key(_pipe@10, 0), gleam@should:be_false(_pipe@11). -spec new_test() -> nil. new_test() -> _pipe = gleam@map:new(), _pipe@1 = gleam@map:size(_pipe), gleam@should:equal(_pipe@1, 0), _pipe@2 = gleam@map:new(), _pipe@3 = gleam@map:to_list(_pipe@2), gleam@should:equal(_pipe@3, []). -spec get_test() -> nil. get_test() -> Proplist = [{4, 0}, {1, 1}], M = gleam@map:from_list(Proplist), _pipe = M, _pipe@1 = gleam@map:get(_pipe, 4), gleam@should:equal(_pipe@1, {ok, 0}), _pipe@2 = M, _pipe@3 = gleam@map:get(_pipe@2, 1), gleam@should:equal(_pipe@3, {ok, 1}), _pipe@4 = M, _pipe@5 = gleam@map:get(_pipe@4, 2), gleam@should:equal(_pipe@5, {error, nil}). -spec insert_test() -> nil. insert_test() -> _pipe = gleam@map:new(), _pipe@1 = gleam@map:insert(_pipe, <<"a"/utf8>>, 0), _pipe@2 = gleam@map:insert(_pipe@1, <<"b"/utf8>>, 1), _pipe@3 = gleam@map:insert(_pipe@2, <<"c"/utf8>>, 2), gleam@should:equal( _pipe@3, gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}] ) ). -spec map_values_test() -> nil. map_values_test() -> _pipe = [{1, 0}, {2, 1}, {3, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:map_values(_pipe@1, fun(K, V) -> K + V end), gleam@should:equal(_pipe@2, gleam@map:from_list([{1, 1}, {2, 3}, {3, 5}])). -spec keys_test() -> nil. keys_test() -> _pipe = [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:keys(_pipe@1), gleam@should:equal(_pipe@2, [<<"a"/utf8>>, <<"b"/utf8>>, <<"c"/utf8>>]). -spec values_test() -> nil. values_test() -> _pipe = [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:values(_pipe@1), gleam@should:equal(_pipe@2, [0, 1, 2]). -spec take_test() -> nil. take_test() -> _pipe = [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:take( _pipe@1, [<<"a"/utf8>>, <<"b"/utf8>>, <<"d"/utf8>>] ), gleam@should:equal( _pipe@2, gleam@map:from_list([{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}]) ). -spec drop_test() -> nil. drop_test() -> _pipe = [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:drop( _pipe@1, [<<"a"/utf8>>, <<"b"/utf8>>, <<"d"/utf8>>] ), gleam@should:equal(_pipe@2, gleam@map:from_list([{<<"c"/utf8>>, 2}])). -spec merge_same_key_test() -> nil. merge_same_key_test() -> A = gleam@map:from_list([{<<"a"/utf8>>, 2}]), B = gleam@map:from_list([{<<"a"/utf8>>, 0}]), _pipe = gleam@map:merge(A, B), gleam@should:equal(_pipe, gleam@map:from_list([{<<"a"/utf8>>, 0}])), _pipe@1 = gleam@map:merge(B, A), gleam@should:equal(_pipe@1, gleam@map:from_list([{<<"a"/utf8>>, 2}])). -spec merge_test() -> nil. merge_test() -> A = gleam@map:from_list( [{<<"a"/utf8>>, 2}, {<<"c"/utf8>>, 4}, {<<"d"/utf8>>, 3}] ), B = gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}] ), _pipe = gleam@map:merge(A, B), gleam@should:equal( _pipe, gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}, {<<"d"/utf8>>, 3}] ) ), _pipe@1 = gleam@map:merge(B, A), gleam@should:equal( _pipe@1, gleam@map:from_list( [{<<"a"/utf8>>, 2}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 4}, {<<"d"/utf8>>, 3}] ) ). -spec delete_test() -> nil. delete_test() -> _pipe = [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}], _pipe@1 = gleam@map:from_list(_pipe), _pipe@2 = gleam@map:delete(_pipe@1, <<"a"/utf8>>), _pipe@3 = gleam@map:delete(_pipe@2, <<"d"/utf8>>), gleam@should:equal( _pipe@3, gleam@map:from_list([{<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}]) ). -spec update_test() -> nil. update_test() -> Dict = gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}] ), Inc_or_zero = fun(X) -> case X of {some, I} -> I + 1; none -> 0 end end, _pipe = Dict, _pipe@1 = gleam@map:update(_pipe, <<"a"/utf8>>, Inc_or_zero), gleam@should:equal( _pipe@1, gleam@map:from_list( [{<<"a"/utf8>>, 1}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}] ) ), _pipe@2 = Dict, _pipe@3 = gleam@map:update(_pipe@2, <<"b"/utf8>>, Inc_or_zero), gleam@should:equal( _pipe@3, gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 2}, {<<"c"/utf8>>, 2}] ) ), _pipe@4 = Dict, _pipe@5 = gleam@map:update(_pipe@4, <<"z"/utf8>>, Inc_or_zero), gleam@should:equal( _pipe@5, gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}, {<<"z"/utf8>>, 0}] ) ). -spec fold_test() -> nil. fold_test() -> Dict = gleam@map:from_list( [{<<"a"/utf8>>, 0}, {<<"b"/utf8>>, 1}, {<<"c"/utf8>>, 2}, {<<"d"/utf8>>, 3}] ), Add = fun(Acc, _, V) -> V + Acc end, _pipe = Dict, _pipe@1 = gleam@map:fold(_pipe, 0, Add), gleam@should:equal(_pipe@1, 6), Concat = fun(Acc@1, K, _) -> gleam@string:append(Acc@1, K) end, _pipe@2 = Dict, _pipe@3 = gleam@map:fold(_pipe@2, <<""/utf8>>, Concat), gleam@should:equal(_pipe@3, <<"abcd"/utf8>>), _pipe@4 = gleam@map:from_list([]), _pipe@5 = gleam@map:fold(_pipe@4, 0, Add), gleam@should:equal(_pipe@5, 0).