From 309c11f6e37923e1c50a91ed5f972e8f193e864d Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 23 Apr 2026 21:46:01 +0300 Subject: [PATCH] v.tests: fix how can I pass a Iterable as function argument ? (fixes #13603) --- vlib/v/tests/for_in_iterator_next_test.v | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/vlib/v/tests/for_in_iterator_next_test.v b/vlib/v/tests/for_in_iterator_next_test.v index 1c0a7c27d..4bf0096ad 100644 --- a/vlib/v/tests/for_in_iterator_next_test.v +++ b/vlib/v/tests/for_in_iterator_next_test.v @@ -47,6 +47,34 @@ pub fn (mut line_iterator AliasLineIterator) next() ?string { return line_iterator.lines[line_iterator.idx] } +struct SquareIterator { + arr []int +mut: + idx int +} + +interface Iterable[T] { +mut: + idx int + next() ?T +} + +fn (mut iter SquareIterator) next() ?string { + if iter.idx >= iter.arr.len { + return none + } + defer { iter.idx++ } + return (iter.arr[iter.idx] * iter.arr[iter.idx]).str() +} + +fn collect_iterable(iter Iterable[string]) []string { + mut out := []string{} + for item in iter { + out << item + } + return out +} + fn test_main() { mut out := []string{} for line in iterator_as_interface() { @@ -88,3 +116,10 @@ fn test_main() { assert out[6] == 'LINE: alias' assert out[7] == 'LINE: next' } + +fn test_for_in_generic_iterator_interface_param() { + iter := SquareIterator{ + arr: [1, 2, 3, 4, 5] + } + assert collect_iterable(iter) == ['1', '4', '9', '16', '25'] +} -- 2.39.5