mirror of https://github.com/exaloop/codon.git
111 lines
2.4 KiB
Python
111 lines
2.4 KiB
Python
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()
|