1 # Test a[1]
2
3 #### precedence of 1:3 vs comparison
4
5 # This test exposed nondeterminism in CPython itself! Gah. Is this because of
6 # the hashing?
7 # Python xrange objects probably shouldn't even be comparable!
8 #
9 # = 1:3 < 1:4
10 # >>> xrange(1,3) < xrange(1,4)
11 # False
12 # >>> xrange(1,3) < xrange(1,4)
13 # True
14
15 = 1:3
16
17 ## STDOUT:
18 (xrange) xrange(1, 3)
19 ## END
20
21 #### precedence of 1:3 vs bitwise operator
22 = 3:3|4
23 ## STDOUT:
24 (xrange) xrange(3, 7)
25 ## END
26
27 #### subscript and slice :| 1 2 3 4 |
28 var myarray = :|1 2 3 4|
29 = myarray[1]
30 = myarray[1:3]
31
32 echo 'implicit'
33 = myarray[:2]
34 = myarray[2:]
35
36 echo 'out of bounds'
37 = myarray[:5]
38 = myarray[-5:]
39
40 # Stride not supported
41 #= myarray[1:4:2]
42
43 # Now try omitting smoe
44 #= myarray[1:4:2]
45 ## STDOUT:
46 (Str) '2'
47 (List) ['2', '3']
48 implicit
49 (List) ['1', '2']
50 (List) ['3', '4']
51 out of bounds
52 (List) ['1', '2', '3', '4']
53 (List) ['1', '2', '3', '4']
54 ## END
55
56 #### subscript and slice of List
57 var mylist = [1,2,3,4]
58 = mylist[1]
59 = mylist[1:3]
60
61 echo 'implicit'
62 = mylist[:2]
63 = mylist[2:]
64 ## STDOUT:
65 (Int) 2
66 (List) [2, 3]
67 implicit
68 (List) [1, 2]
69 (List) [3, 4]
70 ## END
71
72 #### expressions and negative indices
73 var myarray = %(1 2 3 4 5)
74 = myarray[-1]
75 = myarray[-4:-2]
76
77 echo 'implicit'
78 = myarray[:-2]
79 = myarray[-2:]
80 ## STDOUT:
81 (Str) '5'
82 (List) ['2', '3']
83 implicit
84 (List) ['1', '2', '3']
85 (List) ['4', '5']
86 ## END
87
88 #### Index with expression
89 var mydict = {['5']: 3}
90 var val = mydict["$[2+3]"]
91 echo $val
92 ## STDOUT:
93 3
94 ## END
95
96 #### Copy wtih a[:]
97 var a = [1,2,3]
98 var b = a[:]
99 = b
100 ## STDOUT:
101 (List) [1, 2, 3]
102 ## END
103
104 #### Slices with Multiple Dimensions (for QTT)
105
106 qtt pretty :mytable <<< '''
107 name age:Int
108 alice 42
109 bob 31
110 carol 20
111 '''
112
113 # Cut off the first two rows
114 var t1 = mytable[2:, :]
115 = t1
116
117 var t2 = mytable[:2, 3:4]
118 = t2
119
120 var t3 = mytable[:2, %(name age)]
121 = t3
122
123 ## STDOUT:
124 (Str) 'TODO: Table Slicing'
125 (Str) 'TODO: Table Slicing'
126 ## END
127
128 #### Index a list with a range, not a slice. TODO: Figure out semantics
129 shopt -s oil:all
130 var mylist = [1,2,3,4,5]
131 var r = 1:3
132 var myslice = mylist[r]
133 ## status: 3
134 ## STDOUT:
135 TODO
136 ## END
137
138 #### List(0:3) should copy the list?
139 shopt -s oil:all
140 var mylist = List(0:3)
141 write @mylist
142 ## STDOUT:
143 0
144 1
145 2
146 ## END