Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions cgo_harness/p14_profile_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
//go:build cgo && treesitter_c_parity

package cgoharness

import (
"testing"

gotreesitter "github.com/odvcencio/gotreesitter"
)

func benchmarkP14EarlyNewlineDirection(b *testing.B, reverse bool) {
b.Helper()
cases := loadCanonicalGoIncrementalCases(b)
var tc canonicalGoIncrementalCase
for _, candidate := range cases {
if candidate.spec.Name == "early_newline" {
tc = candidate
break
}
}
if tc.spec.Name == "" {
b.Fatal("canonical early_newline case is missing")
}
var from, target []byte
var edit gotreesitter.InputEdit
if reverse {
from, target, edit = tc.edited, tc.source, tc.reverse
} else {
from, target, edit = tc.source, tc.edited, tc.forward
}
parser := gotreesitter.NewParser(canonicalIncrementalGoLanguage(b, "go"))
tree, err := parser.Parse(from)
requireCanonicalGoIncrementalTree(b, tree, from, "P14 profile initial", err)
defer releaseCanonicalGoTree(tree)

b.ReportAllocs()
b.SetBytes(int64((len(tc.source) + len(tc.edited)) / 2))
b.ResetTimer()
for i := 0; i < b.N; i++ {
if i > 0 {
b.StopTimer()
releaseCanonicalGoTree(tree)
tree, err = parser.Parse(from)
requireCanonicalGoIncrementalTree(b, tree, from, "P14 profile reset", err)
b.StartTimer()
}
tree.Edit(edit)
newTree, _, err := parser.ParseIncrementalProfiled(target, tree)
requireCanonicalGoIncrementalTree(b, newTree, target, "P14 profile direction", err)
if newTree != tree {
tree.Release()
}
tree = newTree
}
b.StopTimer()
}

func BenchmarkP14EarlyNewlineForward(b *testing.B) {
benchmarkP14EarlyNewlineDirection(b, false)
}

func BenchmarkP14EarlyNewlineReverse(b *testing.B) {
benchmarkP14EarlyNewlineDirection(b, true)
}
Loading