:- use_module(library(random)).

% Helper to generate a list of N random integers
gen_list(0, []).
gen_list(N, [R|T]) :-
    N > 0,
    random_between(1, 1000000, R),
    N1 is N - 1,
    gen_list(N1, T).

% Helper to generate a list of M lists, each of size N
gen_lists(0, _, []).
gen_lists(M, N, [L|Ls]) :-
    M > 0,
    gen_list(N, L),
    M1 is M - 1,
    gen_lists(M1, N, Ls).

% Benchmark 1: Sort 1 list of 1000 elements, M times
bench_large(M) :-
    gen_list(1000, L),
    get_time(T1),
    (  between(1, M, _),
       sort(L, _),
       fail
    ;  true
    ),
    get_time(T2),
    Time is T2 - T1,
    format('Sorting 1x1000 elements ~p times took ~3f seconds~n', [M, Time]).

% Benchmark 2: Sort 10 lists of 100 elements, M times
bench_small(M) :-
    gen_lists(10, 100, Lists),
    get_time(T1),
    (  between(1, M, _),
       member(L, Lists),
       sort(L, _),
       fail
    ;  true
    ),
    get_time(T2),
    Time is T2 - T1,
    format('Sorting 10x100 elements ~p times took ~3f seconds~n', [M, Time]).

% Run the benchmarks
run_benchmarks(M) :-
    format('Running ~p iterations...~n', [M]),
    bench_large(M),
    bench_small(M).
