-module(maps_update_map_expressions).
-export([test/0]).
test() ->
M = maps:new(),
X = id(fondue),
M1 = #{ a := 1 } = M#{a => 1},
#{ b := {X} } = M1#{ a := 1, b => {X} },
#{ b := 2 } = (maps:new())#{ b => 2 },
#{ a :=42, b:=42, c:=42 } = (maps:from_list([{a,1},{b,2},{c,3}]))#{ a := 42, b := 42, c := 42 },
#{ "a" :=1, "b":=42, "c":=42 } = (maps:from_list([{"a",1},{"b",2}]))#{ "b" := 42, "c" => 42 },
%% Test need to be in a fun.
%% This tests that let expr optimisation in sys_core_fold
%% covers maps correctly.
F = fun() ->
M0 = id(#{ "a" => [1,2,3] }),
#{ "a" := _ } = M0,
M0#{ "a" := b }
end,
#{ "a" := b } = F(),
%% Error cases.
{'EXIT',{{badmap,<<>>},_}} = (catch (id(<<>>))#{ a := 42, b => 2 }),
{'EXIT',{{badmap,[]},_}} = (catch (id([]))#{ a := 42, b => 2 }),
ok.
%% Use this function to avoid compile-time evaluation of an expression.
id(I) -> I.