v4 / vlib / v / tests / interfaces / interface_struct_embedding_test.v
65 lines · 54 sloc · 1.09 KB · 6488041a749df9762348d019c4223908c476f2e2
Raw
1interface Getter {
2 get() string
3}
4
5struct Struct {
6 msg string
7}
8
9fn (s Struct) get() string {
10 return s.msg
11}
12
13struct EmbeddingStruct {
14 Struct
15}
16
17fn (s EmbeddingStruct) get() string {
18 return 'embedded: ${s.msg}'
19}
20
21fn test_struct_embedding() {
22 s1 := EmbeddingStruct{
23 msg: '1'
24 }
25 getter1 := Getter(s1)
26 s2 := &EmbeddingStruct{
27 msg: '2'
28 }
29 getter2 := Getter(s2)
30 getter3 := Getter(EmbeddingStruct{
31 msg: '3'
32 })
33 getter4 := Getter(&EmbeddingStruct{
34 msg: '4'
35 })
36
37 assert getter1.get() == 'embedded: 1'
38 assert getter2.get() == 'embedded: 2'
39 assert getter3.get() == 'embedded: 3'
40 assert getter4.get() == 'embedded: 4'
41}
42
43struct EmptyStruct {}
44
45fn (s EmptyStruct) get() string {
46 return 'empty'
47}
48
49struct EmbeddingEmptyStruct {
50 EmptyStruct
51}
52
53fn test_empty_struct_embedding() {
54 s1 := EmbeddingEmptyStruct{}
55 getter1 := Getter(s1)
56 s2 := &EmbeddingEmptyStruct{}
57 getter2 := Getter(s2)
58 getter3 := Getter(EmbeddingEmptyStruct{})
59 getter4 := Getter(&EmbeddingEmptyStruct{})
60
61 assert getter1.get() == 'empty'
62 assert getter2.get() == 'empty'
63 assert getter3.get() == 'empty'
64 assert getter4.get() == 'empty'
65}
66