SisMaker 2 роки тому
джерело
коміт
27208f5ce8
3 змінених файлів з 61 додано та 2 видалено
  1. +48
    -1
      src/template/utMapsFold.erl
  2. +9
    -0
      src/testCase/utTestMap.erl
  3. +4
    -1
      src/testCase/utTestTime.erl

+ 48
- 1
src/template/utMapsFold.erl Переглянути файл

@ -1,6 +1,6 @@
-module(utMapsFold).
-export([fold/1]).
-export([fold/1, diff/2, diffKeys/2]).
fold(Map) ->
fold(maps:iterator(Map), []).
@ -12,3 +12,50 @@ fold(Iterator, AccList) ->
none ->
AccList
end.
diff(Map1, Map2) ->
case map_size(Map1) =< map_size(Map2) of
true ->
diff_1(maps:next(maps:iterator(Map1)), Map1, Map2);
_ ->
diff_2(maps:next(maps:iterator(Map2)), Map1)
end.
diff_1(none, Map1, _Map2) ->
Map1;
diff_1({Key, _Value, NextIter}, Map1, Map2) ->
case maps:is_key(Key, Map2) of
true ->
diff_1(maps:next(NextIter), maps:remove(Key, Map1), Map2);
_ ->
diff_1(maps:next(NextIter), Map1, Map2)
end.
diff_2(none, Map1) ->
Map1;
diff_2({Key, _Value, NextIter}, Map1) ->
diff_2(maps:next(NextIter), maps:remove(Key, Map1)).
diffKeys(Map1, Map2) ->
case map_size(Map1) =< map_size(Map2) of
true ->
diffKeys_1(maps:next(maps:iterator(Map1)), Map2, []);
_ ->
diffKeys_2(maps:next(maps:iterator(Map2)), Map1)
end.
diffKeys_1(none, _Map2, Acc) ->
Acc;
diffKeys_1({Key, _Value, NextIter}, Map2, Acc) ->
case maps:is_key(Key, Map2) of
true ->
diffKeys_1(maps:next(NextIter), Map2, Acc);
_ ->
diffKeys_1(maps:next(NextIter), Map2, [Key | Acc])
end.
diffKeys_2(none, Map1) ->
maps:to_list(Map1);
diffKeys_2({Key, _Value, NextIter}, Map1) ->
diffKeys_2(maps:next(NextIter), maps:remove(Key, Map1)).

+ 9
- 0
src/testCase/utTestMap.erl Переглянути файл

@ -47,3 +47,12 @@ tt3(N, Map) ->
not_found
end,
tt3(N - 1, Map).
ll(A, B) ->
A -- B.
mm(A, B) ->
utMapsFold:diff(A, B).

+ 4
- 1
src/testCase/utTestTime.erl Переглянути файл

@ -27,7 +27,10 @@ tt2(N, Sec, Fun) ->
%% ls1 sl1
%%%%%%%%%%%%%%%%% datetime timestamp start %%%%%%%%%%%%%%%%%%%
ls1(LocalDate) ->
erlang:universaltime_to_posixtime(erlang:localtime_to_universaltime(LocalDate)).
erlang:universaltime_to_posixtime(LocalDate).
ls12(LocalDate) ->
erlang:localtime_to_universaltime(LocalDate).
%%

Завантаження…
Відмінити
Зберегти