aboutsummaryrefslogtreecommitdiff
path: root/test/tables.tm
blob: 3dd27b0f953515ab6a4ae013eadad53fc64adda4 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
func main():
	>> t := {"one":1, "two":2}
	= {"one":1, "two":2}

	>> t:get("one")
	= 1?
	>> t:get("two")
	= 2?
	>> t:get("???")
	= !Int
	>> t:get("one")!
	= 1
	>> t:get("???") or -1
	= -1

	t_str := ""
	for k,v in t:
		t_str ++= "($k:$v)"
	>> t_str
	= "(one:1)(two:2)"

	>> t.length
	= 2
	>> t.fallback
	= !{Text:Int}

	>> t.keys
	= ["one", "two"]
	>> t.values
	= [1, 2]

	>> t2 := {"three":3; fallback=t}
	= {"three":3; fallback={"one":1, "two":2}}

	>> t2:get("one")
	= 1?
	>> t2:get("three")
	= 3?
	>> t2:get("???")
	= !Int

	>> t2.length
	= 1
	>> t2.fallback
	= {"one":1, "two":2}?

	t2_str := ""
	for k,v in t2:
		t2_str ++= "($k:$v)"
	>> t2_str
	= "(three:3)"

	>> {i:10*i for i in 5}
	= {1:10, 2:20, 3:30, 4:40, 5:50}
	>> {i:10*i for i in 5 if i mod 2 != 0}
	= {1:10, 3:30, 5:50}
	>> {x:10*x for x in y if x > 1 for y in [3, 4, 5] if y < 5}
	= {2:20, 3:30, 4:40}

	>> t3 := {1:10, 2:20, 3:30}
	>> t3:remove(3)
	>> t3
	= {1:10, 2:20}

	do:
		>> plain := {1:10, 2:20, 3:30}
		>> plain:get(2)!
		= 20
		>> plain:get(2)!
		= 20
		>> plain:get(456) or -999
		= -999
		>> plain:has(2)
		= yes
		>> plain:has(456)
		= no

		>> fallback := {4:40; fallback=plain}
		>> fallback:has(1)
		= yes
		>> fallback:get(1) or -999
		= 10