# SPDX-License-Identifier: MIT
for bounds in [(0,0,1),(0,5,1),(2,9,3),(9,1,-3),(1,9,-1)]:
    sequence=range(bounds[0],bounds[1],bounds[2])
    print(sequence,sequence.start,sequence.stop,sequence.step,len(sequence),bool(sequence),list(sequence))
    print(all(sequence),any(sequence),isinstance(sequence,range))
    for item in [-1,0,1,2,3,4,5,9]:
        print(item in sequence,item not in sequence,end=';')
    print()
    for index in [-999999999999999999999,-2,-1,0,1,2,999999999999999999999]:
        try:
            print(sequence[index],end=';')
        except IndexError as error:
            print(str(error),end=';')
    print()
print(True in range(3),False in range(1),'1' in range(3))
print(range(0)==range(2,2,3),range(1,2)==range(1,9,10),range(0,3,2)==range(0,4,2))
print(range(3)!=range(4),range(3)==[0,1,2],range(3)==range(3,0,-1))
original=range(4)
alias=original
print(original is alias,original is range(4))
print(list(original),list(original))
original=range(2)
print(list(original),list(alias))
for stride in [-2,-1,1,2]:
    print(list(range(6)[::stride]),range(6)[::stride])
print(range(1,20,3)[1:5:2],range(1,20,3)[::-1])
print(range(10)[999999999999999999999::-999999999999999999999])
huge=range(0,10**40,3)
print(huge[10**30],huge[-1],bool(huge),10**30 in huge)
print(huge[10**30:10**30+4],list(huge[10**30:10**30+4]))
try:
    len(huge)
except OverflowError as error:
    print(repr(error))
try:
    range(1,5,0)
except ValueError as error:
    print(repr(error))
try:
    for impossible in range(1,5,0):
        print('unreachable')
except ValueError as error:
    print(repr(error))
try:
    original[::0]
except ValueError as error:
    print(repr(error))
for step in [2,-2]:
    for number in range(0,5,step):
        print(number,end=' ')
    print()
source=range(4)
for number in source:
    source=range(0)
    try:
        if number==1:continue
        if number==3:break
        print('walk',number)
    finally:
        print('cleanup',number)
else:
    print('unreachable else')
print(list(source),[item for item in range(2,8,2)])

print(range(True,5,True),list(range(True,5,True)))
print(set(range(5))=={0,1,2,3,4},frozenset(range(0))==frozenset())
print([int(all(range(0))),int(any(range(0))),int(any(range(10**40))),int(all(range(10**40)))])
boolean=range(True,5,True)
print(boolean,boolean.start,boolean.stop,boolean.step,isinstance(boolean.start,bool),list(boolean))
print(range(True),range(True).stop,range(True)[:])
for searched in [-2,0,1,2,5,8,10**40]:
    print(range(2,9,2).count(searched))
    try:
        print(range(2,9,2).index(searched))
    except ValueError as error:
        print(repr(error))
print(range(3).index(True),range(3).count(False),range(3).count('x'))
try:
    range(3).index('x')
except ValueError as error:
    print(repr(error))
print(huge.index(huge[10**30]))
mapping={range(0,3,2):'original'}
print(mapping[range(0,4,2)],mapping)
print(set([range(0,3,2),range(0,4,2)])=={range(0,3,2)})
print(repr(ValueError(range(3))),str(ValueError(range(3))))
