mirror of
https://github.com/json-iterator/go.git
synced 2024-11-27 08:30:57 +02:00
117 lines
3.1 KiB
Go
117 lines
3.1 KiB
Go
package misc_tests
|
|
|
|
import (
|
|
"encoding/json"
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/json-iterator/go"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_read_big_float(t *testing.T) {
|
|
should := require.New(t)
|
|
iter := jsoniter.ParseString(jsoniter.ConfigDefault, `12.3`)
|
|
val := iter.ReadBigFloat()
|
|
val64, _ := val.Float64()
|
|
should.Equal(12.3, val64)
|
|
}
|
|
|
|
func Test_read_big_int(t *testing.T) {
|
|
should := require.New(t)
|
|
iter := jsoniter.ParseString(jsoniter.ConfigDefault, `92233720368547758079223372036854775807`)
|
|
val := iter.ReadBigInt()
|
|
should.NotNil(val)
|
|
should.Equal(`92233720368547758079223372036854775807`, val.String())
|
|
}
|
|
|
|
func Test_read_float_as_interface(t *testing.T) {
|
|
should := require.New(t)
|
|
iter := jsoniter.ParseString(jsoniter.ConfigDefault, `12.3`)
|
|
should.Equal(float64(12.3), iter.Read())
|
|
}
|
|
|
|
func Test_wrap_float(t *testing.T) {
|
|
should := require.New(t)
|
|
str, err := jsoniter.MarshalToString(jsoniter.WrapFloat64(12.3))
|
|
should.Nil(err)
|
|
should.Equal("12.3", str)
|
|
}
|
|
|
|
func Test_read_float64_cursor(t *testing.T) {
|
|
should := require.New(t)
|
|
iter := jsoniter.ParseString(jsoniter.ConfigDefault, "[1.23456789\n,2,3]")
|
|
should.True(iter.ReadArray())
|
|
should.Equal(1.23456789, iter.Read())
|
|
should.True(iter.ReadArray())
|
|
should.Equal(float64(2), iter.Read())
|
|
}
|
|
|
|
func Test_read_float_scientific(t *testing.T) {
|
|
should := require.New(t)
|
|
var obj interface{}
|
|
should.NoError(jsoniter.UnmarshalFromString(`1e1`, &obj))
|
|
should.Equal(float64(10), obj)
|
|
should.NoError(json.Unmarshal([]byte(`1e1`), &obj))
|
|
should.Equal(float64(10), obj)
|
|
should.NoError(jsoniter.UnmarshalFromString(`1.0e1`, &obj))
|
|
should.Equal(float64(10), obj)
|
|
should.NoError(json.Unmarshal([]byte(`1.0e1`), &obj))
|
|
should.Equal(float64(10), obj)
|
|
}
|
|
|
|
func Test_lossy_float_marshal(t *testing.T) {
|
|
should := require.New(t)
|
|
api := jsoniter.Config{MarshalFloatWith6Digits: true}.Froze()
|
|
output, err := api.MarshalToString(float64(0.1234567))
|
|
should.Nil(err)
|
|
should.Equal("0.123457", output)
|
|
output, err = api.MarshalToString(float32(0.1234567))
|
|
should.Nil(err)
|
|
should.Equal("0.123457", output)
|
|
}
|
|
|
|
func Test_read_number(t *testing.T) {
|
|
should := require.New(t)
|
|
iter := jsoniter.ParseString(jsoniter.ConfigDefault, `92233720368547758079223372036854775807`)
|
|
val := iter.ReadNumber()
|
|
should.Equal(`92233720368547758079223372036854775807`, string(val))
|
|
}
|
|
|
|
func Test_encode_inf(t *testing.T) {
|
|
should := require.New(t)
|
|
_, err := json.Marshal(math.Inf(1))
|
|
should.Error(err)
|
|
_, err = jsoniter.Marshal(float32(math.Inf(1)))
|
|
should.Error(err)
|
|
_, err = jsoniter.Marshal(math.Inf(-1))
|
|
should.Error(err)
|
|
}
|
|
|
|
func Test_encode_nan(t *testing.T) {
|
|
should := require.New(t)
|
|
_, err := json.Marshal(math.NaN())
|
|
should.Error(err)
|
|
_, err = jsoniter.Marshal(float32(math.NaN()))
|
|
should.Error(err)
|
|
_, err = jsoniter.Marshal(math.NaN())
|
|
should.Error(err)
|
|
}
|
|
|
|
func Benchmark_jsoniter_float(b *testing.B) {
|
|
b.ReportAllocs()
|
|
input := []byte(`1.1123,`)
|
|
iter := jsoniter.NewIterator(jsoniter.ConfigDefault)
|
|
for n := 0; n < b.N; n++ {
|
|
iter.ResetBytes(input)
|
|
iter.ReadFloat64()
|
|
}
|
|
}
|
|
|
|
func Benchmark_json_float(b *testing.B) {
|
|
for n := 0; n < b.N; n++ {
|
|
result := float64(0)
|
|
json.Unmarshal([]byte(`1.1`), &result)
|
|
}
|
|
}
|