1
0
mirror of https://github.com/json-iterator/go.git synced 2025-04-17 11:26:35 +02:00

fix negative number to uint

This commit is contained in:
Xargin 2017-07-04 14:00:24 +08:00
parent ac8dd56dfb
commit 712ddb1942
3 changed files with 19 additions and 9 deletions

View File

@ -1,8 +1,6 @@
package jsoniter package jsoniter
import ( import "unsafe"
"unsafe"
)
type numberLazyAny struct { type numberLazyAny struct {
baseAny baseAny

View File

@ -21,6 +21,9 @@ func init() {
} }
func (iter *Iterator) ReadUint() uint { func (iter *Iterator) ReadUint() uint {
if iter.buf[iter.head] == '-' && len(iter.buf) > 1 {
iter.buf = iter.buf[1:]
}
return uint(iter.ReadUint64()) return uint(iter.ReadUint64())
} }
@ -104,6 +107,9 @@ func (iter *Iterator) ReadInt32() (ret int32) {
} }
func (iter *Iterator) ReadUint32() (ret uint32) { func (iter *Iterator) ReadUint32() (ret uint32) {
if iter.buf[iter.head] == '-' && len(iter.buf) > 1 {
iter.buf = iter.buf[1:]
}
return iter.readUint32(iter.nextToken()) return iter.readUint32(iter.nextToken())
} }
@ -215,6 +221,9 @@ func (iter *Iterator) ReadInt64() (ret int64) {
} }
func (iter *Iterator) ReadUint64() uint64 { func (iter *Iterator) ReadUint64() uint64 {
if iter.buf[iter.head] == '-' && len(iter.buf) > 1 {
iter.buf = iter.buf[1:]
}
return iter.readUint64(iter.nextToken()) return iter.readUint64(iter.nextToken())
} }

View File

@ -12,7 +12,7 @@ var intConvertMap = map[string]int{
"321.1": 321, "321.1": 321,
"-321.1": -321, "-321.1": -321,
`"1.1"`: 1, `"1.1"`: 1,
`"-1.1"`: -1, `"-321.1"`: -321,
"0.0": 0, "0.0": 0,
"0": 0, "0": 0,
`"0"`: 0, `"0"`: 0,
@ -58,13 +58,15 @@ func Test_read_any_to_int(t *testing.T) {
} }
var uintConvertMap = map[string]int{ var uintConvertMap = map[string]int{
"321.1": 321, "321.1": 321,
`"1.1"`: 1, `"1.1"`: 1,
`"-1.1"`: 1, `"-123.1"`: 123,
"0.0": 0, "0.0": 0,
"0": 0, "0": 0,
`"0"`: 0, `"0"`: 0,
`"0.0"`: 0, `"0.0"`: 0,
`"00.0"`: 0,
"true": 1, "true": 1,
"false": 0, "false": 0,
`"true"`: 0, `"true"`: 0,
@ -75,12 +77,13 @@ var uintConvertMap = map[string]int{
`""`: 0, `""`: 0,
"+": 0, "+": 0,
"-": 0, "-": 0,
".": 0,
"[]": 0, "[]": 0,
"[1,2]": 1, "[1,2]": 1,
"{}": 0, "{}": 0,
// TODO need to solve "{1,2}": 0,
//"-1.1": 1, "-1.1": 1,
//"-321.1": 321, "-321.1": 321,
} }
func Test_read_any_to_uint(t *testing.T) { func Test_read_any_to_uint(t *testing.T) {
@ -98,7 +101,7 @@ func Test_read_any_to_uint(t *testing.T) {
for k, v := range uintConvertMap { for k, v := range uintConvertMap {
any := Get([]byte(k)) any := Get([]byte(k))
should.Equal(uint32(v), any.ToUint32(), fmt.Sprintf("origin val %v", k)) should.Equal(uint(v), any.ToUint(), fmt.Sprintf("origin val %v", k))
} }
} }