v
Зеркало из https://github.com/vlang/v
1import x.json2.decoder2
2import json as old_json
3import benchmark
4import time
5
6// ./v -prod crun vlib/x/json/tests/c.v
7const max_iterations = 100_000
8// const max_iterations = 10 // trying figure out it is slower in small loop. I guess it is `fulfill_nodes` related. Any suggestion?
9
10pub struct Stru {
11val int
12val2 string
13val3 Stru2
14}
15
16pub struct Stru2 {
17a int
18churrasco string
19}
20
21type SumTypes = StructType[string] | bool | int | string | time.Time
22
23enum Enum {
24a
25b
26c
27d
28e = 99
29f
30}
31
32struct StructType[T] {
33mut:
34val T
35}
36
37struct StructTypeOption[T] {
38mut:
39val ?T
40}
41
42struct StructTypePointer[T] {
43mut:
44val &T
45}
46
47fn main() {
48json_data := '{"val": 1, "val2": "lala", "val3": {"a": 2, "churrasco": "leleu"}}'
49json_data1 := '{"val": "2"}'
50// json_data2 := '{"val": 2}'
51
52mut b := benchmark.start()
53
54// Stru **********************************************************
55
56for i := 0; i < max_iterations; i++ {
57_ := old_json.decode(Stru, json_data)!
58}
59
60b.measure('old_json.decode(Stru, json_data)!\n')
61
62// StructType[string] **********************************************************
63for i := 0; i < max_iterations; i++ {
64_ := decoder2.decode[StructType[string]](json_data1)!
65}
66
67b.measure('decoder2.decode[StructType[string]](json_data1)!')
68
69for i := 0; i < max_iterations; i++ {
70_ := old_json.decode(StructType[string], json_data1)!
71}
72
73b.measure('old_json.decode(StructType[string], json_data1)!\n')
74
75// StructTypeOption[string] **********************************************************
76for i := 0; i < max_iterations; i++ {
77_ := decoder2.decode[StructTypeOption[string]](json_data1)!
78}
79
80b.measure('decoder2.decode[StructTypeOption[string]](json_data1)!')
81
82for i := 0; i < max_iterations; i++ {
83_ := old_json.decode(StructTypeOption[string], json_data1)!
84}
85
86b.measure('old_json.decode(StructTypeOption[string], json_data1)!\n')
87
88// map[string]string **********************************************************
89for i := 0; i < max_iterations; i++ {
90_ := decoder2.decode[map[string]string](json_data1)!
91}
92
93b.measure('decoder2.decode[map[string]string](json_data1)!')
94
95for i := 0; i < max_iterations; i++ {
96_ := old_json.decode(map[string]string, json_data1)!
97}
98
99b.measure('old_json.decode(map[string]string, json_data1)!\n')
100}
101