-module(gleam@int). -compile(no_auto_import). -export([absolute_value/1, parse/1, to_string/1, to_base_string/2, to_float/1, clamp/3, compare/2, min/2, max/2, is_even/1, is_odd/1, negate/1, sum/1, product/1]). -spec absolute_value(integer()) -> integer(). absolute_value(Num) -> case Num >= 0 of true -> Num; false -> Num * -1 end. -spec parse(binary()) -> {ok, integer()} | {error, nil}. parse(A) -> gleam_stdlib:parse_int(A). -spec to_string(integer()) -> binary(). to_string(A) -> erlang:integer_to_binary(A). -spec to_base_string(integer(), integer()) -> binary(). to_base_string(A, B) -> erlang:integer_to_binary(A, B). -spec to_float(integer()) -> float(). to_float(A) -> erlang:float(A). -spec clamp(integer(), integer(), integer()) -> integer(). clamp(N, Min_bound, Max_bound) -> max(min(N, Max_bound), Min_bound). -spec compare(integer(), integer()) -> gleam@order:order(). compare(A, B) -> case A =:= B of true -> eq; false -> case A < B of true -> lt; false -> gt end end. -spec min(integer(), integer()) -> integer(). min(A, B) -> case A < B of true -> A; false -> B end. -spec max(integer(), integer()) -> integer(). max(A, B) -> case A > B of true -> A; false -> B end. -spec is_even(integer()) -> boolean(). is_even(X) -> (X rem 2) =:= 0. -spec is_odd(integer()) -> boolean(). is_odd(X) -> (X rem 2) /= 0. -spec negate(integer()) -> integer(). negate(X) -> -1 * X. -spec sum(list(integer())) -> integer(). sum(Numbers) -> do_sum(Numbers, 0). -spec do_sum(list(integer()), integer()) -> integer(). do_sum(Numbers, Initial) -> case Numbers of [] -> Initial; [X | Rest] -> do_sum(Rest, X + Initial) end. -spec product(list(integer())) -> integer(). product(Numbers) -> case Numbers of [] -> 0; _ -> do_product(Numbers, 1) end. -spec do_product(list(integer()), integer()) -> integer(). do_product(Numbers, Initial) -> case Numbers of [] -> Initial; [X | Rest] -> do_product(Rest, X * Initial) end.