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). 56