v2 / vlib / v / tests / skip_unused / nested_generics_method.vv
55 lines · 48 sloc · 710 bytes · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1struct Calc[S] {
2mut:
3 typ S
4}
5
6struct TypeA {}
7
8struct TypeB {}
9
10fn (mut c Calc[S]) next[T](input T) f64 {
11 $if S is TypeA || S is TypeB {
12 return c.typ.next(input)
13 } $else {
14 return 99.0
15 }
16}
17
18fn (mut t TypeA) next[T](_input T) f64 {
19 return 10
20}
21
22fn (mut t TypeB) next[T](_input T) f64 {
23 return 11
24}
25
26@[markused]
27fn new[S]() Calc[S] {
28 $if S is TypeA {
29 return Calc[TypeA]{
30 typ: TypeA{}
31 }
32 } $else $if S is TypeB {
33 return Calc[TypeB]{
34 typ: TypeB{}
35 }
36 } $else {
37 panic('unknown type ${S.name}')
38 }
39}
40
41fn main() {
42 {
43 mut c := Calc[TypeA]{
44 typ: TypeA{}
45 }
46 assert c.next(100) == 10.0
47 }
48 {
49 mut c := Calc[TypeB]{
50 typ: TypeB{}
51 }
52 assert c.next(100) == 11.0
53 }
54 println('OK!!')
55}
56