v2 / vlib / v / tests / array_variant_arg_upcast_test.v
59 lines · 49 sloc · 913 bytes · c7712ddb28bffe5b2c48e8a858564ddb22095237
Raw
1// vtest flance: -Wfatal-errors
2
3type AnimalArg = CatArg | DogArg
4
5struct CatArg {
6 name string
7}
8
9struct DogArg {
10 name string
11}
12
13fn animal_arg_names(animals []AnimalArg) []string {
14 mut names := []string{cap: animals.len}
15 for animal in animals {
16 names << animal.name
17 }
18 return names
19}
20
21fn test_array_of_sumtype_variant_is_accepted_as_argument() {
22 cats := [
23 CatArg{
24 name: 'Kitty'
25 },
26 CatArg{
27 name: 'Misty'
28 },
29 ]
30 assert animal_arg_names(cats) == ['Kitty', 'Misty']
31}
32
33interface NamedArg {
34 name() string
35}
36
37struct BirdArg {
38 name_value string
39}
40
41fn (b BirdArg) name() string {
42 return b.name_value
43}
44
45fn named_arg_names(items []NamedArg) []string {
46 return items.map(it.name())
47}
48
49fn test_array_of_interface_implementor_is_accepted_as_argument() {
50 birds := [
51 BirdArg{
52 name_value: 'Kiwi'
53 },
54 BirdArg{
55 name_value: 'Mango'
56 },
57 ]
58 assert named_arg_names(birds) == ['Kiwi', 'Mango']
59}
60