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 range of array
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 # Stride not supported
37 #= myarray[1:4:2]
38
39 # Now try omitting smoe
40 #= myarray[1:4:2]
41 ## STDOUT:
42 (Str) '2'
43 (List) ['2', '3']
44 implicit
45 (List) ['1', '2']
46 (List) ['3', '4']
47 ## END
48
49 #### subscript and range of list
50 var mylist = [1,2,3,4]
51 = mylist[1]
52 = mylist[1:3]
53
54 echo 'implicit'
55 = mylist[:2]
56 = mylist[2:]
57 ## STDOUT:
58 (Int) 2
59 (List) [2, 3]
60 implicit
61 (List) [1, 2]
62 (List) [3, 4]
63 ## END
64
65 #### expressions and negative indices
66 var myarray = %(1 2 3 4 5)
67 = myarray[-1]
68 = myarray[-4:-2]
69
70 echo 'implicit'
71 = myarray[:-2]
72 = myarray[-2:]
73 ## STDOUT:
74 (Str) '5'
75 (List) ['2', '3']
76 implicit
77 (List) ['1', '2', '3']
78 (List) ['4', '5']
79 ## END
80
81 #### Explicit slice with step
82 shopt -s oil:all
83 var mylist = [0,1,2,3,4,5,6,7,8]
84 var x = mylist[slice(1, 7, 2)]
85 write @x
86 ## STDOUT:
87 1
88 3
89 5
90 ## END
91
92 #### Index with expression
93 var mydict = {['5']: 3}
94 var val = mydict["$[2+3]"]
95 echo $val
96 ## STDOUT:
97 3
98 ## END
99
100 #### Copy wtih a[:]
101 var a = [1,2,3]
102 var b = a[:]
103 = b
104 ## STDOUT:
105 (List) [1, 2, 3]
106 ## END
107
108 #### Slices with Multiple Dimensions (for QTT)
109
110 qtt pretty :mytable <<< '''
111 name age:Int
112 alice 42
113 bob 31
114 carol 20
115 '''
116
117 # Cut off the first two rows
118 var t1 = mytable[2:, :]
119 = t1
120
121 var t2 = mytable[:2, 3:4]
122 = t2
123
124 var t3 = mytable[:2, %(name age)]
125 = t3
126
127 ## STDOUT:
128 (Str) 'TODO: Table Slicing'
129 (Str) 'TODO: Table Slicing'
130 ## END
131
132 #### Index a list with a range, not a slice. TODO: Figure out semantics
133 shopt -s oil:all
134 var mylist = [1,2,3,4,5]
135 var r = 1:3
136 var myslice = mylist[r]
137 ## status: 3
138 ## STDOUT:
139 TODO
140 ## END
141
142 #### List(0:3) should copy the list?
143 shopt -s oil:all
144 var mylist = List(0:3)
145 write @mylist
146 ## STDOUT:
147 0
148 1
149 2
150 ## END