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  }