@@ -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,6 +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 },
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 },
604
616
605
617
// Cute examples.
606
618
{"or as if true" , `{{or .SI "slice is empty"}}` , "[3 4 5]" , tVal , true },
@@ -705,6 +717,26 @@ var execTests = []execTest{
705
717
{"issue60801" , "{{$k := 0}}{{$v := 0}}{{range $k, $v = .AI}}{{$k}}={{$v}} {{end}}" , "0=3 1=4 2=5 " , tVal , true },
706
718
}
707
719
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
+ }
726
+ }
727
+ }
728
+ }
729
+
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
+ }
736
+ }
737
+ }
738
+ }
739
+
708
740
func zeroArgs () string {
709
741
return "zeroArgs"
710
742
}
0 commit comments