-module(maps_map_size).
-export([test/0]).
test() ->
0 = map_size(id(#{})),
1 = map_size(id(#{a=>1})),
1 = map_size(id(#{a=>"wat"})),
2 = map_size(id(#{a=>1, b=>2})),
3 = map_size(id(#{a=>1, b=>2, b=>"3","33"=><<"n">>})),
true = map_is_size(#{a=>1}, 1),
true = map_is_size(#{a=>1, a=>2}, 1),
M = #{ "a" => 1, "b" => 2},
true = map_is_size(M, 2),
false = map_is_size(M, 3),
true = map_is_size(M#{ "a" => 2}, 2),
false = map_is_size(M#{ "c" => 2}, 2),
%% Error cases.
{'EXIT',{{badmap,[]},_}} = (catch map_size([])),
{'EXIT',{{badmap,<<1,2,3>>},_}} = (catch map_size(<<1,2,3>>)),
{'EXIT',{{badmap,1},_}} = (catch map_size(1)),
ok.
map_is_size(M,N) when map_size(M) =:= N -> true;
map_is_size(_,_) -> false.
%% Use this function to avoid compile-time evaluation of an expression.
id(I) -> I.