mirror of
https://github.com/json-iterator/go.git
synced 2025-01-23 18:54:21 +02:00
Merge pull request #108 from cch123/feature-add-string-tests
add string convert tests
This commit is contained in:
commit
1745078ab7
@ -45,15 +45,21 @@ func (any *floatAny) ToUint() uint {
|
|||||||
if any.val > 0 {
|
if any.val > 0 {
|
||||||
return uint(any.val)
|
return uint(any.val)
|
||||||
}
|
}
|
||||||
return uint(-any.val)
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *floatAny) ToUint32() uint32 {
|
func (any *floatAny) ToUint32() uint32 {
|
||||||
return uint32(any.val)
|
if any.val > 0 {
|
||||||
|
return uint32(any.val)
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *floatAny) ToUint64() uint64 {
|
func (any *floatAny) ToUint64() uint64 {
|
||||||
return uint64(any.val)
|
if any.val > 0 {
|
||||||
|
return uint64(any.val)
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *floatAny) ToFloat32() float32 {
|
func (any *floatAny) ToFloat32() float32 {
|
||||||
|
@ -119,12 +119,37 @@ func (any *stringAny) ToUint64() uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (any *stringAny) ToFloat32() float32 {
|
func (any *stringAny) ToFloat32() float32 {
|
||||||
parsed, _ := strconv.ParseFloat(any.val, 32)
|
return float32(any.ToFloat64())
|
||||||
return float32(parsed)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *stringAny) ToFloat64() float64 {
|
func (any *stringAny) ToFloat64() float64 {
|
||||||
parsed, _ := strconv.ParseFloat(any.val, 64)
|
if len(any.val) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// first char invalid
|
||||||
|
if any.val[0] != '+' && any.val[0] != '-' && (any.val[0] > '9' || any.val[0] < '0') {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract valid num expression from string
|
||||||
|
// eg 123true => 123, -12.12xxa => -12.12
|
||||||
|
endPos := 1
|
||||||
|
for i := 1; i < len(any.val); i++ {
|
||||||
|
if any.val[i] == '.' || any.val[i] == 'e' {
|
||||||
|
endPos = i + 1
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// end position is the first char which is not digit
|
||||||
|
if any.val[i] >= '0' && any.val[i] <= '9' {
|
||||||
|
endPos = i + 1
|
||||||
|
} else {
|
||||||
|
endPos = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parsed, _ := strconv.ParseFloat(any.val[:endPos], 64)
|
||||||
return parsed
|
return parsed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
| json type \ dest type | bool | int | uint | string |
|
| json type \ dest type | bool | int | uint | float |string|
|
||||||
| --- | --- | --- | --- |--|
|
| --- | --- | --- | --- |--|--|
|
||||||
| number | positive => true <br/> negative => true <br/> zero => false| 23.2 => 23 <br/> -32.1 => -32| 12.1 => 12 <br/> -12.1 => 0||
|
| number | positive => true <br/> negative => true <br/> zero => false| 23.2 => 23 <br/> -32.1 => -32| 12.1 => 12 <br/> -12.1 => 0|as normal||
|
||||||
| string | empty string => false <br/> string "0" => false <br/> other strings => true | "123.32" => 123 <br/> "-123.4" => -123 <br/> "123.23xxxw" => 123 <br/> "abcde12" => 0 <br/> "-32.1" => -32| 13.2 => 13 <br/> -1.1 => 0 ||
|
| string | empty string => false <br/> string "0" => false <br/> other strings => true | "123.32" => 123 <br/> "-123.4" => -123 <br/> "123.23xxxw" => 123 <br/> "abcde12" => 0 <br/> "-32.1" => -32| 13.2 => 13 <br/> -1.1 => 0 |12.1 => 12.1 <br/> -12.3 => -12.3<br/> 12.4xxa => 12.4 <br/> +1.1e2 =>110 ||
|
||||||
| bool | true => true <br/> false => false| true => 1 <br/> false => 0 | true => 1 <br/> false => 0 ||
|
| bool | true => true <br/> false => false| true => 1 <br/> false => 0 | true => 1 <br/> false => 0 |true => 1 <br/>false => 0||
|
||||||
| object | true | 0 | 0 ||
|
| object | true | 0 | 0 |0||
|
||||||
| array | empty array => false <br/> nonempty array => true| [] => 0 <br/> [1,2] => 1 | [] => 0 <br/> [1,2] => 1 ||
|
| array | empty array => false <br/> nonempty array => true| [] => 0 <br/> [1,2] => 1 | [] => 0 <br/> [1,2] => 1 |[] => 0<br/>[1,2] => 1||
|
@ -15,12 +15,15 @@ var floatConvertMap = map[string]float64{
|
|||||||
`"false"`: 0,
|
`"false"`: 0,
|
||||||
|
|
||||||
"123": 123,
|
"123": 123,
|
||||||
`"123true"`: 0,
|
`"123true"`: 123,
|
||||||
|
`"+"`: 0,
|
||||||
|
`"-"`: 0,
|
||||||
|
|
||||||
`"-123true"`: 0,
|
`"-123true"`: -123,
|
||||||
"0": 0,
|
`"-99.9true"`: -99.9,
|
||||||
`"0"`: 0,
|
"0": 0,
|
||||||
"-1": -1,
|
`"0"`: 0,
|
||||||
|
"-1": -1,
|
||||||
|
|
||||||
"1.1": 1.1,
|
"1.1": 1.1,
|
||||||
"0.0": 0,
|
"0.0": 0,
|
||||||
@ -46,10 +49,25 @@ func Test_read_any_to_float(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_read_float_as_any(t *testing.T) {
|
func Test_read_float_to_any(t *testing.T) {
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
any := Get([]byte("12.3"))
|
any := WrapFloat64(12.3)
|
||||||
|
anyFloat64 := float64(12.3)
|
||||||
|
//negaAnyFloat64 := float64(-1.1)
|
||||||
|
any2 := WrapFloat64(-1.1)
|
||||||
should.Equal(float64(12.3), any.ToFloat64())
|
should.Equal(float64(12.3), any.ToFloat64())
|
||||||
should.Equal("12.3", any.ToString())
|
//should.Equal("12.3", any.ToString())
|
||||||
should.True(any.ToBool())
|
should.True(any.ToBool())
|
||||||
|
should.Equal(float32(anyFloat64), any.ToFloat32())
|
||||||
|
should.Equal(int(anyFloat64), any.ToInt())
|
||||||
|
should.Equal(int32(anyFloat64), any.ToInt32())
|
||||||
|
should.Equal(int64(anyFloat64), any.ToInt64())
|
||||||
|
should.Equal(uint(anyFloat64), any.ToUint())
|
||||||
|
should.Equal(uint32(anyFloat64), any.ToUint32())
|
||||||
|
should.Equal(uint64(anyFloat64), any.ToUint64())
|
||||||
|
should.Equal(uint(0), any2.ToUint())
|
||||||
|
should.Equal(uint32(0), any2.ToUint32())
|
||||||
|
should.Equal(uint64(0), any2.ToUint64())
|
||||||
|
should.Equal(any.ValueType(), Number)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package jsoniter
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/json-iterator/go/require"
|
"github.com/json-iterator/go/require"
|
||||||
@ -111,13 +110,65 @@ func Test_read_any_to_uint(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_read_int64_as_any(t *testing.T) {
|
func Test_read_int64_to_any(t *testing.T) {
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
any := Get([]byte("1234"))
|
any := WrapInt64(12345)
|
||||||
should.Equal(1234, any.ToInt())
|
should.Equal(12345, any.ToInt())
|
||||||
should.Equal(io.EOF, any.LastError())
|
should.Equal(int32(12345), any.ToInt32())
|
||||||
should.Equal("1234", any.ToString())
|
should.Equal(int64(12345), any.ToInt64())
|
||||||
should.True(any.ToBool())
|
should.Equal(uint(12345), any.ToUint())
|
||||||
|
should.Equal(uint32(12345), any.ToUint32())
|
||||||
|
should.Equal(uint64(12345), any.ToUint64())
|
||||||
|
should.Equal(float32(12345), any.ToFloat32())
|
||||||
|
should.Equal(float64(12345), any.ToFloat64())
|
||||||
|
should.Equal("12345", any.ToString())
|
||||||
|
should.Equal(true, any.ToBool())
|
||||||
|
}
|
||||||
|
func Test_read_int32_to_any(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
any := WrapInt32(12345)
|
||||||
|
should.Equal(12345, any.ToInt())
|
||||||
|
should.Equal(int32(12345), any.ToInt32())
|
||||||
|
should.Equal(int64(12345), any.ToInt64())
|
||||||
|
should.Equal(uint(12345), any.ToUint())
|
||||||
|
should.Equal(uint32(12345), any.ToUint32())
|
||||||
|
should.Equal(uint64(12345), any.ToUint64())
|
||||||
|
should.Equal(float32(12345), any.ToFloat32())
|
||||||
|
should.Equal(float64(12345), any.ToFloat64())
|
||||||
|
should.Equal("12345", any.ToString())
|
||||||
|
should.Equal(true, any.ToBool())
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_read_uint32_to_any(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
any := WrapUint32(12345)
|
||||||
|
should.Equal(12345, any.ToInt())
|
||||||
|
should.Equal(int32(12345), any.ToInt32())
|
||||||
|
should.Equal(int64(12345), any.ToInt64())
|
||||||
|
should.Equal(uint(12345), any.ToUint())
|
||||||
|
should.Equal(uint32(12345), any.ToUint32())
|
||||||
|
should.Equal(uint64(12345), any.ToUint64())
|
||||||
|
should.Equal(float32(12345), any.ToFloat32())
|
||||||
|
should.Equal(float64(12345), any.ToFloat64())
|
||||||
|
should.Equal("12345", any.ToString())
|
||||||
|
should.Equal(true, any.ToBool())
|
||||||
|
should.Equal(any.ValueType(), Number)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_read_uint64_to_any(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
any := WrapUint64(12345)
|
||||||
|
should.Equal(12345, any.ToInt())
|
||||||
|
should.Equal(int32(12345), any.ToInt32())
|
||||||
|
should.Equal(int64(12345), any.ToInt64())
|
||||||
|
should.Equal(uint(12345), any.ToUint())
|
||||||
|
should.Equal(uint32(12345), any.ToUint32())
|
||||||
|
should.Equal(uint64(12345), any.ToUint64())
|
||||||
|
should.Equal(float32(12345), any.ToFloat32())
|
||||||
|
should.Equal(float64(12345), any.ToFloat64())
|
||||||
|
should.Equal("12345", any.ToString())
|
||||||
|
should.Equal(true, any.ToBool())
|
||||||
|
should.Equal(any.ValueType(), Number)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_int_lazy_any_get(t *testing.T) {
|
func Test_int_lazy_any_get(t *testing.T) {
|
||||||
|
@ -6,6 +6,37 @@ import (
|
|||||||
"github.com/json-iterator/go/require"
|
"github.com/json-iterator/go/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var stringConvertMap = map[string]string{
|
||||||
|
"null": "",
|
||||||
|
"321.1": "321.1",
|
||||||
|
`"1.1"`: "1.1",
|
||||||
|
`"-123.1"`: "-123.1",
|
||||||
|
"0.0": "0.0",
|
||||||
|
"0": "0",
|
||||||
|
`"0"`: "0",
|
||||||
|
`"0.0"`: "0.0",
|
||||||
|
`"00.0"`: "00.0",
|
||||||
|
"true": "true",
|
||||||
|
"false": "false",
|
||||||
|
`"true"`: "true",
|
||||||
|
`"false"`: "false",
|
||||||
|
`"true123"`: "true123",
|
||||||
|
`"+1"`: "+1",
|
||||||
|
"[]": "[]",
|
||||||
|
"[1,2]": "[1,2]",
|
||||||
|
"{}": "{}",
|
||||||
|
"{1,2}": "{1,2}",
|
||||||
|
`{"a":1, "b":true}`: `{"a":1, "b":true}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_read_any_to_string(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
for k, v := range stringConvertMap {
|
||||||
|
any := Get([]byte(k))
|
||||||
|
should.Equal(v, any.ToString(), "original val "+k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Test_read_string_as_any(t *testing.T) {
|
func Test_read_string_as_any(t *testing.T) {
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
any := Get([]byte(`"hello"`))
|
any := Get([]byte(`"hello"`))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user