anchor.diff:      %% cleanup
       done = call(Pid, done),
       ok.
  +
  +-define(t_guard_receive_large_procs, 1500).
  +
  +t_guard_receive_large(Config) when is_list(Config) ->
  +    M = lists:foldl(fun(_,#{procs := Ps } = M) ->
  +                            M#{ procs := Ps#{ spawn_link(fun() -> grecv_loop() end) => 0 }}
  +                    end, #{procs => #{}, done => 0}, lists:seq(1,?t_guard_receive_large_procs)),
  +    lists:foreach(fun(Pid) ->
  +                          Pid ! {self(), hello}
  +                  end, maps:keys(maps:get(procs,M))),
  +    ok = guard_receive_large_loop(M),
  +    ok.
  +
  +guard_receive_large_loop(#{done := ?t_guard_receive_large_procs}) ->
  +    ok;
  +guard_receive_large_loop(M) ->
  +    receive
  +        #{pid := Pid, msg := hello} ->
  +            case M of
  +                #{done := Count, procs := #{Pid := 150}} ->
  +                    Pid ! {self(), done},
  +                    guard_receive_large_loop(M#{done := Count + 1});
  +                #{procs := #{Pid := Count} = Ps} ->
  +                    Pid ! {self(), hello},
  +                    guard_receive_large_loop(M#{procs := Ps#{Pid := Count + 1}})
  +            end
  +    end.
  +
  +grecv_loop() ->
  +    receive
  +        {_, done} ->
  +            ok;
  +        {Pid, hello} ->
  +            Pid ! #{pid=>self(), msg=>hello},
  +            grecv_loop()
  +    end.
   
   call(Pid, M) ->
       Pid ! {self(), M}, receive {Pid, Res} -> Res end.
  
positive.code: 	{3,gg,M3}    = map_guard_sequence_2(M3 = id(#{a=>gg, b=>4})),
  	{4,sc,sc,M4} = map_guard_sequence_2(M4 = id(#{a=>sc, b=>3, c=>sc2})),
  	{5,kk,kk,M5} = map_guard_sequence_2(M5 = id(#{a=>kk, b=>other, c=>sc2})),
  	
  	%% error case
  	{'EXIT',{function_clause,_}} = (catch map_guard_sequence_1(#{seq=>6,val=>id("e")})),
  	{'EXIT',{function_clause,_}} = (catch map_guard_sequence_2(#{b=>5})),
  	ok.
  
  map_guard_sequence_1(#{seq:=1=Seq, val:=Val}) -> {Seq,Val};
  map_guard_sequence_1(#{seq:=2=Seq, val:=Val}) -> {Seq,Val};
  
negative.code:     first  = map_guard_update(#{}, #{x=>first}),
      second = map_guard_update(#{y=>old}, #{x=>second,y=>old}),
      ok.
  
  t_guard_update_large(Config) when is_list(Config) ->
      M0 = id(#{ 70=>a0,80=>b0,90=>"c0","40"=>"d0",<<"50">>=>"e0",{["00",03]}=>"10",
                 71=>a1,81=>b1,91=>"c1","41"=>"d1",<<"51">>=>"e1",{["01",03]}=>"11",
                 72=>a2,82=>b2,92=>"c2","42"=>"d2",<<"52">>=>"e2",{["02",03]}=>"12",
                 73=>a3,83=>b3,93=>"c3","43"=>"d3",<<"53">>=>"e3",{["03",03]}=>"13",
                 74=>a4,84=>b4,94=>"c4","44"=>"d4",<<"54">>=>"e4",{["04",03]}=>"14",
  
                 75=>a5,85=>b5,95=>"c5","45"=>"d5",<<"55">>=>"e5",{["05",03]}=>"15",
                 76=>a6,86=>b6,96=>"c6","46"=>"d6",<<"56">>=>"e6",{["06",03]}=>"16",
                 77=>a7,87=>b7,97=>"c7","47"=>"d7",<<"57">>=>"e7",{["07",03]}=>"17",
                 78=>a8,88=>b8,98=>"c8","48"=>"d8",<<"58">>=>"e8",{["08",03]}=>"18",
                 79=>a9,89=>b9,99=>"c9","49"=>"d9",<<"59">>=>"e9",{["09",03]}=>"19",
  
                 70.0=>fa0,80.0=>fb0,90.0=>"fc0",
                 71.0=>fa1,81.0=>fb1,91.0=>"fc1",
                 72.0=>fa2,82.0=>fb2,92.0=>"fc2",
                 73.0=>fa3,83.0=>fb3,93.0=>"fc3",
                 74.0=>fa4,84.0=>fb4,94.0=>"fc4",
  
                 75.0=>fa5,85.0=>fb5,95.0=>"fc5",
                 76.0=>fa6,86.0=>fb6,96.0=>"fc6",
                 77.0=>fa7,87.0=>fb7,97.0=>"fc7",
                 78.0=>fa8,88.0=>fb8,98.0=>"fc8",
                 79.0=>fa9,89.0=>fb9,99.0=>"fc9",
  
                 #{ one => small, map => key } => "small map key 1",
                 #{ second => small, map => key } => "small map key 2",
                 #{ third => small, map => key } => "small map key 3",
  
                 #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
                    11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
                    12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
                    13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
                    14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
  
                    15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
                    16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
                    17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
                    18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
                    19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
  
                 #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
                    11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
                    12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
                    13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
                    14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
  
                    15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
                    k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
                    17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
                    18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
                    19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" }),
  
  
      error  = map_guard_update(M0#{},M0#{}),
      first  = map_guard_update(M0#{},M0#{x=>first}),
      second = map_guard_update(M0#{y=>old}, M0#{x=>second,y=>old}),
      ok.
  
  
  map_guard_update(M1, M2) when M1#{x=>first}  =:= M2 -> first;
  map_guard_update(M1, M2) when M1#{x=>second} =:= M2 -> second;
  