tremor-script 0.12.4

Tremor Script Interpreter
%% Copyright 2020, The Tremor Team
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%%      http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%

-module(util).

-export([clamp/2, mod/2, round/2, unfloat/1]).

mod(X, Y) when X > 0 -> X rem Y;
mod(X, Y) when X < 0 -> Y + X rem Y;
mod(0, _) -> 0.

round(Number, Precision) ->
    P = math:pow(10, Precision), round(Number * P) / P.

clamp(Number, Precision) when is_float(Number) ->
    list_to_float(float_to_list(round(Number,
				      Precision + 1),
				[{decimals, Precision}]));
clamp({K, V}, Precision) -> {K, clamp(V, Precision)};
clamp(#{<<"emit">> := V}, Precision) ->
    #{<<"emit">> => clamp(V, Precision)};
clamp(#{<<"drop">> := V}, Precision) ->
    #{<<"drop">> => clamp(V, Precision)};
clamp(L, Precision) when is_list(L) ->
    [clamp(E, Precision) || E <- L];
clamp(Number, _) -> Number.

%% replaces all floats with 42
unfloat(Number) when is_float(Number) ->
    42;
unfloat({K, V}) -> {K, unfloat(V)};
unfloat(#{<<"emit">> := V}) ->
    #{<<"emit">> => unfloat(V)};
unfloat(#{<<"drop">> := V}) ->
    #{<<"drop">> => unfloat(V)};
unfloat(L) when is_list(L) ->
    [unfloat(E) || E <- L];
unfloat(Number) -> Number.