v2 / vlib / v / tests / generics / generics_method_on_nested_struct2_test.v
38 lines · 33 sloc · 543 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Outer[T] {
2mut:
3 inner Inner[T]
4}
5
6struct Inner[T] {
7 val T
8}
9
10fn (mut i Inner[T]) next[S](input S) f64 {
11 $if S is f32 {
12 return 32
13 } $else {
14 panic('"${S.name}" is not supported')
15 return 0
16 }
17}
18
19fn (mut o Outer[T]) next[S](input S) f64 {
20 $if S is f32 {
21 return o.inner.next(input)
22 } $else {
23 panic('"${S.name}" is not supported')
24 return 0
25 }
26}
27
28fn test_generics_method_on_nested_struct() {
29 mut outer := Outer[f64]{
30 inner: Inner[f64]{
31 val: 1.1
32 }
33 }
34
35 res := outer.next(f32(99.0))
36 println(res)
37 assert res == 32.0
38}
39