package span import ( "testing" "github.com/jordanorelli/generic/iter" ) func TestSpan(t *testing.T) { var n int it := New(1, 10).Iter() it.Next(&n) if n != 1 { t.Errorf("expected n to be 1 but is %d instead", n) } for it.Next(&n) { } if n != 9 { t.Errorf("expected n to be 9 but is %d instead", n) } // If the function New returns a value of iter.Able[T], this type parameter // can be inferred, but when New returns a value of Span[T] (which // satisfies iter.Able[T]), the type parameter cannot be inferred. I don't // know why this behavior exists or if this is the intended behavior. // | // | // V beer := iter.Max[int](New(1, 100)) if beer != 99 { t.Errorf("expected 99 beers but saw %d instead", beer) } old := iter.Min[int](New(30, 40)) if old != 30 { t.Errorf("expected 30 to be old but saw %d instead", old) } // honestly a very ridiculous use-case, but I'm looking at some weird // inferrence corner cases. It seems the third parameter can't be the // literal 2, you have to explicitly type it. alpha := Step('a', 'z'+1, rune(2)) // the rune type can't be inferred here either for a, it := iter.Start[rune](alpha); it.Next(&a); { t.Logf("%c", a) } // the rune type can't be inferred here either! for a, it := iter.Start[rune](alpha.Iter()); it.Next(&a); { } t.Logf("%T", iter.Max[int8](New[int8](3, 10))) } func TestStep(t *testing.T) { it := Step(1, 10, 3).Iter() for n := 0; it.Next(&n); { t.Log(n) } }