1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
-module(gleam@function_test).
-compile(no_auto_import).
-export([compose_test/0, flip_test/0, identity_test/0]).
compose_test() ->
AddTwo = fun(Int) -> Int + 2 end,
AddThree = fun(Int1) -> Int1 + 3 end,
AddFive = gleam@function:compose(AddTwo, AddThree),
gleam@should:equal(AddFive(1), 6),
HeadToString = gleam@function:compose(
gleam@function:compose(
fun gleam@list:head/1,
fun(GleamCaptureVariable) ->
gleam@result:unwrap(GleamCaptureVariable, 0)
end
),
fun gleam@int:to_string/1
),
gleam@should:equal(HeadToString([1]), <<"1"/utf8>>),
gleam@should:equal(HeadToString([]), <<"0"/utf8>>).
flip_test() ->
Fun = fun(S, I) ->
gleam@string:append(
gleam@string:append(
gleam@string:append(
gleam@string:append(<<"String: '"/utf8>>, S),
<<"', Int: '"/utf8>>
),
gleam@int:to_string(I)
),
<<"'"/utf8>>
)
end,
FlippedFun = gleam@function:flip(Fun),
gleam@should:equal(
Fun(<<"Bob"/utf8>>, 1),
<<"String: 'Bob', Int: '1'"/utf8>>
),
gleam@should:equal(
FlippedFun(2, <<"Alice"/utf8>>),
<<"String: 'Alice', Int: '2'"/utf8>>
).
identity_test() ->
gleam@should:equal(gleam@function:identity(1), 1),
gleam@should:equal(gleam@function:identity(<<""/utf8>>), <<""/utf8>>),
gleam@should:equal(gleam@function:identity([]), []),
gleam@should:equal(gleam@function:identity({1, 2.0}), {1, 2.0}).
|