1// +build go1.8
2
3package misc_tests
4
5import (
6	"bytes"
7	"encoding/json"
8	"io/ioutil"
9	"strconv"
10	"testing"
11
12	"github.com/json-iterator/go"
13	"github.com/stretchr/testify/require"
14)
15
16func Test_read_uint64_invalid(t *testing.T) {
17	should := require.New(t)
18	iter := jsoniter.ParseString(jsoniter.ConfigDefault, ",")
19	iter.ReadUint64()
20	should.NotNil(iter.Error)
21}
22
23func Test_read_int32_array(t *testing.T) {
24	should := require.New(t)
25	input := `[123,456,789]`
26	val := make([]int32, 0)
27	jsoniter.UnmarshalFromString(input, &val)
28	should.Equal(3, len(val))
29}
30
31func Test_read_int64_array(t *testing.T) {
32	should := require.New(t)
33	input := `[123,456,789]`
34	val := make([]int64, 0)
35	jsoniter.UnmarshalFromString(input, &val)
36	should.Equal(3, len(val))
37}
38
39func Test_wrap_int(t *testing.T) {
40	should := require.New(t)
41	str, err := jsoniter.MarshalToString(jsoniter.WrapInt64(100))
42	should.Nil(err)
43	should.Equal("100", str)
44}
45
46func Test_write_val_int(t *testing.T) {
47	should := require.New(t)
48	buf := &bytes.Buffer{}
49	stream := jsoniter.NewStream(jsoniter.ConfigDefault, buf, 4096)
50	stream.WriteVal(1001)
51	stream.Flush()
52	should.Nil(stream.Error)
53	should.Equal("1001", buf.String())
54}
55
56func Test_write_val_int_ptr(t *testing.T) {
57	should := require.New(t)
58	buf := &bytes.Buffer{}
59	stream := jsoniter.NewStream(jsoniter.ConfigDefault, buf, 4096)
60	val := 1001
61	stream.WriteVal(&val)
62	stream.Flush()
63	should.Nil(stream.Error)
64	should.Equal("1001", buf.String())
65}
66
67func Test_float_as_int(t *testing.T) {
68	should := require.New(t)
69	var i int
70	should.NotNil(jsoniter.Unmarshal([]byte(`1.1`), &i))
71}
72
73func Benchmark_jsoniter_encode_int(b *testing.B) {
74	stream := jsoniter.NewStream(jsoniter.ConfigDefault, ioutil.Discard, 64)
75	for n := 0; n < b.N; n++ {
76		stream.Reset(nil)
77		stream.WriteUint64(0xffffffff)
78	}
79}
80
81func Benchmark_itoa(b *testing.B) {
82	for n := 0; n < b.N; n++ {
83		strconv.FormatInt(0xffffffff, 10)
84	}
85}
86
87func Benchmark_jsoniter_int(b *testing.B) {
88	iter := jsoniter.NewIterator(jsoniter.ConfigDefault)
89	input := []byte(`100`)
90	for n := 0; n < b.N; n++ {
91		iter.ResetBytes(input)
92		iter.ReadInt64()
93	}
94}
95
96func Benchmark_json_int(b *testing.B) {
97	for n := 0; n < b.N; n++ {
98		result := int64(0)
99		json.Unmarshal([]byte(`-100`), &result)
100	}
101}
102