Packages

Professional observability suite for Gleam: structured logging, metrics, and statistical benchmarking

Current section

Files

Jump to
viva_telemetry src viva_telemetry@examples@bench_example.erl
Raw

src/viva_telemetry@examples@bench_example.erl

-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>>).