1# Tests of Starlark 'tuple'
2
3load("assert.star", "assert")
4
5# literal
6assert.eq((), ())
7assert.eq((1), 1)
8assert.eq((1,), (1,))
9assert.ne((1), (1,))
10assert.eq((1, 2), (1, 2))
11assert.eq((1, 2, 3, 4, 5), (1, 2, 3, 4, 5))
12assert.ne((1, 2, 3), (1, 2, 4))
13
14# truth
15assert.true((False,))
16assert.true((False, False))
17assert.true(not ())
18
19# indexing, x[i]
20assert.eq(("a", "b")[0], "a")
21assert.eq(("a", "b")[1], "b")
22
23# slicing, x[i:j]
24assert.eq("abcd"[0:4:1], "abcd")
25assert.eq("abcd"[::2], "ac")
26assert.eq("abcd"[1::2], "bd")
27assert.eq("abcd"[4:0:-1], "dcb")
28banana = tuple("banana".elems())
29assert.eq(banana[7::-2], tuple("aaa".elems()))
30assert.eq(banana[6::-2], tuple("aaa".elems()))
31assert.eq(banana[5::-2], tuple("aaa".elems()))
32assert.eq(banana[4::-2], tuple("nnb".elems()))
33
34# tuple
35assert.eq(tuple(), ())
36assert.eq(tuple("abc".elems()), ("a", "b", "c"))
37assert.eq(tuple(["a", "b", "c"]), ("a", "b", "c"))
38assert.eq(tuple([1]), (1,))
39assert.fails(lambda: tuple(1), "got int, want iterable")
40
41# tuple * int, int * tuple
42abc = tuple("abc".elems())
43assert.eq(abc * 0, ())
44assert.eq(abc * -1, ())
45assert.eq(abc * 1, abc)
46assert.eq(abc * 3, ("a", "b", "c", "a", "b", "c", "a", "b", "c"))
47assert.eq(0 * abc, ())
48assert.eq(-1 * abc, ())
49assert.eq(1 * abc, abc)
50assert.eq(3 * abc, ("a", "b", "c", "a", "b", "c", "a", "b", "c"))
51assert.fails(lambda: abc * (1000000 * 1000000), "repeat count 1000000000000 too large")
52assert.fails(lambda: abc * 1000000 * 1000000, "excessive repeat \\(3000000 \\* 1000000 elements")
53
54# TODO(adonovan): test use of tuple as sequence
55# (for loop, comprehension, library functions).
View as plain text