xref: /aosp_15_r20/external/starlark-go/starlark/testdata/tuple.star (revision 4947cdc739c985f6d86941e22894f5cefe7c9e9a)
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