aboutsummaryrefslogtreecommitdiffstats
path: root/tests/fun.tdy
blob: 80113694c4b20ace3ad05dacaec94c88befc8b31 (plain) (blame)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Simplest
f := fn {}
f()

// Simple param
f2 := fn a: int {}
f2(1)

// Return value
f3 := fn -> int {
    ret 3
}
f3() <=> 3

// Combined
f4 := fn a: int -> int {
    ret a + a
}
f4(2) <=> 4

// Multiple arguments
adder := fn a: int, b: int -> int {
    ret a + b
}
adder(1, 2) <=> 3

// calls inside calls
adder(f3(), f3() + 1) <=> 7

// Passing functions
h := fn -> int {
    ret 1
}
g := fn f: fn -> int -> int{
    ret f()
}
g(h) <=> 1

// multiple returns
q := fn i: int -> int {
    if i == 1 {
        ret 2
    } else {
        ret 3
    }
}
q(1) <=> 2
q(0) <=> 3

// mixing function and value types
f5 := fn a: fn -> int, b: int -> int {
    ret a() + b
}
f5_inner := fn -> int {
    ret 1
}
f5(f5_inner, 2) <=> 3

factorial := fn n: int -> int {
    if n <= 1 {
        ret 1
    }
    ret n * factorial(n - 1)
}
factorial(5) <=> 120
factorial(6) <=> 720
factorial(12) <=> 479001600