1# test builtin range type
2
3# print
4print(range(4))
5
6# bool
7print(bool(range(0)))
8print(bool(range(10)))
9
10# len
11print(len(range(0)))
12print(len(range(4)))
13print(len(range(1, 4)))
14print(len(range(1, 4, 2)))
15print(len(range(1, 4, -1)))
16print(len(range(4, 1, -1)))
17print(len(range(4, 1, -2)))
18
19# subscr
20print(range(4)[0])
21print(range(4)[1])
22print(range(4)[-1])
23
24# slice
25print(range(4)[0:])
26print(range(4)[1:])
27print(range(4)[1:2])
28print(range(4)[1:3])
29print(range(4)[1::2])
30print(range(4)[1:-2:2])
31print(range(1, 4)[:])
32print(range(1, 4)[0:])
33print(range(1, 4)[1:])
34print(range(1, 4)[:-1])
35print(range(7, -2, -4)[:])
36print(range(1, 100, 5)[5:15:3])
37print(range(1, 100, 5)[15:5:-3])
38print(range(100, 1, -5)[5:15:3])
39print(range(100, 1, -5)[15:5:-3])
40
41# for this case uPy gives a different stop value but the listed elements are still correct
42print(list(range(7, -2, -4)[2:-2:]))
43
44# zero step
45try:
46    range(1, 2, 0)
47except ValueError:
48    print("ValueError")
49
50# bad unary op
51try:
52    -range(1)
53except TypeError:
54    print("TypeError")
55
56# bad subscription (can't store)
57try:
58    range(1)[0] = 1
59except TypeError:
60    print("TypeError")
61