v
Зеркало из https://github.com/vlang/v
1import x.json2 as json
2import time
3
4const fixed_time = time.new(
5year: 2022
6month: 3
7day: 11
8hour: 13
9minute: 54
10second: 25
11)
12
13type StringAlias = string
14type BoolAlias = bool
15type IntAlias = int
16type TimeAlias = time.Time
17type StructAlias = StructType[int]
18type EnumAlias = Enumerates
19
20type SumTypes = bool | int | string
21
22enum Enumerates {
23a
24b
25c
26d
27e = 99
28f
29}
30
31struct StructType[T] {
32mut:
33val T
34}
35
36struct StructTypeOption[T] {
37mut:
38val ?T
39}
40
41struct StructTypePointer[T] {
42mut:
43val &T
44}
45
46fn test_option_types() {
47assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.a }) == '{"val":0}'
48assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.d }) == '{"val":3}'
49assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.e }) == '{"val":99}'
50assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.f }) == '{"val":100}'
51}
52
53fn test_option_alias() {
54assert json.encode(StructTypeOption[BoolAlias]{ val: none }) == '{}'
55assert json.encode(StructTypeOption[BoolAlias]{}) == '{"val":false}'
56assert json.encode(StructTypeOption[BoolAlias]{ val: false }) == '{"val":false}'
57assert json.encode(StructTypeOption[BoolAlias]{ val: true }) == '{"val":true}'
58
59assert json.encode(StructTypeOption[IntAlias]{ val: none }) == '{}'
60assert json.encode(StructTypeOption[IntAlias]{}) == '{"val":0}'
61assert json.encode(StructTypeOption[IntAlias]{ val: 0 }) == '{"val":0}'
62assert json.encode(StructTypeOption[IntAlias]{ val: 1 }) == '{"val":1}'
63
64assert json.encode(StructTypeOption[EnumAlias]{}) == '{"val":0}'
65assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.a }) == '{"val":0}'
66assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.d }) == '{"val":3}'
67assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.e }) == '{"val":99}'
68assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.f }) == '{"val":100}'
69}
70
71fn test_alias() {
72assert json.encode(StructType[EnumAlias]{}) == '{"val":0}'
73assert json.encode(StructType[EnumAlias]{ val: Enumerates.a }) == '{"val":0}'
74assert json.encode(StructType[EnumAlias]{ val: Enumerates.d }) == '{"val":3}'
75assert json.encode(StructType[EnumAlias]{ val: Enumerates.e }) == '{"val":99}'
76assert json.encode(StructType[EnumAlias]{ val: Enumerates.f }) == '{"val":100}'
77}
78
79fn test_sumtypes() {
80assert json.encode(StructType[SumTypes]{}) == '{}'
81assert json.encode(StructType[SumTypes]{ val: '' }) == '{"val":""}'
82assert json.encode(StructType[SumTypes]{ val: 'a' }) == '{"val":"a"}'
83
84assert json.encode(StructType[SumTypes]{ val: false }) == '{"val":false}'
85assert json.encode(StructType[SumTypes]{ val: true }) == '{"val":true}'
86
87assert json.encode(StructType[SumTypes]{ val: 0 }) == '{"val":0}'
88assert json.encode(StructType[SumTypes]{ val: 1 }) == '{"val":1}'
89
90assert json.encode(StructType[StructType[SumTypes]]{
91val: StructType[SumTypes]{
92val: 1
93}
94}) == '{"val":{"val":1}}'
95}
96
97fn test_option_sumtypes() {
98assert json.encode(StructTypeOption[SumTypes]{}) == '{}' // REVIEW
99
100assert json.encode(StructTypeOption[SumTypes]{ val: '' }) == '{"val":""}'
101assert json.encode(StructTypeOption[SumTypes]{ val: 'a' }) == '{"val":"a"}'
102
103assert json.encode(StructTypeOption[SumTypes]{ val: false }) == '{"val":false}'
104assert json.encode(StructTypeOption[SumTypes]{ val: true }) == '{"val":true}'
105
106assert json.encode(StructTypeOption[SumTypes]{ val: 0 }) == '{"val":0}'
107assert json.encode(StructTypeOption[SumTypes]{ val: 1 }) == '{"val":1}'
108}
109
110fn test_caos() {
111typed_string_struct := StructType[string]{
112val: 'a'
113}
114
115// StructType
116assert json.encode(StructType[StructType]{}) == 'TODO'
117assert json.encode(StructType[StructType[string]]{ val: typed_string_struct }) == 'TODO'
118assert json.encode(StructType[StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO'
119assert json.encode(StructType[StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO'
120
121assert json.encode(StructType[StructTypeOption]{typed_string_struct}) == 'TODO'
122assert json.encode(StructType[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
123assert json.encode(StructType[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
124assert json.encode(StructType[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
125
126assert json.encode(StructType[StructTypePointer]{typed_string_struct}) == 'TODO'
127assert json.encode(StructType[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
128assert json.encode(StructType[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
129assert json.encode(StructType[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
130
131// StructTypeOptional
132assert json.encode(StructTypeOption[StructType]{}) == 'TODO'
133assert json.encode(StructTypeOption[StructType[string]]{ val: '' }) == 'TODO'
134assert json.encode(StructTypeOption[StructType[StringAlias]]{ val: '' }) == 'TODO'
135assert json.encode(StructTypeOption[StructType[SumTypes]]{ val: '' }) == 'TODO'
136
137assert json.encode(StructTypeOption[StructTypeOption]{typed_string_struct}) == 'TODO'
138assert json.encode(StructTypeOption[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
139assert json.encode(StructTypeOption[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
140assert json.encode(StructTypeOption[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
141
142assert json.encode(StructTypeOption[StructTypePointer]{typed_string_struct}) == 'TODO'
143assert json.encode(StructTypeOption[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
144assert json.encode(StructTypeOption[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
145assert json.encode(StructTypeOption[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
146
147// StructTypePointer
148assert json.encode(StructTypePointer[StructType]{}) == 'TODO'
149assert json.encode(StructTypePointer[StructType[string]]{ val: '' }) == 'TODO'
150assert json.encode(StructTypePointer[StructType[StringAlias]]{ val: '' }) == 'TODO'
151assert json.encode(StructTypePointer[StructType[SumTypes]]{ val: '' }) == 'TODO'
152
153assert json.encode(StructTypePointer[StructTypeOption]{typed_string_struct}) == 'TODO'
154assert json.encode(StructTypePointer[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
155assert json.encode(StructTypePointer[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
156assert json.encode(StructTypePointer[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
157
158assert json.encode(StructTypePointer[StructTypePointer]{typed_string_struct}) == 'TODO'
159assert json.encode(StructTypePointer[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
160assert json.encode(StructTypePointer[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
161assert json.encode(StructTypePointer[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
162}
163
164fn test_caos_array() {
165typed_string_struct := [StructType[string]{
166val: 'a'
167}]
168
169// StructType
170assert json.encode(StructType[[]StructType]{}) == 'TODO'
171assert json.encode(StructType[[]StructType[string]]{ val: typed_string_struct }) == 'TODO'
172assert json.encode(StructType[[]StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO'
173assert json.encode(StructType[[]StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO'
174
175assert json.encode(StructType[[]StructTypeOption]{typed_string_struct}) == 'TODO'
176assert json.encode(StructType[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
177assert json.encode(StructType[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
178assert json.encode(StructType[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
179
180assert json.encode(StructType[[]StructTypePointer]{typed_string_struct}) == 'TODO'
181assert json.encode(StructType[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
182assert json.encode(StructType[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
183assert json.encode(StructType[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
184
185// StructTypeOptional
186assert json.encode(StructTypeOption[[]StructType]{}) == 'TODO'
187assert json.encode(StructTypeOption[[]StructType[string]]{ val: '' }) == 'TODO'
188assert json.encode(StructTypeOption[[]StructType[StringAlias]]{ val: '' }) == 'TODO'
189assert json.encode(StructTypeOption[[]StructType[SumTypes]]{ val: '' }) == 'TODO'
190
191assert json.encode(StructTypeOption[[]StructTypeOption]{typed_string_struct}) == 'TODO'
192assert json.encode(StructTypeOption[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
193assert json.encode(StructTypeOption[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
194assert json.encode(StructTypeOption[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
195
196assert json.encode(StructTypeOption[[]StructTypePointer]{typed_string_struct}) == 'TODO'
197assert json.encode(StructTypeOption[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
198assert json.encode(StructTypeOption[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
199assert json.encode(StructTypeOption[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
200
201// StructTypePointer
202assert json.encode(StructTypePointer[[]StructType]{}) == 'TODO'
203assert json.encode(StructTypePointer[[]StructType[string]]{ val: '' }) == 'TODO'
204assert json.encode(StructTypePointer[[]StructType[StringAlias]]{ val: '' }) == 'TODO'
205assert json.encode(StructTypePointer[[]StructType[SumTypes]]{ val: '' }) == 'TODO'
206
207assert json.encode(StructTypePointer[[]StructTypeOption]{typed_string_struct}) == 'TODO'
208assert json.encode(StructTypePointer[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
209assert json.encode(StructTypePointer[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
210assert json.encode(StructTypePointer[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
211
212assert json.encode(StructTypePointer[[]StructTypePointer]{typed_string_struct}) == 'TODO'
213assert json.encode(StructTypePointer[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
214assert json.encode(StructTypePointer[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
215assert json.encode(StructTypePointer[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
216}
217