aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2013-10-30 17:05:43 +0100
committerBjörn-Egil Dahlberg <[email protected]>2014-01-28 17:06:43 +0100
commit105dcb3eb7c6d5fd07cd76cd495230b0a1d1e7c4 (patch)
tree0f844e7b391fcbba694cd45ace3ed6538fa92b8e
parent7e42aefdecae6cc91bdaaef21924b4e7cb75861c (diff)
downloadotp-105dcb3eb7c6d5fd07cd76cd495230b0a1d1e7c4.tar.gz
otp-105dcb3eb7c6d5fd07cd76cd495230b0a1d1e7c4.tar.bz2
otp-105dcb3eb7c6d5fd07cd76cd495230b0a1d1e7c4.zip
erts: Add tests for Map update on expressions
(foo())#{ k1 := V1, k2 => V2 }
-rw-r--r--erts/emulator/test/map_SUITE.erl21
1 files changed, 20 insertions, 1 deletions
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index b6cfd668f1..a06cb43ac7 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -23,6 +23,7 @@
-export([
t_build_and_match_literals/1,
t_update_literals/1,t_match_and_update_literals/1,
+ t_update_map_expressions/1,
t_update_assoc/1,t_update_exact/1,
t_guard_bifs/1, t_guard_sequence/1, t_guard_update/1,
t_guard_receive/1, t_guard_fun/1,
@@ -67,6 +68,7 @@ suite() -> [].
all() -> [
t_build_and_match_literals,
t_update_literals, t_match_and_update_literals,
+ t_update_map_expressions,
t_update_assoc,t_update_exact,
t_guard_bifs, t_guard_sequence, t_guard_update,
t_guard_receive,t_guard_fun, t_list_comprehension,
@@ -137,6 +139,7 @@ t_build_and_match_literals(Config) when is_list(Config) ->
{'EXIT',{{badmatch,_},_}} = (catch (#{x:=3} = id(#{x=>"three"}))),
ok.
+
%% Tests size(Map).
%% not implemented, perhaps it shouldn't be either
@@ -163,7 +166,7 @@ t_map_size(Config) when is_list(Config) ->
true = map_is_size(M#{ "a" => 2}, 2),
false = map_is_size(M#{ "c" => 2}, 2),
- %% Error cases.
+ %% Error cases.
{'EXIT',{badarg,_}} = (catch map_size([])),
{'EXIT',{badarg,_}} = (catch map_size(<<1,2,3>>)),
{'EXIT',{badarg,_}} = (catch map_size(1)),
@@ -204,6 +207,22 @@ loop_match_and_update_literals_x_q(Map, []) -> Map;
loop_match_and_update_literals_x_q(#{q:=Q0,x:=X0} = Map, [{X,Q}|Vs]) ->
loop_match_and_update_literals_x_q(Map#{q=>Q0+Q,x=>X0+X},Vs).
+
+t_update_map_expressions(Config) when is_list(Config) ->
+ M = maps:new(),
+ #{ a := 1 } = M#{a => 1},
+
+ #{ 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 },
+
+ %% Error cases, FIXME: should be 'badmap'?
+ {'EXIT',{badarg,_}} = (catch (id(<<>>))#{ a := 42, b => 2 }),
+ {'EXIT',{badarg,_}} = (catch (id([]))#{ a := 42, b => 2 }),
+ ok.
+
+
t_update_assoc(Config) when is_list(Config) ->
M0 = id(#{1=>a,2=>b,3.0=>c,4=>d,5=>e}),