-module(viva_telemetry@examples@bench_example). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/viva_telemetry/examples/bench_example.gleam"). -export([main/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " Example: Using viva_telemetry/bench\n" "\n" " Run: gleam run -m viva_telemetry/examples/bench_example\n" ). -file("src/viva_telemetry/examples/bench_example.gleam", 65). -spec fib_recursive(integer()) -> integer(). fib_recursive(N) -> case N of 0 -> 0; 1 -> 1; _ -> fib_recursive(N - 1) + fib_recursive(N - 2) end. -file("src/viva_telemetry/examples/bench_example.gleam", 77). -spec fib_iter(integer(), integer(), integer()) -> integer(). fib_iter(N, A, B) -> case N of 0 -> A; _ -> fib_iter(N - 1, B, A + B) end. -file("src/viva_telemetry/examples/bench_example.gleam", 73). -spec fib_iterative(integer()) -> integer(). fib_iterative(N) -> fib_iter(N, 0, 1). -file("src/viva_telemetry/examples/bench_example.gleam", 9). -spec main() -> nil. main() -> gleam_stdlib:println(<<"=== viva_telemetry/bench Demo ===\n"/utf8>>), gleam_stdlib:println(<<"--- Single Benchmark ---"/utf8>>), Result1 = viva_telemetry@bench:run( <<"list.range(1, 1000)"/utf8>>, fun() -> gleam@list:range(1, 1000) end ), viva_telemetry@bench:print(Result1), gleam_stdlib:println(<<"\n--- Comparison ---"/utf8>>), Fib_recursive_result = viva_telemetry@bench:run( <<"fib_recursive(20)"/utf8>>, fun() -> fib_recursive(20) end ), Fib_iterative_result = viva_telemetry@bench:run( <<"fib_iterative(20)"/utf8>>, fun() -> fib_iterative(20) end ), viva_telemetry@bench:print(Fib_recursive_result), viva_telemetry@bench:print(Fib_iterative_result), Cmp = viva_telemetry@bench:compare( Fib_recursive_result, Fib_iterative_result ), viva_telemetry@bench:print_comparison(Cmp), gleam_stdlib:println(<<"\n--- Multiple Benchmarks (Markdown) ---"/utf8>>), Cfg = viva_telemetry@bench:config(5, 50), Map_result = viva_telemetry@bench:run_with_config( <<"list.map"/utf8>>, fun() -> gleam@list:map(gleam@list:range(1, 100), fun(X) -> X * 2 end) end, Cfg ), Filter_result = viva_telemetry@bench:run_with_config( <<"list.filter"/utf8>>, fun() -> gleam@list:filter( gleam@list:range(1, 100), fun(X@1) -> (X@1 rem 2) =:= 0 end ) end, Cfg ), Fold_result = viva_telemetry@bench:run_with_config( <<"list.fold"/utf8>>, fun() -> gleam@list:fold( gleam@list:range(1, 100), 0, fun(Acc, X@2) -> Acc + X@2 end ) end, Cfg ), gleam_stdlib:println( viva_telemetry@bench:to_markdown_table( [Map_result, Filter_result, Fold_result] ) ), gleam_stdlib:println(<<"\n--- JSON Export ---"/utf8>>), gleam_stdlib:println(viva_telemetry@bench:to_json_string(Result1)), gleam_stdlib:println(<<"\n=== Demo completed! ==="/utf8>>).