content: v = range(5)
  print len(v)  # EXPECT: 5
  print 2 in v  # EXPECT: True
  print 5 in v  # EXPECT: False
  print [a for a in v]  # EXPECT: [0, 1, 2, 3, 4]
  print list(reversed(v))  # EXPECT: [4, 3, 2, 1, 0]
  print bool(v)  # EXPECT: True
  
  v = range(10, 2, -3)
  print len(v)  # EXPECT: 3
  print 13 in v  # EXPECT: False
  print 10 in v  # EXPECT: True
  print 7 in v  # EXPECT: True
  print 4 in v  # EXPECT: True
  print 1 in v  # EXPECT: False
  print [a for a in v]  # EXPECT: [10, 7, 4]
  print list(reversed(v))  # EXPECT: [4, 7, 10]
  print bool(v)  # EXPECT: True
  
  v = range(10, 2, 3)
  print len(v)  # EXPECT: 0
  print 13 in v  # EXPECT: False
  print 10 in v  # EXPECT: False
  print 7 in v  # EXPECT: False
  print 4 in v  # EXPECT: False
  print 1 in v  # EXPECT: False
  print [a for a in v]  # EXPECT: []
  print list(reversed(v))  # EXPECT: []
  print bool(v)  # EXPECT: False
  
  def perms[T](elements: list[T]):
      if len(elements) <=1:
          yield elements
      else:
          for perm in perms(elements[1:]):
              for i in range(len(elements)):
                  yield perm[:i] + elements[0:1] + perm[i:]
  
  for a in perms([1,2,3,4]):
      print a
  
  # EXPECT: [1, 2, 3, 4]
  # EXPECT: [2, 1, 3, 4]
  # EXPECT: [2, 3, 1, 4]
  # EXPECT: [2, 3, 4, 1]
  # EXPECT: [1, 3, 2, 4]
  # EXPECT: [3, 1, 2, 4]
  # EXPECT: [3, 2, 1, 4]
  # EXPECT: [3, 2, 4, 1]
  # EXPECT: [1, 3, 4, 2]
  # EXPECT: [3, 1, 4, 2]
  # EXPECT: [3, 4, 1, 2]
  # EXPECT: [3, 4, 2, 1]
  # EXPECT: [1, 2, 4, 3]
  # EXPECT: [2, 1, 4, 3]
  # EXPECT: [2, 4, 1, 3]
  # EXPECT: [2, 4, 3, 1]
  # EXPECT: [1, 4, 2, 3]
  # EXPECT: [4, 1, 2, 3]
  # EXPECT: [4, 2, 1, 3]
  # EXPECT: [4, 2, 3, 1]
  # EXPECT: [1, 4, 3, 2]
  # EXPECT: [4, 1, 3, 2]
  # EXPECT: [4, 3, 1, 2]
  # EXPECT: [4, 3, 2, 1]
  
  
  def mysum[T](start: T):
      m = start
      while True:
          a = (yield)
          if a == -1:
              break
          m += a
      yield m
  
  iadder = mysum(0)
  next(iadder)
  for i in range(10):
      iadder.send(i)
  print(iadder.send(-1))  # EXPECT: 45
  
  fadder = mysum(0.0)
  next(fadder)
  for i in range(10):
      fadder.send(float(i))
  print(fadder.send(-1.0))  # EXPECT: 45
  
  
  @test
  def test_generator_in_finally():
      def foo(n):
          if not n:
              raise ValueError('not n')
          return n
  
      b = False
      try:
          try:
              a = 1
              x = 2
              z = 0
              for a in (foo(i) * x for i in [a,2,3,4,z,5] * x):
                  pass
          finally:
              b = True
      except ValueError as e:
          assert e.message == 'not n'
      assert b
  test_generator_in_finally()
  