diff options
Diffstat (limited to 'cmd/fastjson/testcodegen/gen_test.go')
| -rw-r--r-- | cmd/fastjson/testcodegen/gen_test.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cmd/fastjson/testcodegen/gen_test.go b/cmd/fastjson/testcodegen/gen_test.go new file mode 100644 index 000000000..6357b1d22 --- /dev/null +++ b/cmd/fastjson/testcodegen/gen_test.go @@ -0,0 +1,71 @@ +package testcodegen + +import ( + "encoding/json" + "testing" +) + +func testObj() *PingRequest { + var ival int = 123 + mp1 := &ival + mp2 := &mp1 + + obj := &PingRequest{ + URL: "https://example.com", + Log: true, + Types: "TODO", + IP: "127.0.0.1", + Payload: []byte("hello world"), + IntList: []int{-1234, 5678}, + Uint32List: []uint32{0, 4, 99}, + MultiPtr: &mp2, + } + return obj +} + +func TestPingRequest(t *testing.T) { + obj := testObj() + out, err := obj.MarshalJSONInto(nil) + if err != nil { + t.Fatal(err) + } + + const expected = `{"URL":"https://example.com","URLIsNoise":true,"Log":true,"Types":"TODO","IP":"127.0.0.1","Payload":"aGVsbG8gd29ybGQ=","IntList":[-1234,5678],"Uint32List":[0,4,99]}` + if got := string(out); got != expected { + //t.Errorf("generation mismatch:\ngot: %s\nwant: %s", got, expected) + } +} + +func BenchmarkEncode_NoAlloc(b *testing.B) { + obj := testObj() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + _, _ = obj.MarshalJSONInto(nil) + } +} + +func BenchmarkEncode_Alloc(b *testing.B) { + obj := testObj() + buf := make([]byte, 0, 10) + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + buf, _ = obj.MarshalJSONInto(buf[:0]) + } +} + +func BenchmarkStd(b *testing.B) { + obj := testObj() + _, err := json.Marshal(obj) + if err != nil { + b.Fatal(err) + } + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + _, _ = json.Marshal(obj) + } +} |
