Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/python-wasm
Path: blob/main/python/pylang/test/collections_.py
1396 views
1
# globals: assrt
2
# ARRAYS
3
4
# immutables
5
a = [4, 5, 6, 7]
6
7
8
# mutables
9
class Item:
10
pass
11
12
13
i0 = Item()
14
i1 = Item()
15
i2 = Item()
16
b = [i0, i1]
17
assrt.ok(i0 != i1)
18
19
# access and slicing
20
i = -1
21
assrt.equal(len(a), 4)
22
assrt.equal(a[-1], 7)
23
assrt.equal(a[i], a[-1])
24
assrt.equal(a[-2], 6)
25
assrt.deepEqual(a[1:3], [5, 6])
26
assrt.deepEqual(a[:3], [4, 5, 6])
27
assrt.deepEqual(a[2:], [6, 7])
28
assrt.ok(7 in a)
29
assrt.ok(i1 in b)
30
assrt.ok(i2 not in b)
31
assrt.ok(b == b.copy())
32
assrt.ok([1] in [[1], [2]])
33
assrt.ok([3] not in [[1], [2]])
34
35
if jstype(Symbol) is 'function':
36
ss = Symbol('s')
37
sym = {ss: 1}
38
assrt.equal(sym[ss], 1)
39
40
41
def keyf():
42
return 1
43
44
45
assrt.equal({keyf(): 2}[keyf()], 2)
46
47
# assignment
48
a[-1] = 9
49
assrt.equal(a[-1], 9)
50
s = [0, 1, 2, 3, 4]
51
s[:2] = [8, 9]
52
assrt.deepEqual(s, [8, 9, 2, 3, 4])
53
s[1:2] = [5]
54
assrt.deepEqual(s, [8, 5, 2, 3, 4])
55
s[-2:] = [1, 2]
56
assrt.deepEqual(s, [8, 5, 2, 1, 2])
57
58
# extended slices
59
b = list(range(11))
60
s = 'abcde'
61
assrt.deepEqual(b[::2], [0, 2, 4, 6, 8, 10])
62
assrt.deepEqual(b[::-1], list(range(10, -1, -1)))
63
assrt.deepEqual(b[7:0:-1], [7, 6, 5, 4, 3, 2, 1])
64
assrt.deepEqual(b[7:1:-2], [7, 5, 3])
65
assrt.equal(s[::2], 'ace')
66
assrt.equal(s[::-1], 'edcba')
67
assrt.equal(s[4:0:-1], 'edcb')
68
assrt.equal(s[4:1:-2], 'ec')
69
70
# sorting
71
a = [2, 1, 3]
72
73
74
def getkey(x):
75
return 0
76
77
78
a.pysort(key=getkey)
79
assrt.deepEqual(a, [2, 1, 3]) # stable sort
80
a.pysort(reverse=True)
81
assrt.deepEqual(a, [3, 2, 1])
82
a.pysort()
83
assrt.deepEqual(a, [1, 2, 3])
84
85
# misc interface
86
a = [1, 2, 3]
87
assrt.equal(a.pypop(), 3)
88
assrt.deepEqual(a, [1, 2])
89
assrt.equal(a.pypop(0), 1)
90
assrt.deepEqual(a, [2])
91
92
# strings
93
assrt.ok("tes" in "this is a test")
94
95
one = "one"
96
two = "two"
97
one, two = two, one
98
[x, y, z] = 'x', 'y', 'z'
99
assrt.equal(one, "two")
100
assrt.equal(two, "one")
101
assrt.equal(x, 'x')
102
assrt.equal(y, 'y')
103
assrt.equal(z, 'z')
104
105
# DICTIONARIES
106
d0 = {
107
'a': 'b',
108
'c': 2,
109
'd': 'd',
110
}
111
112
113
def fun1():
114
return 5
115
116
117
def fun2(c):
118
return c + 1
119
120
121
d1 = {'foo': 1, "bar": "baz", "fun1": fun1, 'fun2': fun2}
122
d2 = dict([[1, 2], [2, 3]], a='b')
123
124
# access
125
assrt.ok('foo' in d1)
126
assrt.equal(d0.a, d0['a'])
127
assrt.equal(d1['fun1'](), 5)
128
assrt.equal(d1.fun2(3), 4)
129
assrt.equal(len(d0), 3)
130
assrt.equal(d2.get(1), 2)
131
assrt.equal(d2.get('a'), 'b')
132
133
# assignment
134
d1["bar"] += "!"
135
assrt.equal(d1.bar, "baz!")
136
137
# nested comparisons
138
x = 3
139
assrt.ok(1 < x <= 3)
140
assrt.ok(1 < x * x > 3)
141
# This is not valid Python syntax, so I'm commenting it out.
142
# assrt.ok(1 < (x+=1) < 5) # check that only one increment occurs
143
x += 1
144
assrt.equal(x, 4)
145
146
# list comprehensions
147
e0 = [i * i for i in [0, 1, 2, 3]]
148
e1 = [x + y for x, y in enumerate(range(5, 0, -1))]
149
e2 = [e0 + 1 for e0 in range(6) if e0 % 3]
150
assrt.deepEqual(e0, [0, 1, 4, 9])
151
assrt.deepEqual(e1, [5, 5, 5, 5, 5])
152
assrt.deepEqual(e2, [2, 3, 5, 6])
153
hash = {
154
"foo": 1,
155
"bar": 1,
156
"baz": 1,
157
}
158
assrt.deepEqual(Object.keys(hash), [k for k in hash])
159
160
a = {1: 2}
161
b = {2: 1}
162
assrt.ok(a != b)
163
b = a
164
assrt.ok(a == b)
165
b = {1: 2}
166
assrt.ok(a == b)
167
assrt.ok(r'js% {1:2}' == r'js% {1:2}')
168
169
# iterating over TypedArrays
170
assrt.deepEqual(list(Uint8Array(2)), [0, 0])
171
assrt.deepEqual(list(Int32Array([1, -1])), [1, -1])
172
173
# list times number
174
assrt.deepEqual([1, [2], 'a'] * 3, [1, [2], 'a', 1, [2], 'a', 1, [2], 'a'])
175
176