aboutsummaryrefslogtreecommitdiff
path: root/test/iterators.tm
blob: 7b4fe1f66f6b9eb911bf7c83f5d4018a5addd056 (plain)
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

struct Pair(x:Text, y:Text)

func pairwise(strs:[Text] -> func(->Pair?))
    i := 1
    return func(-> Pair?)
        i += 1
        return Pair(strs[i-1] or return none, strs[i] or return none)

func range(first:Int, last:Int -> func(->Int?))
    i := first
    return func(->Int?)
        if i > last
            return none
        i += 1
        return (i-1)

func main()
    values := ["A", "B", "C", "D"]

    assert (++: "($(foo.x)$(foo.y))" for foo in pairwise(values))! == "(AB)(BC)(CD)"
    assert ["$(foo.x)$(foo.y)" for foo in pairwise(values)] == ["AB", "BC", "CD"]

    do
        result : @[Text]
        for foo in pairwise(values)
            result.insert("$(foo.x)$(foo.y)")
        assert result[] == ["AB", "BC", "CD"]

    assert [i for i in range(5, 10)] == [5, 6, 7, 8, 9, 10]

    assert (+: range(5, 10))! == 45