--- simple iterators
f() gave 0
f() gave 1
f() gave 2
Foo.bar() gave 0
Foo.bar() gave 1
Foo.bar() gave 2
Foo.bar() gave 3
--- nested iterators
g() gave (0, '2 * 0 = 0')
g() gave (1, '2 * 1 = 2')
g() gave (2, '2 * 2 = 4')
Foo.baz() gave (0, '2 * 0 = 0')
Foo.baz() gave (1, '2 * 1 = 2')
Foo.baz() gave (2, '2 * 2 = 4')
f() gave 0, 0
f() gave 0, 1
f() gave 0, 2
f() gave 1, 0
f() gave 1, 1
f() gave 1, 2
f() gave 2, 0
f() gave 2, 1
f() gave 2, 2
--- iterator assignment
next(f()) gave 0
next(f()) gave 1
next(f()) gave 2
next(f()) gave 3
next(f()) gave 4
next(g()) gave (0, '2 * 0 = 0')
next(g()) gave (1, '2 * 1 = 2')
next(g()) gave (2, '2 * 2 = 4')
next(g()) gave (3, '2 * 3 = 6')
next(g()) gave (4, '2 * 4 = 8')
l[0] = 0
l[1] = 1
l[2] = 2
l[3] = 3
l[4] = 4