v2 / vlib / v / tests / options / option_call_on_orexpr_test.v
34 lines · 29 sloc · 1.07 KB · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1fn find_startswith_string(a []string, search string) ?string {
2 for s in a {
3 if s.starts_with(search) {
4 return s
5 }
6 }
7 return none
8}
9
10fn find_any_startswith_string(a []string, b []string, search string) ?string {
11 // cannot convert 'struct _option_string' to 'struct string'
12 // V wants the or {} block to return a string, but find_startswith_string returns ?string
13 return find_startswith_string(a, search) or { find_startswith_string(b, search)? }
14}
15
16fn find_any_startswith_string_unwrapped(a []string, b []string, search string) ?string {
17 return find_startswith_string(a, search) or { find_startswith_string(b, search)? }
18}
19
20fn test_main() {
21 var1 := find_any_startswith_string(['foobar', 'barfoo'], ['deadbeef', 'beefdead'], 'dead')
22 assert var1 or { panic('unreachable') } == 'deadbeef'
23 dump(var1)
24
25 var2 := find_any_startswith_string_unwrapped(['foobar', 'barfoo'], ['deadbeef', 'beefdead'],
26 'dead')
27 dump(var2)
28 assert var2 != none
29
30 var3 := find_any_startswith_string_unwrapped(['foobar', 'barfoo'], ['deadbeef', 'beefdead'],
31 'error')
32 dump(var3)
33 assert var3 == none
34}
35