Skip to content

Commit

Permalink
fix: wrong config for usenumber
Browse files Browse the repository at this point in the history
  • Loading branch information
liuq19 committed Apr 19, 2024
1 parent e6740d9 commit db8f69d
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 4 deletions.
60 changes: 58 additions & 2 deletions api_test.go
Expand Up @@ -17,9 +17,13 @@
package sonic

import (
`testing`
"encoding/json"
"reflect"
"testing"
"unsafe"

`github.com/stretchr/testify/require`
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestValid(t *testing.T) {
Expand Down Expand Up @@ -49,3 +53,55 @@ func TestValid(t *testing.T) {
require.Equal(t, tc.expected, Valid([]byte(tc.data)), tc.data)
}
}

func TestApiUseNumber(t *testing.T) {
cfg := Config{
UseNumber: true,
}.Froze()

var i interface{}
err := cfg.UnmarshalFromString("123", &i)
assert.NoError(t, err)
assert.Equal(t, i, interface{}(json.Number("123")))
}

func TestApiUseInt64(t *testing.T) {
cfg := Config{
UseInt64: true,
}.Froze()

var i interface{}
err := cfg.UnmarshalFromString("123", &i)
assert.NoError(t, err)
assert.Equal(t, i, interface{}(int64(123)))
}


func TestApiDefaultNoCopy(t *testing.T) {
// not copy the string
cfg := Config{
}.Froze()
var i string
data := "\"123\""
ptr0 := (*reflect.StringHeader)(unsafe.Pointer(&data)).Data + 1
err := cfg.UnmarshalFromString(data, &i)
assert.NoError(t, err)
assert.Equal(t, i, "123")
ptr1 := (*reflect.StringHeader)(unsafe.Pointer(&i)).Data
assert.Equal(t, ptr0, ptr1)
}

func TestApiCopyString(t *testing.T) {
cfg := Config{
CopyString: true,
}.Froze()

var i string
data := "\"123\""
ptr0 := (*reflect.StringHeader)(unsafe.Pointer(&data)).Data + 1
err := cfg.UnmarshalFromString(data, &i)
assert.NoError(t, err)
assert.Equal(t, i, "123")
ptr1 := (*reflect.StringHeader)(unsafe.Pointer(&i)).Data
assert.NotEqual(t, ptr0, ptr1)
}
14 changes: 12 additions & 2 deletions dev/rs_wrapper/src/lib.rs
Expand Up @@ -32,8 +32,18 @@ pub struct FreeArgs {
dom: *mut Dom,
}

const F_USE_NUMBER: u64 = 1 << 2;
const F_VALIDATE_STRING: u64 = 1 << 5;
const _F_USE_INT64: u64 = 0;
const _F_DIS_URC: u64 = 2;
const _F_DIS_UNKNOWN: u64 = 3;
const _F_COPY_STR: u64 = 4;

const _F_USE_NUMBER: u64 = 1; // types.B_USE_NUMBER
const _F_VALIDATE_STR: u64 = 5; // types.B_VALIDATE_STRING
const _F_ALLOW_CTL: u64 = 31; // types.B_ALLOW_CONTROL

// NOTE: only enbale these flags in sonic-rs.
const F_USE_NUMBER: u64 = 1 << _F_USE_NUMBER;
const F_VALIDATE_STRING: u64 = 1 << _F_VALIDATE_STR;

/// # Safety
/// FFI wrapper.
Expand Down

0 comments on commit db8f69d

Please sign in to comment.