aboutsummaryrefslogtreecommitdiff
path: root/test/reductions.tm
blob: 15c3d454f47bbccbe2183fb8fdd51b54984a1b75 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
struct Foo(x,y:Int)

func main()
	>> (+: [10, 20, 30])
	= 60

	>> empty_ints : [Int]
	>> (+: empty_ints)
	= none

	>> (+: [10, 20, 30]) or 0
	= 60

	>> (+: empty_ints) or 0
	= 0

	>> (_max_: [3, 5, 2, 1, 4])
	= 5

	>> (_max_.abs(): [1, -10, 5])
	= -10

	>> (_max_: [Foo(0, 0), Foo(1, 0), Foo(0, 10)])!
	= Foo(x=1, y=0)
	>> (_max_.y: [Foo(0, 0), Foo(1, 0), Foo(0, 10)])!
	= Foo(x=0, y=10)
	>> (_max_.y.abs(): [Foo(0, 0), Foo(1, 0), Foo(0, 10), Foo(0, -999)])!
	= Foo(x=0, y=-999)

	say("(or) and (and) have early out behavior:")
	>> (or: i == 3 for i in 9999999999999999999999999999)!
	= yes

	>> (and: i < 10 for i in 9999999999999999999999999999)!
	= no

	>> (<=: [1, 2, 2, 3, 4])!
	= yes

	>> (<=: empty_ints)
	= none

	>> (<=: [5, 4, 3, 2, 1])!
	= no

	>> (==: ["x", "y", "z"])
	= no
	>> (==.length: ["x", "y", "z"])
	= yes
	>> (+.length: ["x", "xy", "xyz"])
	= 6

	>> (+.abs(): [1, 2, -3])
	= 6