lijie pirms 5 gadiem
vecāks
revīzija
65a24d6353
4 mainītis faili ar 44 papildinājumiem un 32 dzēšanām
  1. +16
    -31
      src/dynamicCompile/utKvsToBeam.erl
  2. +1
    -1
      src/testCase/utTestAtomics.erl
  3. +18
    -0
      src/testCase/utTestPerformance.erl
  4. +9
    -0
      src/testCase/utTestTime.erl

+ 16
- 31
src/dynamicCompile/utKvsToBeam.erl Parādīt failu

@ -4,29 +4,31 @@
load/2
]).
-spec load(atom(), [{term(), term()}]) -> ok.
%% map类型的数据不能当做key
-type key() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple().
-type value() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple() | map().
-spec load(term(), [{key(), value()}]) -> ok.
load(Module, KVs) ->
Forms = forms(Module, KVs),
{ok, Module, Bin} = compile:forms(Forms, [debug_info]),
{ok, Module, Bin} = compile:forms(Forms),
code:soft_purge(Module),
Filename = atom_to_list(Module) ++ ".erl",
{module, Module} = code:load_binary(Module, Filename, Bin),
{module, Module} = code:load_binary(Module, atom_to_list(Module), Bin),
ok.
forms(Module, KVs) ->
Mod = erl_syntax:attribute(erl_syntax:atom(module),
[erl_syntax:atom(Module)]),
ExportList = [erl_syntax:arity_qualifier(erl_syntax:atom(get),
erl_syntax:integer(1))],
Export = erl_syntax:attribute(erl_syntax:atom(export),
[erl_syntax:list(ExportList)]),
Function = erl_syntax:function(erl_syntax:atom(get),
lookup_clauses(KVs)),
%% -module(Module).
Mod = erl_syntax:attribute(erl_syntax:atom(module), [erl_syntax:atom(Module)]),
%% -export([get/0]).
ExportList = [erl_syntax:arity_qualifier(erl_syntax:atom(get), erl_syntax:integer(1))],
Export = erl_syntax:attribute(erl_syntax:atom(export), [erl_syntax:list(ExportList)]),
%% get(K) -> V
Function = erl_syntax:function(erl_syntax:atom(get), lookup_clauses(KVs, [])),
[erl_syntax:revert(X) || X <- [Mod, Export, Function]].
lookup_clause(Key, Value) ->
Var = to_syntax(Key),
Body = to_syntax(Value),
Var = erl_syntax:abstract(Key),
Body = erl_syntax:abstract(Value),
erl_syntax:clause([Var], [], [Body]).
lookup_clause_anon() ->
@ -34,24 +36,7 @@ lookup_clause_anon() ->
Body = erl_syntax:atom(undefined),
erl_syntax:clause([Var], [], [Body]).
lookup_clauses(KVs) ->
lookup_clauses(KVs, []).
lookup_clauses([], Acc) ->
lists:reverse(lists:flatten([lookup_clause_anon() | Acc]));
lookup_clauses([{Key, Value} | T], Acc) ->
lookup_clauses(T, [lookup_clause(Key, Value) | Acc]).
to_syntax(Atom) when is_atom(Atom) ->
erl_syntax:atom(Atom);
to_syntax(Binary) when is_binary(Binary) ->
String = erl_syntax:string(binary_to_list(Binary)),
erl_syntax:binary([erl_syntax:binary_field(String)]);
to_syntax(Float) when is_float(Float) ->
erl_syntax:float(Float);
to_syntax(Integer) when is_integer(Integer) ->
erl_syntax:integer(Integer);
to_syntax(List) when is_list(List) ->
erl_syntax:list([to_syntax(X) || X <- List]);
to_syntax(Tuple) when is_tuple(Tuple) ->
erl_syntax:tuple([to_syntax(X) || X <- tuple_to_list(Tuple)]).

+ 1
- 1
src/testCase/utTestAtomics.erl Parādīt failu

@ -49,7 +49,7 @@ ttt4(0) ->
io:format("IMY************dic ~p~n",[atomics:get(persistent_term:get(ref), 1)]),
ok;
ttt4(N) ->
atomics:add(persistent_term:get(ref) , 1, 1),
atomics:add_get(persistent_term:get(ref) , 1, 1),
ttt4(N - 1).
tt5(N) ->

+ 18
- 0
src/testCase/utTestPerformance.erl Parādīt failu

@ -159,3 +159,21 @@ cc7(0, F) ->
cc7(N, _F) ->
F = float(N),
cc7(N - 1, F).
s1(0, Fun) ->
ok;
s1(N, Fun) ->
?MODULE:Fun(),
s1(N - 1, Fun).
st1() ->
size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>).
st2() ->
byte_size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>).
st3() ->
iolist_size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df d:fddfdf">>).
st4() ->
size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>).

+ 9
- 0
src/testCase/utTestTime.erl Parādīt failu

@ -268,3 +268,12 @@ tk2() ->
tk3() ->
erlang:system_time(nanosecond).
tk4() ->
make_ref().
tk5() ->
erlang:unique_integer([positive]) rem 16.
tk6() ->
erlang:monotonic_time(second).

Notiek ielāde…
Atcelt
Saglabāt