--- 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