| // run |
| |
| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "iter" |
| ) |
| |
| func All() iter.Seq[int] { |
| return func(yield func(int) bool) { |
| for i := 0; i < 10; i++ { |
| growStack(512) |
| if !yield(i) { |
| return |
| } |
| } |
| } |
| } |
| |
| type S struct { |
| round int |
| } |
| |
| func NewS(round int) *S { |
| s := &S{round: round} |
| return s |
| } |
| |
| func (s *S) check(round int) { |
| if s.round != round { |
| panic("bad round") |
| } |
| } |
| |
| func f() { |
| rounds := 0 |
| s := NewS(rounds) |
| s.check(rounds) |
| |
| for range All() { |
| s.check(rounds) |
| rounds++ |
| s = NewS(rounds) |
| s.check(rounds) |
| } |
| } |
| |
| func growStack(i int) { |
| if i == 0 { |
| return |
| } |
| growStack(i - 1) |
| } |
| |
| func main() { |
| f() |
| } |