Skip to content

Commit

Permalink
bench getbypath
Browse files Browse the repository at this point in the history
  • Loading branch information
AsterDY committed Apr 28, 2024
1 parent c90e98d commit 007e8f4
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
9 changes: 9 additions & 0 deletions dev/ast/node.go
Expand Up @@ -198,7 +198,16 @@ func (self *Node) GetByPath(path ...interface{}) Node {

/***************** Cast APIs ***********************/

func (n *Node) Int64() (int64, error) {
if err := n.should(types.T_NUMBER); err != nil {
return 0, err
}
return n.toInt64()
}

func (n *Node) toInt64() (int64, error) {
return json.Number(n.JSON).Int64()
}


/***************** Set APIs ***********************/
34 changes: 32 additions & 2 deletions dev/ast/node_test.go
Expand Up @@ -27,22 +27,52 @@ func getSample(width int, depth int) string {
func TestNodeParse(t *testing.T) {
n1, err := NewParser(`[1,"1",true]`).Parse()
require.NoError(t, err)
spew.Dump(n1.Kids)
spew.Dump(n1.Kids, len(n1.Kids))
src := getSample(100, 0)
n, err := NewParser(src).Parse()
require.NoError(t, err)
n50 := n.GetByPath("50")
require.Empty(t, n50.Error())
v, _ := n50.Int64()
require.Equal(t, int64(1), v)
js, err := n.MarshalJSON()
require.NoError(t, err)
require.Equal(t, src, string(js))
src = getSample(100, 1)
n, err = NewParser(src).Parse()
spew.Dump(n.Kids)
require.NoError(t, err)
js, err = n.MarshalJSON()
require.NoError(t, err)
require.Equal(t, src, string(js))
}

func BenchmarkNode_GetByPath(b *testing.B) {
b.Run("10/2", func(b *testing.B) {
src := getSample(10, 0)
b.ResetTimer()
n, _ := NewParser(src).Parse()
for i:=0; i< b.N; i++ {
_ = n.GetByPath("5")
}
})
b.Run("100/2", func(b *testing.B) {
src := getSample(100, 0)
b.ResetTimer()
n, _ := NewParser(src).Parse()
for i:=0; i< b.N; i++ {
_ = n.GetByPath("50")
}
})
b.Run("1000/2", func(b *testing.B) {
src := getSample(1000, 0)
b.ResetTimer()
n, _ := NewParser(src).Parse()
for i:=0; i< b.N; i++ {
_ = n.GetByPath("500")
}
})
}

func BenchmarkParse(b *testing.B) {
b.Run("10-0", func(b *testing.B) {
src := getSample(10, 0)
Expand Down

0 comments on commit 007e8f4

Please sign in to comment.