v/vlib/compiler/tests/interface_test.v

74 lines
916 B
V
Raw Normal View History

struct Dog {
2019-09-04 17:49:46 +02:00
breed string
}
2019-11-08 04:03:06 +01:00
struct Cat {
breed string
}
2019-11-08 04:03:06 +01:00
fn (d Cat) name() string { return 'Cat' }
fn (d Cat) speak() { println('meow') }
fn (d Dog) speak() { println('woof') }
fn (d Dog) name() string { return 'Dog'}
interface Speaker {
name() string
2019-08-31 15:38:13 +02:00
speak()
}
interface Speak2er {
name() string
2019-11-08 04:03:06 +01:00
speak()
}
2019-11-08 04:03:06 +01:00
struct Foo {
speaker Speaker
2019-11-08 15:59:01 +01:00
speakers []Speaker
2020-03-14 14:19:56 +01:00
}
2019-11-08 04:03:06 +01:00
fn perform_speak(s Speaker) {
s.speak()
assert true
name := s.name()
assert name == 'Dog' || name == 'Cat'
2020-03-14 14:19:56 +01:00
println(s.name())
}
2019-11-08 15:59:01 +01:00
fn perform_speakers(speakers []Speaker) {
2020-03-14 14:19:56 +01:00
}
2019-11-08 15:59:01 +01:00
fn test_perform_speak() {
2019-11-08 15:59:01 +01:00
dog := Dog{}
perform_speak(dog)
2019-11-08 04:03:06 +01:00
cat := Cat{}
perform_speak(cat)
2019-11-08 15:59:01 +01:00
//perform_speakers([dog, cat])
/*
2019-11-08 04:03:06 +01:00
f := Foo {
2019-11-08 15:59:01 +01:00
speaker: dog
2020-03-14 14:19:56 +01:00
}
2019-11-08 15:59:01 +01:00
*/
2019-11-08 04:03:06 +01:00
}
interface Register {
register()
}
struct RegTest {a int}
fn (f RegTest) register() {
}
fn handle_reg(r Register) {
}
fn test_register() {
f := RegTest{}
f.register()
handle_reg(f)
}