v2 / vlib / v / tests / options / option_ptr_ptr_test.v
47 lines · 39 sloc · 930 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1import json
2
3@[heap]
4struct Foo {
5 a &int
6 b &string
7 c &f64
8 d &&int
9 e &&&string
10}
11
12struct FooOption {
13mut:
14 a ?&int
15 b ?&string
16 c ?&f64
17 d ?&&int
18 e ?&&&string
19}
20
21fn test_ptr() {
22 data := '{ "a": 123, "b": "foo", "c": 1.2, "d": 321, "e": "bar"}'
23 foo := json.decode(Foo, data)!
24 println(foo)
25
26 assert dump(*foo.a) == 123
27 assert dump(*foo.b) == 'foo'
28 assert dump(*foo.c) == 1.2
29 assert dump(**foo.d) == 321
30 assert dump(***foo.e) == 'bar'
31
32 assert dump(json.encode(foo)) == '{"a":123,"b":"foo","c":1.2,"d":321,"e":"bar"}'
33}
34
35fn test_option_ptr() ? {
36 data := '{ "a": 123, "b": "foo", "c": 1.2, "d": 321, "e": "bar"}'
37 foo := json.decode(FooOption, data) or { return none }
38 println(foo)
39
40 assert dump(*foo.a?) == 123
41 assert dump(*foo.b?) == 'foo'
42 assert dump(*foo.c?) == 1.2
43 assert dump(**foo.d?) == 321
44 assert dump(***foo.e?) == 'bar'
45
46 assert dump(json.encode(foo)) == '{"a":123,"b":"foo","c":1.2,"d":321,"e":"bar"}'
47}
48