mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
68 lines
1.1 KiB
V
68 lines
1.1 KiB
V
module main
|
|
|
|
interface Getter {
|
|
get() string
|
|
}
|
|
|
|
struct Struct {
|
|
msg string
|
|
}
|
|
|
|
fn (s Struct) get() string {
|
|
return s.msg
|
|
}
|
|
|
|
struct EmbeddingStruct {
|
|
Struct
|
|
}
|
|
|
|
fn (s EmbeddingStruct) get() string {
|
|
return 'embedded: $s.msg'
|
|
}
|
|
|
|
fn test_struct_embedding() {
|
|
s1 := EmbeddingStruct{
|
|
msg: '1'
|
|
}
|
|
getter1 := Getter(s1)
|
|
s2 := &EmbeddingStruct{
|
|
msg: '2'
|
|
}
|
|
getter2 := Getter(s2)
|
|
getter3 := Getter(EmbeddingStruct{
|
|
msg: '3'
|
|
})
|
|
getter4 := Getter(&EmbeddingStruct{
|
|
msg: '4'
|
|
})
|
|
|
|
assert getter1.get() == 'embedded: 1'
|
|
assert getter2.get() == 'embedded: 2'
|
|
assert getter3.get() == 'embedded: 3'
|
|
assert getter4.get() == 'embedded: 4'
|
|
}
|
|
|
|
struct EmptyStruct {}
|
|
|
|
fn (s EmptyStruct) get() string {
|
|
return 'empty'
|
|
}
|
|
|
|
struct EmbeddingEmptyStruct {
|
|
EmptyStruct
|
|
}
|
|
|
|
fn test_empty_struct_embedding() {
|
|
s1 := EmbeddingEmptyStruct{}
|
|
getter1 := Getter(s1)
|
|
s2 := &EmbeddingEmptyStruct{}
|
|
getter2 := Getter(s2)
|
|
getter3 := Getter(EmbeddingEmptyStruct{})
|
|
getter4 := Getter(&EmbeddingEmptyStruct{})
|
|
|
|
assert getter1.get() == 'empty'
|
|
assert getter2.get() == 'empty'
|
|
assert getter3.get() == 'empty'
|
|
assert getter4.get() == 'empty'
|
|
}
|