content: # test adapted from https://github.com/python/cpython/blob/master/Lib/test/test_range.py
  
  @test
  def test_range():
      assert list(range(3)) == [0, 1, 2]
      assert list(range(1, 5)) == [1, 2, 3, 4]
      assert list(range(0)) == list[int]()
      assert list(range(-3)) == list[int]()
      assert list(range(1, 10, 3)) == [1, 4, 7]
      assert list(range(5, -5, -3)) == [5, 2, -1, -4]
  
      a = 10
      b = 100
      c = 50
  
      assert list(range(a, a+2)) == [a, a+1]
      assert list(range(a+2, a, -1)) == [a+2, a+1]
      assert list(range(a+4, a, -2)) == [a+4, a+2]
  
      s = list(range(a, b, c))
      assert a in s
      assert b not in s
      assert len(s) == 2
  
      s = list(range(b, a, -c))
      assert b in s
      assert a not in s
      assert len(s) == 2
  
      s = list(range(-a, -b, -c))
      assert -a in s
      assert -b not in s
      assert len(s) == 2
  
      val_err = False
      try:
          range(1, 2, 0)
      except ValueError:
          val_err = True
      assert val_err
  
  @test
  def test_index():
      u = range(2)
      assert u.index(0) == 0
      assert u.index(1) == 1
      val_err = False
      try:
          u.index(2)
      except ValueError:
          val_err = True
      assert val_err
  
      u = range(-2, 3)
      assert u.count(0) == 1
      assert u.index(0) == 2
  
      a = range(-2, 3)
      assert a.index(0) == 2
  
      assert range(1, 10, 3).index(4) == 1
      assert range(1, -10, -3).index(-5) == 2
  
  @test
  def test_count():
      assert range(3).count(-1) == 0
      assert range(3).count(0) == 1
      assert range(3).count(1) == 1
      assert range(3).count(2) == 1
      assert range(3).count(3) == 0
      assert range(3).index(1) == 1
      assert range(7, 0, -2).count(5) == 1
      assert range(7, 0, -2).count(-2) == 0
      assert range(7, 0, -1).count(0) == 0
      assert range(7, 0, -1).count(1) == 1
  
  @test
  def test_repr():
      assert str(range(1)) == 'range(0, 1)'
      assert str(range(1, 2)) == 'range(1, 2)'
      assert str(range(1, 2, 3)) == 'range(1, 2, 3)'
  
  @test
  def test_strided_limits():
      r = range(0, 101, 2)
      assert 0 in r
      assert 1 not in r
      assert 2 in r
      assert 99 not in r
      assert 100 in r
      assert 101 not in r
  
      r = range(0, -20, -1)
      assert 0 in r
      assert -1 in r
      assert -19 in r
      assert -20 not in r
  
      r = range(0, -20, -2)
      assert -18 in r
      assert -19 not in r
      assert -20 not in r
  
  @test
  def test_empty():
      r = range(0)
      assert 0 not in r
      assert 1 not in r
  
      r = range(0, -10)
      assert 0 not in r
      assert -1 not in r
      assert 1 not in r
  
  @test
  def test_slice():
      r = range(10)
      assert list(r[:2]) == list(r)[:2]
      assert list(r[0:2]) == list(r)[0:2]
      assert list(r[0:20]) == list(r)[0:20]
      assert list(r[:20]) == list(r)[:20]
      assert list(r[1:2]) == list(r)[1:2]
      assert list(r[20:30]) == list(r)[20:30]
      assert list(r[-30:-20]) == list(r)[-30:-20]
      assert list(r[-1:100:2]) == list(r)[-1:100:2]
      assert list(r[0:-1]) == list(r)[0:-1]
      assert list(r[-1:-3:-1]) == list(r)[-1:-3:-1]
  
      r = range(0)
      assert list(r[:2]) == list(r)[:2]
      assert list(r[0:2]) == list(r)[0:2]
      assert list(r[0:20]) == list(r)[0:20]
      assert list(r[:20]) == list(r)[:20]
      assert list(r[1:2]) == list(r)[1:2]
      assert list(r[20:30]) == list(r)[20:30]
      assert list(r[-30:-20]) == list(r)[-30:-20]
      assert list(r[-1:100:2]) == list(r)[-1:100:2]
      assert list(r[0:-1]) == list(r)[0:-1]
      assert list(r[-1:-3:-1]) == list(r)[-1:-3:-1]
  
      r = range(1, 9, 3)
      assert list(r[:2]) == list(r)[:2]
      assert list(r[0:2]) == list(r)[0:2]
      assert list(r[0:20]) == list(r)[0:20]
      assert list(r[:20]) == list(r)[:20]
      assert list(r[1:2]) == list(r)[1:2]
      assert list(r[20:30]) == list(r)[20:30]
      assert list(r[-30:-20]) == list(r)[-30:-20]
      assert list(r[-1:100:2]) == list(r)[-1:100:2]
      assert list(r[0:-1]) == list(r)[0:-1]
      assert list(r[-1:-3:-1]) == list(r)[-1:-3:-1]
  
      r = range(8, 0, -3)
      assert list(r[:2]) == list(r)[:2]
      assert list(r[0:2]) == list(r)[0:2]
      assert list(r[0:20]) == list(r)[0:20]
      assert list(r[:20]) == list(r)[:20]
      assert list(r[1:2]) == list(r)[1:2]
      assert list(r[20:30]) == list(r)[20:30]
      assert list(r[-30:-20]) == list(r)[-30:-20]
      assert list(r[-1:100:2]) == list(r)[-1:100:2]
      assert list(r[0:-1]) == list(r)[0:-1]
      assert list(r[-1:-3:-1]) == list(r)[-1:-3:-1]
  
  @test
  def test_contains():
      r = range(10)
      assert 0 in r
      assert 1 in r
      assert 5 in r
      assert -1 not in r
      assert 10 not in r
  
      r = range(9, -1, -1)
      assert 0 in r
      assert 1 in r
      assert 5 in r
      assert -1 not in r
      assert 10 not in r
  
      r = range(0, 10, 2)
      assert 0 in r
      assert 1 not in r
      assert 5 not in r
      assert -1 not in r
      assert 10 not in r
  
      r = range(9, -1, -2)
      assert 0 not in r
      assert 1 in r
      assert 5 in r
      assert -1 not in r
      assert 10 not in r
  
  @test
  def test_reverse_iteration():
      for r in [range(10),
                range(0),
                range(1, 9, 3),
                range(8, 0, -3),
                ]:
          assert list(reversed(r)) == list(r)[::-1]
  
  test_range()
  test_index()
  test_count()
  test_repr()
  test_strided_limits()
  test_empty()
  test_slice()
  test_contains()
  test_reverse_iteration()
  