v4 / vlib / v / tests / interfaces / interface_value_semantics_test.v
44 lines · 38 sloc · 754 bytes · 638b8dc212612d9508ebb81164da539d4c16a249
Raw
1interface Named {
2 name string
3}
4
5struct NamedValue {
6mut:
7 name string
8}
9
10fn test_interface_cast_makes_detached_copy() {
11 mut value := NamedValue{
12 name: 'First'
13 }
14 face := Named(value)
15 value.name = 'Second'
16 assert face.name == 'First'
17}
18
19fn test_append_to_interface_array_makes_detached_copy() {
20 mut value := NamedValue{
21 name: 'First'
22 }
23 mut values := []Named{}
24 values << value
25 value.name = 'Second'
26 assert values[0].name == 'First'
27}
28
29fn new_named_value() !NamedValue {
30 return NamedValue{
31 name: 'First'
32 }
33}
34
35fn read_name(n Named) string {
36 return n.name
37}
38
39fn test_auto_heap_interface_arg_keeps_value_fields() {
40 value := new_named_value()!
41 face := Named(value)
42 assert read_name(value) == 'First'
43 assert read_name(face) == 'First'
44}
45