v/vlib/v/tests/generics_with_embed_generic...

55 lines
826 B
V

struct Group<T> {
len int
val []T
mut:
index int
}
fn group_new<T>(val ...T) Group<T> {
mut arr := []T{cap: val.len}
for i in val {
arr << i
}
mut g := Group<T>{
len: val.len
val: arr
}
return g
}
fn (mut it Group<T>) next() ?T {
if it.index >= it.len {
return none
}
v := it.val[it.index]
it.index++
return v
}
fn test_generics_with_embed_generics() {
gx1 := group_new<int>(1, 2, 3)
for x in gx1.val {
println(x)
}
assert gx1.val == [1, 2, 3]
gx2 := group_new<f64>(1.1, 2.2, 3.3)
for x in gx2.val {
println(x)
}
assert gx2.val == [1.1, 2.2, 3.3]
gx3 := group_new<bool>(true, true, false)
for x in gx3.val {
println(x)
}
assert gx3.val == [true, true, false]
gx4 := group_new<string>('aa', 'bb', 'cc')
for x in gx4.val {
println(x)
}
assert gx4.val == ['aa', 'bb', 'cc']
}