erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

74 Zeilen
2.3 KiB

vor 4 Jahren
  1. -module(tester).
  2. -include("common.hrl").
  3. -export([
  4. test_online_num/1,
  5. test_scene_sign/0,
  6. test_lists_and_proplists/0,
  7. test_lists_and_proplists/3
  8. ]).
  9. %% Apis ------------------------------
  10. test_online_num(Repeat) ->
  11. F1 = fun(_) -> lib_world_boss:online_num() end,
  12. F2 = fun(_) -> lib_world_boss:online_num2() end,
  13. Tester = [
  14. {"lib_world_boss:online_num", F1},
  15. {"lib_world_boss:online_num2", F2}
  16. ],
  17. test:time_compare(Repeat, Tester).
  18. test_lists_and_proplists() ->
  19. test_lists_and_proplists(10000, 10, 50).
  20. test_lists_and_proplists(Repeat, ListSize, FindSize) ->
  21. {ToFindKeys, MaterialList} = gen_list_material(ListSize, FindSize),
  22. F1 = fun(_) -> [lists:keyfind(K, 1, MaterialList) || K <- ToFindKeys] end,
  23. F2 = fun(_) -> [proplists:get_value(K, MaterialList) || K <- ToFindKeys] end,
  24. Tester = [
  25. {"lists:keyfind/3", F1},
  26. {"proplists:get_value/2", F2}
  27. ],
  28. test:time_compare(Repeat, Tester).
  29. %% @doc 测试地图区域
  30. test_scene_sign() ->
  31. case conf_scene_list:get_id_list() of
  32. SceneList when SceneList =/= [] ->
  33. SceneID = util:list_rand(SceneList),
  34. test_scene_sign(10000, SceneID, 100);
  35. _ ->
  36. ignore
  37. end.
  38. test_scene_sign(Repeat, SceneID, FindSize) ->
  39. {MaxX, MaxY} = lib_scene_sign:get_max_xy(SceneID),
  40. PosList = [{util:rand(1, MaxX), util:rand(1, MaxY)} || _ <- lists:seq(1, FindSize)],
  41. %% 从s3取svr_scene_sign模块,并将svr_scene_sign:load_sign/1改为call
  42. svr_scene_sign:ensure_scene_sign(SceneID),
  43. F1 = fun(_) ->
  44. [svr_scene_sign:get_scene_poses({SceneID, X, Y}) || {X, Y} <- PosList]
  45. end,
  46. Ets = conf_scene:get_ets(SceneID),
  47. F2 = fun(_) ->
  48. [lib_scene_sign:is_pos_blocked(Ets, {SceneID, X, Y}) || {X, Y} <- PosList]
  49. end,
  50. F3 = fun(_) ->
  51. [lib_scene_sign:is_pos_blocked({SceneID, X, Y}) || {X, Y} <- PosList]
  52. end,
  53. Tester = [
  54. {"scene_sign+gen_server", F1},
  55. {"scene_sign+ets", F2},
  56. {"scene_sign+ets", F3}
  57. ],
  58. test:time_compare(Repeat, Tester).
  59. %% Privates --------------------------
  60. gen_list_material(ListSize, FindSize) ->
  61. Keys = [list_to_atom(lists:concat([k, I])) || I <- lists:seq(1, ListSize)],
  62. Values = [list_to_atom(lists:concat([v, I])) || I <- lists:seq(1, ListSize)],
  63. List = lists:zip(Keys, Values),
  64. ToFind = util:gen_n(FindSize, Keys),
  65. {ToFind, List}.