@@ -10,6 +10,7 @@ import (
10
10
"flag"
11
11
"fmt"
12
12
"io"
13
+ "iter"
13
14
"reflect"
14
15
"strings"
15
16
"sync"
@@ -601,15 +602,17 @@ var execTests = []execTest{
601
602
{"declare in range" , "{{range $x := .PSI}}<{{$foo:=$x}}{{$x}}>{{end}}" , "<21><22><23>" , tVal , true },
602
603
{"range count" , `{{range $i, $x := count 5}}[{{$i}}]{{$x}}{{end}}` , "[0]a[1]b[2]c[3]d[4]e" , tVal , true },
603
604
{"range nil count" , `{{range $i, $x := count 0}}{{else}}empty{{end}}` , "empty" , tVal , true },
604
- {"range iter.Seq[int]" , `{{range $i := .}}{{$i}}{{end}}` , "01" , fVal1 , true },
605
- {"i = range iter.Seq[int]" , `{{$i := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal1 , true },
606
- {"range iter.Seq[int] over two var" , `{{range $i, $c := .}}{{$c}}{{end}}` , "" , fVal1 , false },
607
- {"i, c := range iter.Seq2[int,int]" , `{{range $i, $c := .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 , true },
608
- {"i, c = range iter.Seq2[int,int]" , `{{$i := 0}}{{$c := 0}}{{range $i, $c = .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 , true },
609
- {"i = range iter.Seq2[int,int]" , `{{$i := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal2 , true },
610
- {"i := range iter.Seq2[int,int]" , `{{range $i := .}}{{$i}}{{end}}` , "01" , fVal2 , true },
611
- {"i,c,x range iter.Seq2[int,int]" , `{{$i := 0}}{{$c := 0}}{{$x := 0}}{{range $i, $c = .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 , true },
612
- {"i,x range iter.Seq[int]" , `{{$i := 0}}{{$x := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal1 , true },
605
+ {"range iter.Seq[int]" , `{{range $i := .}}{{$i}}{{end}}` , "01" , fVal1 (2 ), true },
606
+ {"i = range iter.Seq[int]" , `{{$i := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal1 (2 ), true },
607
+ {"range iter.Seq[int] over two var" , `{{range $i, $c := .}}{{$c}}{{end}}` , "" , fVal1 (2 ), false },
608
+ {"i, c := range iter.Seq2[int,int]" , `{{range $i, $c := .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 (2 ), true },
609
+ {"i, c = range iter.Seq2[int,int]" , `{{$i := 0}}{{$c := 0}}{{range $i, $c = .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 (2 ), true },
610
+ {"i = range iter.Seq2[int,int]" , `{{$i := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal2 (2 ), true },
611
+ {"i := range iter.Seq2[int,int]" , `{{range $i := .}}{{$i}}{{end}}` , "01" , fVal2 (2 ), true },
612
+ {"i,c,x range iter.Seq2[int,int]" , `{{$i := 0}}{{$c := 0}}{{$x := 0}}{{range $i, $c = .}}{{$i}}{{$c}}{{end}}` , "0112" , fVal2 (2 ), true },
613
+ {"i,x range iter.Seq[int]" , `{{$i := 0}}{{$x := 0}}{{range $i = .}}{{$i}}{{end}}` , "01" , fVal1 (2 ), true },
614
+ {"range iter.Seq[int] else" , `{{range $i := .}}{{$i}}{{else}}empty{{end}}` , "empty" , fVal1 (0 ), true },
615
+ {"range iter.Seq2[int,int] else" , `{{range $i := .}}{{$i}}{{else}}empty{{end}}` , "empty" , fVal2 (0 ), true },
613
616
614
617
// Cute examples.
615
618
{"or as if true" , `{{or .SI "slice is empty"}}` , "[3 4 5]" , tVal , true },
@@ -714,18 +717,22 @@ var execTests = []execTest{
714
717
{"issue60801" , "{{$k := 0}}{{$v := 0}}{{range $k, $v = .AI}}{{$k}}={{$v}} {{end}}" , "0=3 1=4 2=5 " , tVal , true },
715
718
}
716
719
717
- func fVal1 (yield func (int ) bool ) {
718
- for i := range 2 {
719
- if ! yield (i ) {
720
- break
720
+ func fVal1 (i int ) iter.Seq [int ] {
721
+ return func (yield func (int ) bool ) {
722
+ for v := range i {
723
+ if ! yield (v ) {
724
+ break
725
+ }
721
726
}
722
727
}
723
728
}
724
729
725
- func fVal2 (yield func (int , int ) bool ) {
726
- for i := range 2 {
727
- if ! yield (i , i + 1 ) {
728
- break
730
+ func fVal2 (i int ) iter.Seq2 [int , int ] {
731
+ return func (yield func (int , int ) bool ) {
732
+ for v := range i {
733
+ if ! yield (v , v + 1 ) {
734
+ break
735
+ }
729
736
}
730
737
}
731
738
}
0 commit comments