-module(test_sorting). -compile(export_all). -import(sorting, [p_qsort/1, qsort/1]). %% %% Examples %% example_p_qsort() -> example_p_qsort(1000000). example_p_qsort(N) -> random_seed(), L = mkList(N), benchmark:do(fun() -> sorting:p_qsort(L) end). example_qsort() -> example_qsort(1000000). example_qsort(N) -> random_seed(), L = mkList(N), benchmark:do(fun() -> sorting:qsort(L) end). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Benchmark for list of variable size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Executes a benchmark for sorting:qsort bench_qsort() -> bench_list_algorithm(fun sorting:qsort/1, "Results qsort.csv"). %% Executes a benchmark for sorting:p_qsort bench_p_qsort() -> bench_list_algorithm(fun sorting:p_qsort/1, "Results p_qsort.csv"). %% Executes a benchmark for the algorithm indicated, F, and saves the results in Filename %% %% @type result() = {integer(), integer()} %% %% @spec bench_list_algorithm(fun(X) -> , string()) -> [result()] bench_list_algorithm(F, Filename) -> Results = lists:map( fun(L) -> { L, benchmark:do_silent(fun() -> io:format("Execute with a list of length = ~p~n", [L]), F(mkList(L)) end ) } end, bench_size_samples_lists()), save_to_csv_file(Filename, Results), Results. bench_size_samples_lists() -> lists:seq(100000, 1000000, 100000) ++ % up to 1 million, each 100 thousand (size = 10) lists:seq(2000000, 10000000, 1000000). % up to 10 millions, each million (size = 10) save_to_csv_file(File, L) -> {ok, S} = file:open(File, write), lists:foreach(fun(X) -> {N, Time} = X, io:format(S, "~p,~p~n", [N, Time]) end, L), file:close(S). %% %% Make a list of K random numbers %% mkList(K) -> mkList(K, [], K). mkList(0, L, _) -> L; mkList(N, L, K) -> mkList(N-1, [random:uniform(K)|L], K). random_seed() -> {_,_,X} = erlang:now(), {H,M,S} = time(), H1 = H * X rem 32767, M1 = M * X rem 32767, S1 = S * X rem 32767, random:seed(H1,M1,S1).