v2 / vlib / v / tests / generics / generics_method_on_nested_struct_test.v
36 lines · 31 sloc · 530 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 test_generics_method_on_nested_struct() {
20 mut outer := Outer[f64]{
21 inner: Inner[f64]{
22 val: 1.1
23 }
24 }
25 r1 := outer.inner.next[f32](99.0)
26 println(r1)
27 assert r1 == 32.0
28
29 r2 := outer.inner.next[f64, f32](99.0)
30 println(r2)
31 assert r2 == 32.0
32
33 r3 := outer.inner.next(f32(99.0))
34 println(r3)
35 assert r3 == 32.0
36}
37