jsoniter_float_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package misc_tests
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "github.com/json-iterator/go"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func Test_read_big_float(t *testing.T) {
  9. should := require.New(t)
  10. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `12.3`)
  11. val := iter.ReadBigFloat()
  12. val64, _ := val.Float64()
  13. should.Equal(12.3, val64)
  14. }
  15. func Test_read_big_int(t *testing.T) {
  16. should := require.New(t)
  17. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `92233720368547758079223372036854775807`)
  18. val := iter.ReadBigInt()
  19. should.NotNil(val)
  20. should.Equal(`92233720368547758079223372036854775807`, val.String())
  21. }
  22. func Test_read_float_as_interface(t *testing.T) {
  23. should := require.New(t)
  24. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `12.3`)
  25. should.Equal(float64(12.3), iter.Read())
  26. }
  27. func Test_wrap_float(t *testing.T) {
  28. should := require.New(t)
  29. str, err := jsoniter.MarshalToString(jsoniter.WrapFloat64(12.3))
  30. should.Nil(err)
  31. should.Equal("12.3", str)
  32. }
  33. func Test_read_float64_cursor(t *testing.T) {
  34. should := require.New(t)
  35. iter := jsoniter.ParseString(jsoniter.ConfigDefault, "[1.23456789\n,2,3]")
  36. should.True(iter.ReadArray())
  37. should.Equal(1.23456789, iter.Read())
  38. should.True(iter.ReadArray())
  39. should.Equal(float64(2), iter.Read())
  40. }
  41. func Test_read_float_scientific(t *testing.T) {
  42. should := require.New(t)
  43. var obj interface{}
  44. should.NoError(jsoniter.UnmarshalFromString(`1e1`, &obj))
  45. should.Equal(float64(10), obj)
  46. should.NoError(json.Unmarshal([]byte(`1e1`), &obj))
  47. should.Equal(float64(10), obj)
  48. should.NoError(jsoniter.UnmarshalFromString(`1.0e1`, &obj))
  49. should.Equal(float64(10), obj)
  50. should.NoError(json.Unmarshal([]byte(`1.0e1`), &obj))
  51. should.Equal(float64(10), obj)
  52. }
  53. func Test_lossy_float_marshal(t *testing.T) {
  54. should := require.New(t)
  55. api := jsoniter.Config{MarshalFloatWith6Digits: true}.Froze()
  56. output, err := api.MarshalToString(float64(0.1234567))
  57. should.Nil(err)
  58. should.Equal("0.123457", output)
  59. output, err = api.MarshalToString(float32(0.1234567))
  60. should.Nil(err)
  61. should.Equal("0.123457", output)
  62. }
  63. func Test_read_number(t *testing.T) {
  64. should := require.New(t)
  65. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `92233720368547758079223372036854775807`)
  66. val := iter.ReadNumber()
  67. should.Equal(`92233720368547758079223372036854775807`, string(val))
  68. }
  69. func Benchmark_jsoniter_float(b *testing.B) {
  70. b.ReportAllocs()
  71. input := []byte(`1.1123,`)
  72. iter := jsoniter.NewIterator(jsoniter.ConfigDefault)
  73. for n := 0; n < b.N; n++ {
  74. iter.ResetBytes(input)
  75. iter.ReadFloat64()
  76. }
  77. }
  78. func Benchmark_json_float(b *testing.B) {
  79. for n := 0; n < b.N; n++ {
  80. result := float64(0)
  81. json.Unmarshal([]byte(`1.1`), &result)
  82. }
  83. }