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