123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // +build amd64
- // Code generated by Makefile, DO NOT EDIT.
- /*
- * Copyright 2021 ByteDance Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package {{PACKAGE}}
- import (
- `encoding/json`
- `math`
- `math/rand`
- `strconv`
- `testing`
- `github.com/stretchr/testify/assert`
- )
- func TestFastFloat_Encode(t *testing.T) {
- var buf [64]byte
- assert.Equal(t, "0" , string(buf[:f64toa(&buf[0], 0)]))
- assert.Equal(t, "-0" , string(buf[:f64toa(&buf[0], math.Float64frombits(0x8000000000000000))]))
- assert.Equal(t, "12340000000" , string(buf[:f64toa(&buf[0], 1234e7)]))
- assert.Equal(t, "12.34" , string(buf[:f64toa(&buf[0], 1234e-2)]))
- assert.Equal(t, "0.001234" , string(buf[:f64toa(&buf[0], 1234e-6)]))
- assert.Equal(t, "1e+30" , string(buf[:f64toa(&buf[0], 1e30)]))
- assert.Equal(t, "1.234e+33" , string(buf[:f64toa(&buf[0], 1234e30)]))
- assert.Equal(t, "1.234e+308" , string(buf[:f64toa(&buf[0], 1234e305)]))
- assert.Equal(t, "1.234e-317" , string(buf[:f64toa(&buf[0], 1234e-320)]))
- assert.Equal(t, "1.7976931348623157e+308" , string(buf[:f64toa(&buf[0], 1.7976931348623157e308)]))
- assert.Equal(t, "-12340000000" , string(buf[:f64toa(&buf[0], -1234e7)]))
- assert.Equal(t, "-12.34" , string(buf[:f64toa(&buf[0], -1234e-2)]))
- assert.Equal(t, "-0.001234" , string(buf[:f64toa(&buf[0], -1234e-6)]))
- assert.Equal(t, "-1e+30" , string(buf[:f64toa(&buf[0], -1e30)]))
- assert.Equal(t, "-1.234e+33" , string(buf[:f64toa(&buf[0], -1234e30)]))
- assert.Equal(t, "-1.234e+308" , string(buf[:f64toa(&buf[0], -1234e305)]))
- assert.Equal(t, "-1.234e-317" , string(buf[:f64toa(&buf[0], -1234e-320)]))
- assert.Equal(t, "-2.2250738585072014e-308" , string(buf[:f64toa(&buf[0], -2.2250738585072014e-308)]))
- }
- func TestFastFloat_Random(t *testing.T) {
- var buf [64]byte
- N := 10000
- for i := 0; i < N; i++ {
- b64 := uint64(rand.Uint32())<<32 | uint64(rand.Uint32())
- f64 := math.Float64frombits(b64)
- jout, jerr := json.Marshal(f64)
- n := f64toa(&buf[0], f64)
- if jerr == nil {
- assert.Equal(t, jout, buf[:n])
- } else {
- assert.True(t, n == 0)
- }
- f32 := math.Float32frombits(rand.Uint32())
- jout, jerr = json.Marshal(f32)
- n = f32toa(&buf[0], f32)
- if jerr == nil {
- assert.Equal(t, jout, buf[:n])
- } else {
- assert.True(t, n == 0)
- }
- }
- }
- func BenchmarkParseFloat64(b *testing.B) {
- var f64toaBenches = []struct {
- name string
- float float64
- }{
- {"Zero", 0},
- {"Decimal", 33909},
- {"Float", 339.7784},
- {"Exp", -5.09e75},
- {"NegExp", -5.11e-95},
- {"LongExp", 1.234567890123456e-78},
- {"Big", 123456789123456789123456789},
-
- }
- for _, c := range f64toaBenches {
- f64bench := []struct {
- name string
- test func(*testing.B)
- }{{
- name: "StdLib",
- test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { strconv.AppendFloat(buf[:0], c.float, 'g', -1, 64) }},
- }, {
- name: "FastFloat",
- test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { f64toa(&buf[0], c.float) }},
- }}
- for _, bm := range f64bench {
- name := bm.name + "_" + c.name
- b.Run(name, bm.test)
- }
- }
- }
- func BenchmarkParseFloat32(b *testing.B) {
- var f32toaBenches = []struct {
- name string
- float float32
- }{
- {"Zero", 0},
- {"Integer", 33909},
- {"ExactFraction", 3.375},
- {"Point", 339.7784},
- {"Exp", -5.09e25},
- {"NegExp", -5.11e-25},
- {"Shortest", 1.234567e-8},
- }
- for _, c := range f32toaBenches {
- bench := []struct {
- name string
- test func(*testing.B)
- }{{
- name: "StdLib32",
- test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { strconv.AppendFloat(buf[:0], float64(c.float), 'g', -1, 32) }},
- }, {
- name: "FastFloat32",
- test: func(b *testing.B) { var buf [64]byte; for i := 0; i < b.N; i++ { f32toa(&buf[0], c.float) }},
- }}
- for _, bm := range bench {
- name := bm.name + "_" + c.name
- b.Run(name, bm.test)
- }
- }
- }
|