Path: blob/main/python/pylang/test/collections_.py
1396 views
# globals: assrt1# ARRAYS23# immutables4a = [4, 5, 6, 7]567# mutables8class Item:9pass101112i0 = Item()13i1 = Item()14i2 = Item()15b = [i0, i1]16assrt.ok(i0 != i1)1718# access and slicing19i = -120assrt.equal(len(a), 4)21assrt.equal(a[-1], 7)22assrt.equal(a[i], a[-1])23assrt.equal(a[-2], 6)24assrt.deepEqual(a[1:3], [5, 6])25assrt.deepEqual(a[:3], [4, 5, 6])26assrt.deepEqual(a[2:], [6, 7])27assrt.ok(7 in a)28assrt.ok(i1 in b)29assrt.ok(i2 not in b)30assrt.ok(b == b.copy())31assrt.ok([1] in [[1], [2]])32assrt.ok([3] not in [[1], [2]])3334if jstype(Symbol) is 'function':35ss = Symbol('s')36sym = {ss: 1}37assrt.equal(sym[ss], 1)383940def keyf():41return 1424344assrt.equal({keyf(): 2}[keyf()], 2)4546# assignment47a[-1] = 948assrt.equal(a[-1], 9)49s = [0, 1, 2, 3, 4]50s[:2] = [8, 9]51assrt.deepEqual(s, [8, 9, 2, 3, 4])52s[1:2] = [5]53assrt.deepEqual(s, [8, 5, 2, 3, 4])54s[-2:] = [1, 2]55assrt.deepEqual(s, [8, 5, 2, 1, 2])5657# extended slices58b = list(range(11))59s = 'abcde'60assrt.deepEqual(b[::2], [0, 2, 4, 6, 8, 10])61assrt.deepEqual(b[::-1], list(range(10, -1, -1)))62assrt.deepEqual(b[7:0:-1], [7, 6, 5, 4, 3, 2, 1])63assrt.deepEqual(b[7:1:-2], [7, 5, 3])64assrt.equal(s[::2], 'ace')65assrt.equal(s[::-1], 'edcba')66assrt.equal(s[4:0:-1], 'edcb')67assrt.equal(s[4:1:-2], 'ec')6869# sorting70a = [2, 1, 3]717273def getkey(x):74return 0757677a.pysort(key=getkey)78assrt.deepEqual(a, [2, 1, 3]) # stable sort79a.pysort(reverse=True)80assrt.deepEqual(a, [3, 2, 1])81a.pysort()82assrt.deepEqual(a, [1, 2, 3])8384# misc interface85a = [1, 2, 3]86assrt.equal(a.pypop(), 3)87assrt.deepEqual(a, [1, 2])88assrt.equal(a.pypop(0), 1)89assrt.deepEqual(a, [2])9091# strings92assrt.ok("tes" in "this is a test")9394one = "one"95two = "two"96one, two = two, one97[x, y, z] = 'x', 'y', 'z'98assrt.equal(one, "two")99assrt.equal(two, "one")100assrt.equal(x, 'x')101assrt.equal(y, 'y')102assrt.equal(z, 'z')103104# DICTIONARIES105d0 = {106'a': 'b',107'c': 2,108'd': 'd',109}110111112def fun1():113return 5114115116def fun2(c):117return c + 1118119120d1 = {'foo': 1, "bar": "baz", "fun1": fun1, 'fun2': fun2}121d2 = dict([[1, 2], [2, 3]], a='b')122123# access124assrt.ok('foo' in d1)125assrt.equal(d0.a, d0['a'])126assrt.equal(d1['fun1'](), 5)127assrt.equal(d1.fun2(3), 4)128assrt.equal(len(d0), 3)129assrt.equal(d2.get(1), 2)130assrt.equal(d2.get('a'), 'b')131132# assignment133d1["bar"] += "!"134assrt.equal(d1.bar, "baz!")135136# nested comparisons137x = 3138assrt.ok(1 < x <= 3)139assrt.ok(1 < x * x > 3)140# This is not valid Python syntax, so I'm commenting it out.141# assrt.ok(1 < (x+=1) < 5) # check that only one increment occurs142x += 1143assrt.equal(x, 4)144145# list comprehensions146e0 = [i * i for i in [0, 1, 2, 3]]147e1 = [x + y for x, y in enumerate(range(5, 0, -1))]148e2 = [e0 + 1 for e0 in range(6) if e0 % 3]149assrt.deepEqual(e0, [0, 1, 4, 9])150assrt.deepEqual(e1, [5, 5, 5, 5, 5])151assrt.deepEqual(e2, [2, 3, 5, 6])152hash = {153"foo": 1,154"bar": 1,155"baz": 1,156}157assrt.deepEqual(Object.keys(hash), [k for k in hash])158159a = {1: 2}160b = {2: 1}161assrt.ok(a != b)162b = a163assrt.ok(a == b)164b = {1: 2}165assrt.ok(a == b)166assrt.ok(r'js% {1:2}' == r'js% {1:2}')167168# iterating over TypedArrays169assrt.deepEqual(list(Uint8Array(2)), [0, 0])170assrt.deepEqual(list(Int32Array([1, -1])), [1, -1])171172# list times number173assrt.deepEqual([1, [2], 'a'] * 3, [1, [2], 'a', 1, [2], 'a', 1, [2], 'a'])174175176