aboutsummaryrefslogtreecommitdiff
path: root/internal/fuzzy/symbol_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/fuzzy/symbol_test.go')
-rw-r--r--internal/fuzzy/symbol_test.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/fuzzy/symbol_test.go b/internal/fuzzy/symbol_test.go
new file mode 100644
index 000000000..df74bbe0d
--- /dev/null
+++ b/internal/fuzzy/symbol_test.go
@@ -0,0 +1,79 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fuzzy_test
+
+import (
+ "testing"
+
+ . "golang.org/x/tools/internal/fuzzy"
+)
+
+func TestSymbolMatchIndex(t *testing.T) {
+ tests := []struct {
+ pattern, input string
+ want int
+ }{
+ {"test", "foo.TestFoo", 4},
+ {"test", "test", 0},
+ {"test", "Test", 0},
+ {"test", "est", -1},
+ {"t", "shortest", 7},
+ {"", "foo", -1},
+ {"", string([]rune{0}), -1}, // verify that we don't default to an empty pattern.
+ {"anything", "", -1},
+ }
+
+ for _, test := range tests {
+ matcher := NewSymbolMatcher(test.pattern)
+ if got, _ := matcher.Match([]string{test.input}); got != test.want {
+ t.Errorf("NewSymbolMatcher(%q).Match(%q) = %v, _, want %v, _", test.pattern, test.input, got, test.want)
+ }
+ }
+}
+
+func TestSymbolRanking(t *testing.T) {
+ matcher := NewSymbolMatcher("test")
+
+ // symbols to match, in ascending order of ranking.
+ symbols := []string{
+ "this.is.better.than.most",
+ "test.foo.bar",
+ "atest",
+ "thebest",
+ "test.foo",
+ "test.foo",
+ "tTest",
+ "testage",
+ "foo.test",
+ "test",
+ }
+ prev := 0.0
+ for _, sym := range symbols {
+ _, score := matcher.Match([]string{sym})
+ t.Logf("Match(%q) = %v", sym, score)
+ if score < prev {
+ t.Errorf("Match(%q) = _, %v, want > %v", sym, score, prev)
+ }
+ prev = score
+ }
+}
+
+func TestChunkedMatch(t *testing.T) {
+ matcher := NewSymbolMatcher("test")
+
+ chunked := [][]string{
+ {"test"},
+ {"", "test"},
+ {"test", ""},
+ {"te", "st"},
+ }
+
+ for _, chunks := range chunked {
+ offset, score := matcher.Match(chunks)
+ if offset != 0 || score != 1.0 {
+ t.Errorf("Match(%v) = %v, %v, want 0, 1.0", chunks, offset, score)
+ }
+ }
+}