github.com/zerosnake0/jzon@v0.0.8/performance_skip_switch_slice_test.go (about) 1 package jzon 2 3 import "testing" 4 5 func skip(it *Iterator, c byte, vt ValueType) error { 6 switch c { 7 case '"': 8 return skipString(it, c) 9 case 'n': 10 return it.expectBytes("ull") 11 case 't': 12 return it.expectBytes("rue") 13 case 'f': 14 return it.expectBytes("alse") 15 case '[': 16 return skipArrayWithStack(it, c) 17 case '{': 18 return skipObjectWithStack(it, c) 19 default: 20 if vt != NumberValue { 21 return UnexpectedByteError{got: c} 22 } 23 return skipNumber(it, c) 24 } 25 } 26 27 func skip2(it *Iterator, c byte, _ ValueType) error { 28 return skipFunctions[c](it, c) 29 } 30 31 func Benchmark_Performance_Skip_Switch(b *testing.B) { 32 data := []byte(` "s", -123.0456e789, true, false, null, { } ]`) 33 b.Run("impl", func(b *testing.B) { 34 b.ReportAllocs() 35 it := NewIterator() 36 b.ResetTimer() 37 for i := 0; i < b.N; i++ { 38 it.ResetBytes(data) 39 skip2(it, '[', ArrayValue) 40 } 41 }) 42 b.Run("alter", func(b *testing.B) { 43 b.ReportAllocs() 44 it := NewIterator() 45 b.ResetTimer() 46 for i := 0; i < b.N; i++ { 47 it.ResetBytes(data) 48 skip(it, '[', ArrayValue) 49 } 50 }) 51 }