v2 / vlib / v / tests / options / option_optional_param_test.v
35 lines · 28 sloc · 897 bytes · 2c805927b7d017918b50933c46c95c1fbdc2f7a5
Raw
1fn with_optional_delta(base int, delta ?int) int {
2 actual_delta := delta or { 0 }
3 return base + actual_delta
4}
5
6fn optional_only(value ?int) int {
7 return value or { -1 }
8}
9
10struct OptionalGreeter {}
11
12fn (_ OptionalGreeter) add(base int, delta ?int) int {
13 return with_optional_delta(base, delta)
14}
15
16type OptionalGreeterFn = fn (int, ?int) int
17
18fn test_trailing_optional_params_can_be_omitted_in_free_function_calls() {
19 assert with_optional_delta(5) == 5
20 assert with_optional_delta(5, 2) == 7
21 assert optional_only() == -1
22 assert optional_only(8) == 8
23}
24
25fn test_trailing_optional_params_can_be_omitted_in_method_calls() {
26 greeter := OptionalGreeter{}
27 assert greeter.add(5) == 5
28 assert greeter.add(5, 2) == 7
29}
30
31fn test_trailing_optional_params_can_be_omitted_in_fn_variable_calls() {
32 handler := OptionalGreeterFn(with_optional_delta)
33 assert handler(5) == 5
34 assert handler(5, 2) == 7
35}
36