diff --git a/src/dataType/utGenTerm.erl b/src/dataType/utGenTerm.erl new file mode 100644 index 0000000..e0e4d33 --- /dev/null +++ b/src/dataType/utGenTerm.erl @@ -0,0 +1,107 @@ +-module(utGenTerm). + +-export([ + any/0, + any/1, + genAtom/1, + genInteger/1, + genFloat/1, + genReference/1, + genPort/1, + genPid/1, + genTuple/1, + genList/1, + genShortString/1, + genString/1, + genBinary/1, + genBitstring/1, + genBignum/1, + genFunction/1 +]). + +any() -> + any(16). + +any(MaxSize) when MaxSize =< 0 -> + Fun = choice(value_types()), + ?MODULE:Fun(MaxSize); +any(MaxSize) -> + Fun = choice(all_types()), + ?MODULE:Fun(MaxSize). + +genAtom(MaxSize) -> + list_to_atom(genShortString(MaxSize)). + +genInteger(_) -> + Value = case rand:uniform() < 0.5 of + true -> rand:uniform(127); + false -> rand:uniform(16#FFFFFFFF) + end, + case rand:uniform() < 0.5 of + true -> -1 * Value; + false -> Value + end. + +genFloat(_) -> + rand:uniform() * float(16#FFFFFFFF). + +genReference(_) -> + erlang:make_ref(). + +genPort(_) -> + Ports = erlang:ports(), + lists:nth(rand:uniform(length(Ports)), Ports). + +genPid(_) -> + Pids = erlang:processes(), + lists:nth(rand:uniform(length(Pids)), Pids). + +genTuple(MaxSize) -> + list_to_tuple(genList(MaxSize)). + +genList(MaxSize) -> + Width = rand:uniform(MaxSize), + [any(MaxSize-Width) || _ <- lists:seq(1, Width)]. + +genShortString(_) -> + Size = rand:uniform(255), + [rand:uniform(127) || _ <- lists:seq(1, Size)]. + +genString(_) -> + Size = rand:uniform(4096), + [rand:uniform(127) || _ <- lists:seq(1, Size)]. + +genBinary(MaxSize) -> + list_to_binary(genString(MaxSize)). + +genBitstring(MaxSize) -> + B = genBinary(MaxSize), + <<2:4/integer, B/binary>>. + +genBignum(_) -> + 16#FFFFFFFFFFFFFFFF + rand:uniform(16#FFFFFFFF). + +genFunction(_) -> + choice(all_types()). + +choice(Options) -> + lists:nth(rand:uniform(length(Options)), Options). + +value_types() -> + [ + gen_atom, + gen_integer, + gen_float, + gen_reference, + gen_port, + gen_pid, + gen_short_string, + gen_string, + gen_binary, + gen_bitstring, + gen_bignum, + gen_function + ]. + +all_types() -> + value_types() ++ [gen_tuple, gen_list]. \ No newline at end of file diff --git a/src/docs/erlangApp相关.md b/src/docs/erlangApp相关.md index 08e867d..532dccb 100644 --- a/src/docs/erlangApp相关.md +++ b/src/docs/erlangApp相关.md @@ -12,8 +12,8 @@ {maxT,Time},%%app运行时间 单位毫秒 {registered,[mod]},%%指定app 名字模块,systools用来解决名字冲突 {included_applictions ,[XX]},%%指定子 app,只加载,但是不启动 - {applictions,[xxxx]},%%启动自己的app前,将会首先启动此列表的app - {env,[xxxx]},%%配置app的env,可以使用application:get_env获取 + {applictions,[xxxx]},%%启动自己的app前,appliation:ensure_all_started将会首先启动此列表的app application:start会检查该列表是否都启动 + {env,[xxxx]},%%配置app的env,可以使用application:get_env(AppName, Key)获取 {mod,{xxx,args}},%%指定app启动模块,参数,对应自己app的application behavior {start_phases,[{xxx,xxx}]]%%指定启动阶段一些操作,对应otp application start_phase函数 ]