v2 / vlib / v / tests / options / var_option_struct_test.v
49 lines · 42 sloc · 641 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Foo {
2mut:
3 name string
4}
5
6struct Test {
7pub mut:
8 a string
9 b ?string
10}
11
12fn (mut f Foo) test(arr ?[]int) ?string {
13 return arr?.len.str()
14}
15
16fn (mut f Foo) test2() ?string {
17 return none
18}
19
20fn fn_a(s ?Test) ? {
21 println(s?.a)
22 assert false
23}
24
25fn fn_b(s ?Test) ? {
26 println(s?.b?)
27 assert false
28}
29
30fn test_main() {
31 mut m := ?Foo{}
32 assert m == none
33 m = Foo{
34 name: 'foo'
35 }
36 assert m != none
37 v := m?.test([1, 2, 3]) or { '4' }
38 m?.name = 'foo'
39 assert m?.name == 'foo'
40 assert v == '3'
41 var := m?.test2() or { '' }
42 assert var == ''
43}
44
45fn test_opt_call() {
46 mut t := ?Test{}
47 fn_a(none) // returns none
48 fn_b(t) // returns none
49}
50