github.com/bytedance/sonic@v1.11.7-0.20240517092252-d2edb31b167b/issue_test/issue213_test.go (about) 1 /* 2 * Copyright 2021 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 17 package issue_test 18 19 import ( 20 `sync` 21 `testing` 22 23 `github.com/bytedance/sonic` 24 ) 25 26 type ByteStruct struct { 27 Bytes []byte 28 } 29 30 type ObjStruct struct { 31 Obj ByteStruct 32 } 33 34 func TestIssue213(t *testing.T) { 35 // bytes := []byte("{\"Obj\":{\"Bytes\":\"eyJUZXN0Q29kZSI6MjIyMiwiVGVzdFN0cmluZyI6InRlc3Rfc3RyaW5n\"}}") // this is OK 36 bytes := []byte("{\"Obj\":{\"Bytes\":\"eyJUZXN0Q29kZSI6MjIyMiwiVGVzdFN0cmluZyI6InRlc3Rfc3RyaW5n\", \"x\":0}}") 37 wg := sync.WaitGroup{} 38 for i:=0;i<1000;i++{ 39 wg.Add(1) 40 go func(){ 41 defer wg.Done() 42 var o *ObjStruct 43 if err := sonic.Unmarshal(bytes, &o); err != nil { 44 t.Fatal(err) 45 } 46 }() 47 } 48 wg.Wait() 49 } 50 51 func BenchmarkIssue213(b *testing.B) { 52 // bytes := []byte("{\"Obj\":{\"Bytes\":\"eyJUZXN0Q29kZSI6MjIyMiwiVGVzdFN0cmluZyI6InRlc3Rfc3RyaW5n\"}}") // this is OK 53 js := "{\"Obj\":{\"Bytes\":\"eyJUZXN0Q29kZSI6MjIyMiwiVGVzdFN0cmluZyI6InRlc3Rfc3RyaW5n\", \"x\":0}}" 54 b.ResetTimer() 55 for i:=0; i<b.N; i++ { 56 var o *ObjStruct 57 _ = sonic.UnmarshalString(js, &o) 58 } 59 }