v2 / vlib / v / tests / generics / generics_interface_method_test.v
36 lines · 32 sloc · 495 bytes · 2bedb097f2f5d8e5489e5c4b2033e9a50a26cc2f
Raw
1interface Iter[T] {
2mut:
3 next() ?T
4}
5
6fn (mut it Iter[T]) collect() []T {
7 mut data := []T{}
8 for {
9 val := it.next() or { break }
10 data << val
11 }
12 return data
13}
14
15struct ArrayIter[T] {
16 data []T
17mut:
18 index int
19}
20
21fn (mut it ArrayIter[T]) next[T]() ?T {
22 if it.index >= it.data.len {
23 return none
24 }
25 defer {
26 it.index++
27 }
28 return it.data[it.index]
29}
30
31fn test_generics_interface_method() {
32 mut iter := Iter[int](ArrayIter[int]{
33 data: [1, 2, 3]
34 })
35 assert iter.collect() == [1, 2, 3]
36}
37