podman
697 строк · 13.8 Кб
1/**
2* Copyright 2023 ByteDance Inc.
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17package {{PACKAGE}}
18
19import (
20`os`
21`runtime`
22`runtime/debug`
23`testing`
24`time`
25`unsafe`
26
27`github.com/bytedance/sonic/internal/native/types`
28`github.com/bytedance/sonic/loader`
29)
30
31var (
32debugAsyncGC = os.Getenv("SONIC_NO_ASYNC_GC") == ""
33)
34
35var stubs = []loader.GoC{
36{"_f32toa", nil, &__f32toa},
37{"_f64toa", nil, &__f64toa},
38{"_fsm_exec", nil, &__fsm_exec},
39{"_get_by_path", nil, &__get_by_path},
40{"_html_escape", nil, &__html_escape},
41{"_i64toa", nil, &__i64toa},
42{"_lspace", nil, &__lspace},
43{"_quote", nil, &__quote},
44{"_skip_array", nil, &__skip_array},
45{"_skip_number", nil, &__skip_number},
46{"_skip_object", nil, &__skip_object},
47{"_skip_one", nil, &__skip_one},
48{"_skip_one_fast", nil, &__skip_one_fast},
49{"_u64toa", nil, &__u64toa},
50{"_unquote", nil, &__unquote},
51{"_validate_one", nil, &__validate_one},
52{"_validate_utf8", nil, &__validate_utf8},
53{"_validate_utf8_fast", nil, &__validate_utf8_fast},
54{"_value", nil, &__value},
55{"_vnumber", nil, &__vnumber},
56{"_vsigned", nil, &__vsigned},
57{"_vstring", nil, &__vstring},
58{"_vunsigned", nil, &__vunsigned},
59}
60
61func TestMain(m *testing.M) {
62loader.WrapGoC(Text__native_entry__, Funcs, stubs, "{{PACKAGE}}", "{{PACKAGE}}/native.c")
63
64go func () {
65if !debugAsyncGC {
66return
67}
68println("Begin GC looping...")
69for {
70runtime.GC()
71debug.FreeOSMemory()
72}
73println("stop GC looping!")
74}()
75time.Sleep(time.Millisecond*100)
76m.Run()
77}
78
79func TestRecover_f64toa(t *testing.T) {
80defer func() {
81if r := recover(); r!= nil {
82t.Log("recover: ", r)
83} else {
84t.Fatal("no panic")
85}
86}()
87_ = f64toa(nil, 123)
88}
89
90func TestRecover_f32toa(t *testing.T) {
91defer func() {
92if r := recover(); r!= nil {
93t.Log("recover: ", r)
94} else {
95t.Fatal("no panic")
96}
97}()
98_ = f32toa(nil, 123)
99}
100
101func TestRecover_i64toa(t *testing.T) {
102defer func() {
103if r := recover(); r!= nil {
104t.Log("recover: ", r)
105} else {
106t.Fatal("no panic")
107}
108}()
109_ = i64toa(nil, 123)
110}
111
112func TestRecover_u64toa(t *testing.T) {
113defer func() {
114if r := recover(); r!= nil {
115t.Log("recover: ", r)
116} else {
117t.Fatal("no panic")
118}
119}()
120_ = u64toa(nil, 123)
121}
122
123func TestRecover_lspace(t *testing.T) {
124defer func() {
125if r := recover(); r!= nil {
126t.Log("recover: ", r)
127} else {
128t.Fatal("no panic")
129}
130}()
131_ = lspace(nil, 2, 0)
132}
133
134func TestRecover_quote(t *testing.T) {
135var dn = 10
136var dp = make([]byte, dn)
137var sp = []byte("123")
138t.Run("sp", func(t *testing.T) {
139defer func() {
140if r := recover(); r!= nil {
141t.Log("recover: ", r)
142} else {
143t.Fatal("no panic")
144}
145}()
146_ = quote(nil, 3, unsafe.Pointer(&dp[0]), &dn, 0)
147})
148t.Run("dp", func(t *testing.T) {
149defer func() {
150if r := recover(); r!= nil {
151t.Log("recover: ", r)
152} else {
153t.Fatal("no panic")
154}
155}()
156_ = quote(unsafe.Pointer(&sp[0]), 3, nil, &dn, 0)
157})
158t.Run("dn", func(t *testing.T) {
159defer func() {
160if r := recover(); r!= nil {
161t.Log("recover: ", r)
162} else {
163t.Fatal("no panic")
164}
165}()
166_ = quote(unsafe.Pointer(&sp[0]), 3, unsafe.Pointer(&dp[0]), nil, 0)
167})
168}
169
170func TestRecover_html_escape(t *testing.T) {
171var dn = 10
172var dp = make([]byte, dn)
173var sp = []byte("123")
174t.Run("sp", func(t *testing.T) {
175defer func() {
176if r := recover(); r!= nil {
177t.Log("recover: ", r)
178} else {
179t.Fatal("no panic")
180}
181}()
182_ = html_escape(nil, 3, unsafe.Pointer(&dp[0]), &dn)
183})
184t.Run("dp", func(t *testing.T) {
185defer func() {
186if r := recover(); r!= nil {
187t.Log("recover: ", r)
188} else {
189t.Fatal("no panic")
190}
191}()
192_ = html_escape(unsafe.Pointer(&sp[0]), 3, nil, &dn)
193})
194t.Run("dn", func(t *testing.T) {
195defer func() {
196if r := recover(); r!= nil {
197t.Log("recover: ", r)
198} else {
199t.Fatal("no panic")
200}
201}()
202_ = html_escape(unsafe.Pointer(&sp[0]), 3, unsafe.Pointer(&dp[0]), nil)
203})
204}
205
206func TestRecover_unquote(t *testing.T) {
207var ep = 0
208var dp = make([]byte, 10)
209var sp = []byte("12\\x\"3\"4")
210t.Run("sp", func(t *testing.T) {
211defer func() {
212if r := recover(); r!= nil {
213t.Log("recover: ", r)
214} else {
215t.Fatal("no panic")
216}
217}()
218_ = unquote(nil, len(sp), unsafe.Pointer(&dp[0]), &ep, 0)
219})
220t.Run("dp", func(t *testing.T) {
221defer func() {
222if r := recover(); r!= nil {
223t.Log("recover: ", r)
224} else {
225t.Fatal("no panic")
226}
227}()
228_ = unquote(unsafe.Pointer(&sp[0]), len(sp), nil, &ep, 0)
229})
230t.Run("ep", func(t *testing.T) {
231defer func() {
232if r := recover(); r!= nil {
233t.Log("recover: ", r)
234} else {
235t.Fatal("no panic")
236}
237}()
238_ = unquote(unsafe.Pointer(&sp[0]), len(sp), unsafe.Pointer(&dp[0]), nil, 0)
239})
240}
241
242func TestRecover_value(t *testing.T) {
243var v = new(types.JsonState)
244var sp = []byte("123")
245t.Run("sp", func(t *testing.T) {
246defer func() {
247if r := recover(); r!= nil {
248t.Log("recover: ", r)
249} else {
250t.Fatal("no panic")
251}
252}()
253_ = value(nil, 3, 0, v, 0)
254})
255t.Run("v", func(t *testing.T) {
256defer func() {
257if r := recover(); r!= nil {
258t.Log("recover: ", r)
259} else {
260t.Fatal("no panic")
261}
262}()
263_ = value(unsafe.Pointer(&sp[0]), 3, 0, nil, 0)
264})
265}
266
267func TestRecover_vstring(t *testing.T) {
268var v = new(types.JsonState)
269var sp = "123"
270var p = 0
271t.Run("sp", func(t *testing.T) {
272defer func() {
273if r := recover(); r!= nil {
274t.Log("recover: ", r)
275} else {
276t.Fatal("no panic")
277}
278}()
279vstring(nil, &p, v, 0)
280})
281t.Run("p", func(t *testing.T) {
282defer func() {
283if r := recover(); r!= nil {
284t.Log("recover: ", r)
285} else {
286t.Fatal("no panic")
287}
288}()
289vstring(&sp, nil, v, 0)
290})
291t.Run("v", func(t *testing.T) {
292defer func() {
293if r := recover(); r!= nil {
294t.Log("recover: ", r)
295} else {
296t.Fatal("no panic")
297}
298}()
299vstring(&sp, &p, nil, 0)
300})
301}
302
303func TestRecover_vnumber(t *testing.T) {
304var v = new(types.JsonState)
305var sp = "123"
306var p = 0
307t.Run("sp", func(t *testing.T) {
308defer func() {
309if r := recover(); r!= nil {
310t.Log("recover: ", r)
311} else {
312t.Fatal("no panic")
313}
314}()
315vnumber(nil, &p, v)
316})
317t.Run("p", func(t *testing.T) {
318defer func() {
319if r := recover(); r!= nil {
320t.Log("recover: ", r)
321} else {
322t.Fatal("no panic")
323}
324}()
325vnumber(&sp, nil, v)
326})
327t.Run("v", func(t *testing.T) {
328defer func() {
329if r := recover(); r!= nil {
330t.Log("recover: ", r)
331} else {
332t.Fatal("no panic")
333}
334}()
335vnumber(&sp, &p, nil)
336})
337}
338
339func TestRecover_vsigned(t *testing.T) {
340var v = new(types.JsonState)
341var sp = "123"
342var p = 0
343t.Run("sp", func(t *testing.T) {
344defer func() {
345if r := recover(); r!= nil {
346t.Log("recover: ", r)
347} else {
348t.Fatal("no panic")
349}
350}()
351vsigned(nil, &p, v)
352})
353t.Run("p", func(t *testing.T) {
354defer func() {
355if r := recover(); r!= nil {
356t.Log("recover: ", r)
357} else {
358t.Fatal("no panic")
359}
360}()
361vsigned(&sp, nil, v)
362})
363t.Run("v", func(t *testing.T) {
364defer func() {
365if r := recover(); r!= nil {
366t.Log("recover: ", r)
367} else {
368t.Fatal("no panic")
369}
370}()
371vsigned(&sp, &p, nil)
372})
373}
374
375func TestRecover_vunsigned(t *testing.T) {
376var v = new(types.JsonState)
377var sp = "123"
378var p = 0
379t.Run("sp", func(t *testing.T) {
380defer func() {
381if r := recover(); r!= nil {
382t.Log("recover: ", r)
383} else {
384t.Fatal("no panic")
385}
386}()
387vunsigned(nil, &p, v)
388})
389t.Run("p", func(t *testing.T) {
390defer func() {
391if r := recover(); r!= nil {
392t.Log("recover: ", r)
393} else {
394t.Fatal("no panic")
395}
396}()
397vunsigned(&sp, nil, v)
398})
399t.Run("v", func(t *testing.T) {
400defer func() {
401if r := recover(); r!= nil {
402t.Log("recover: ", r)
403} else {
404t.Fatal("no panic")
405}
406}()
407vunsigned(&sp, &p, nil)
408})
409}
410
411func TestRecover_skip_one(t *testing.T) {
412var v = types.NewStateMachine()
413var sp = "123"
414var p = 0
415t.Run("sp", func(t *testing.T) {
416defer func() {
417if r := recover(); r!= nil {
418t.Log("recover: ", r)
419} else {
420t.Fatal("no panic")
421}
422}()
423_ = skip_one(nil, &p, v, 0)
424})
425t.Run("p", func(t *testing.T) {
426defer func() {
427if r := recover(); r!= nil {
428t.Log("recover: ", r)
429} else {
430t.Fatal("no panic")
431}
432}()
433_ = skip_one(&sp, nil, v, 0)
434})
435t.Run("v", func(t *testing.T) {
436defer func() {
437if r := recover(); r!= nil {
438t.Log("recover: ", r)
439} else {
440t.Fatal("no panic")
441}
442}()
443_ = skip_one(&sp, &p, nil, 0)
444})
445}
446
447func TestRecover_skip_one_fast(t *testing.T) {
448var sp = "123"
449var p = 0
450t.Run("sp", func(t *testing.T) {
451defer func() {
452if r := recover(); r!= nil {
453t.Log("recover: ", r)
454} else {
455t.Fatal("no panic")
456}
457}()
458_ = skip_one_fast(nil, &p)
459})
460t.Run("p", func(t *testing.T) {
461defer func() {
462if r := recover(); r!= nil {
463t.Log("recover: ", r)
464} else {
465t.Fatal("no panic")
466}
467}()
468_ = skip_one_fast(&sp, nil)
469})
470}
471
472func TestRecover_skip_array(t *testing.T) {
473var v = types.NewStateMachine()
474var sp = "123"
475var p = 0
476t.Run("sp", func(t *testing.T) {
477defer func() {
478if r := recover(); r!= nil {
479t.Log("recover: ", r)
480} else {
481t.Fatal("no panic")
482}
483}()
484_ = skip_array(nil, &p, v, 0)
485})
486t.Run("p", func(t *testing.T) {
487defer func() {
488if r := recover(); r!= nil {
489t.Log("recover: ", r)
490} else {
491t.Fatal("no panic")
492}
493}()
494_ = skip_array(&sp, nil, v, 0)
495})
496t.Run("v", func(t *testing.T) {
497defer func() {
498if r := recover(); r!= nil {
499t.Log("recover: ", r)
500} else {
501t.Fatal("no panic")
502}
503}()
504_ = skip_array(&sp, &p, nil, 0)
505})
506}
507
508func TestRecover_skip_object(t *testing.T) {
509var v = types.NewStateMachine()
510var sp = "123"
511var p = 0
512t.Run("sp", func(t *testing.T) {
513defer func() {
514if r := recover(); r!= nil {
515t.Log("recover: ", r)
516} else {
517t.Fatal("no panic")
518}
519}()
520_ = skip_object(nil, &p, v, 0)
521})
522t.Run("p", func(t *testing.T) {
523defer func() {
524if r := recover(); r!= nil {
525t.Log("recover: ", r)
526} else {
527t.Fatal("no panic")
528}
529}()
530_ = skip_object(&sp, nil, v, 0)
531})
532t.Run("v", func(t *testing.T) {
533defer func() {
534if r := recover(); r!= nil {
535t.Log("recover: ", r)
536} else {
537t.Fatal("no panic")
538}
539}()
540_ = skip_object(&sp, &p, nil, 0)
541})
542}
543
544func TestRecover_skip_number(t *testing.T) {
545var sp = "123"
546var p = 0
547t.Run("sp", func(t *testing.T) {
548defer func() {
549if r := recover(); r!= nil {
550t.Log("recover: ", r)
551} else {
552t.Fatal("no panic")
553}
554}()
555_ = skip_number(nil, &p)
556})
557t.Run("p", func(t *testing.T) {
558defer func() {
559if r := recover(); r!= nil {
560t.Log("recover: ", r)
561} else {
562t.Fatal("no panic")
563}
564}()
565_ = skip_number(&sp, nil)
566})
567}
568
569func TestRecover_get_by_path(t *testing.T) {
570var v = []interface{}{}
571var sp = "123"
572var p = 0
573var m = types.NewStateMachine()
574t.Run("sp", func(t *testing.T) {
575defer func() {
576if r := recover(); r!= nil {
577t.Log("recover: ", r)
578} else {
579t.Fatal("no panic")
580}
581}()
582_ = get_by_path(nil, &p, &v, m)
583})
584t.Run("p", func(t *testing.T) {
585defer func() {
586if r := recover(); r!= nil {
587t.Log("recover: ", r)
588} else {
589t.Fatal("no panic")
590}
591}()
592_ = get_by_path(&sp, nil, &v, m)
593})
594t.Run("path", func(t *testing.T) {
595defer func() {
596if r := recover(); r!= nil {
597t.Log("recover: ", r)
598} else {
599t.Fatal("no panic")
600}
601}()
602_ = get_by_path(&sp, &p, nil, m)
603})
604t.Run("m", func(t *testing.T) {
605defer func() {
606if r := recover(); r!= nil {
607t.Log("recover: ", r)
608} else {
609t.Fatal("no panic")
610}
611}()
612_ = get_by_path(&sp, &p, &v, nil)
613})
614}
615
616func TestRecover_validate_one(t *testing.T) {
617var v = types.NewStateMachine()
618var sp = "123"
619var p = 0
620t.Run("sp", func(t *testing.T) {
621defer func() {
622if r := recover(); r!= nil {
623t.Log("recover: ", r)
624} else {
625t.Fatal("no panic")
626}
627}()
628_ = validate_one(nil, &p, v)
629})
630t.Run("p", func(t *testing.T) {
631defer func() {
632if r := recover(); r!= nil {
633t.Log("recover: ", r)
634} else {
635t.Fatal("no panic")
636}
637}()
638_ = validate_one(&sp, nil, v)
639})
640t.Run("v", func(t *testing.T) {
641defer func() {
642if r := recover(); r!= nil {
643t.Log("recover: ", r)
644} else {
645t.Fatal("no panic")
646}
647}()
648_ = validate_one(&sp, &p, nil)
649})
650}
651
652func TestRecover_validate_utf8(t *testing.T) {
653var v = types.NewStateMachine()
654var sp = string([]byte{0xff, 0xff, 0xff})
655var p = 0
656t.Run("sp", func(t *testing.T) {
657defer func() {
658if r := recover(); r!= nil {
659t.Log("recover: ", r)
660} else {
661t.Fatal("no panic")
662}
663}()
664_ = validate_utf8(nil, &p, v)
665})
666t.Run("p", func(t *testing.T) {
667defer func() {
668if r := recover(); r!= nil {
669t.Log("recover: ", r)
670} else {
671t.Fatal("no panic")
672}
673}()
674_ = validate_utf8(&sp, nil, v)
675})
676t.Run("v", func(t *testing.T) {
677defer func() {
678if r := recover(); r!= nil {
679t.Log("recover: ", r)
680} else {
681t.Fatal("no panic")
682}
683}()
684_ = validate_utf8(&sp, &p, nil)
685})
686}
687
688func TestRecover_validate_utf8_fast(t *testing.T) {
689defer func() {
690if r := recover(); r!= nil {
691t.Log("recover: ", r)
692} else {
693t.Fatal("no panic")
694}
695}()
696_ = validate_utf8_fast(nil)
697}
698