-module(gleam@function_test). -compile(no_auto_import). -export([compose_test/0, curry2_test/0, curry3_test/0, curry4_test/0, curry5_test/0, curry6_test/0, flip_test/0, identity_test/0]). -spec compose_test() -> nil. compose_test() -> Add_two = fun(Int) -> Int + 2 end, Add_three = fun(Int@1) -> Int@1 + 3 end, Add_five = gleam@function:compose(Add_two, Add_three), _pipe = 1, _pipe@1 = Add_five(_pipe), gleam@should:equal(_pipe@1, 6), Head_to_string = begin _pipe@2 = fun gleam@list:head/1, _pipe@3 = gleam@function:compose( _pipe@2, fun(_capture) -> gleam@result:unwrap(_capture, 0) end ), gleam@function:compose(_pipe@3, fun gleam@int:to_string/1) end, _pipe@4 = [1], _pipe@5 = Head_to_string(_pipe@4), gleam@should:equal(_pipe@5, <<"1"/utf8>>), _pipe@6 = [], _pipe@7 = Head_to_string(_pipe@6), gleam@should:equal(_pipe@7, <<"0"/utf8>>). -spec curry2_test() -> nil. curry2_test() -> Fun = fun(A, B) -> A + B end, Curried = gleam@function:curry2(Fun), _pipe = (Curried(1))(2), gleam@should:equal(_pipe, 3). -spec curry3_test() -> nil. curry3_test() -> Fun = fun(A, B, C) -> (A + B) + C end, Curried = gleam@function:curry3(Fun), _pipe = ((Curried(1))(2))(4), gleam@should:equal(_pipe, 7). -spec curry4_test() -> nil. curry4_test() -> Fun = fun(A, B, C, D) -> ((A + B) + C) + D end, Curried = gleam@function:curry4(Fun), _pipe = (((Curried(1))(2))(4))(8), gleam@should:equal(_pipe, 15). -spec curry5_test() -> nil. curry5_test() -> Fun = fun(A, B, C, D, E) -> (((A + B) + C) + D) + E end, Curried = gleam@function:curry5(Fun), _pipe = ((((Curried(1))(2))(4))(8))(16), gleam@should:equal(_pipe, 31). -spec curry6_test() -> nil. curry6_test() -> Fun = fun(A, B, C, D, E, F) -> ((((A + B) + C) + D) + E) + F end, Curried = gleam@function:curry6(Fun), _pipe = (((((Curried(1))(2))(4))(8))(16))(32), gleam@should:equal(_pipe, 63). -spec flip_test() -> nil. flip_test() -> Fun = fun(S, I) -> _pipe = S, _pipe@1 = gleam@string:append(<<"String: '"/utf8>>, _pipe), _pipe@2 = gleam@string:append(_pipe@1, <<"', Int: '"/utf8>>), _pipe@3 = gleam@string:append(_pipe@2, gleam@int:to_string(I)), gleam@string:append(_pipe@3, <<"'"/utf8>>) end, Flipped_fun = gleam@function:flip(Fun), _pipe@4 = Fun(<<"Bob"/utf8>>, 1), gleam@should:equal(_pipe@4, <<"String: 'Bob', Int: '1'"/utf8>>), _pipe@5 = Flipped_fun(2, <<"Alice"/utf8>>), gleam@should:equal(_pipe@5, <<"String: 'Alice', Int: '2'"/utf8>>). -spec identity_test() -> nil. identity_test() -> _pipe = 1, _pipe@1 = gleam@function:identity(_pipe), gleam@should:equal(_pipe@1, 1), _pipe@2 = <<""/utf8>>, _pipe@3 = gleam@function:identity(_pipe@2), gleam@should:equal(_pipe@3, <<""/utf8>>), _pipe@4 = [], _pipe@5 = gleam@function:identity(_pipe@4), gleam@should:equal(_pipe@5, []), _pipe@6 = {1, 2.0}, _pipe@7 = gleam@function:identity(_pipe@6), gleam@should:equal(_pipe@7, {1, 2.0}).