diff options
author | Rob Pike <r@golang.org> | 2009-11-19 16:45:50 -0800 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2009-11-19 16:45:50 -0800 |
commit | 2ccc02b444962f25e2aa195bf1490ea052cb9fdf (patch) | |
tree | 5434a9f690a194d749fd0bdf68e50774a0842687 /src/pkg/regexp/all_test.go | |
parent | c73996254551b131642465145fcc4c8cad3a0b44 (diff) | |
download | golang-2ccc02b444962f25e2aa195bf1490ea052cb9fdf.tar.gz |
two easy optimizations for regexp:
1) if char class contains a single character, make it a single character.
(this is used to quote, e.g. [.] rather than \.
2) if regexp begins with ordinary text substring, use plain string match to start engine
R=rsc
CC=golang-dev
http://codereview.appspot.com/157095
Diffstat (limited to 'src/pkg/regexp/all_test.go')
-rw-r--r-- | src/pkg/regexp/all_test.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/pkg/regexp/all_test.go b/src/pkg/regexp/all_test.go index a9f23d70c..522324871 100644 --- a/src/pkg/regexp/all_test.go +++ b/src/pkg/regexp/all_test.go @@ -60,6 +60,8 @@ type tester struct { } var matches = []tester{ + tester{`a+`, "baaab", vec{1, 4}}, + tester{"abcd..", "abcdef", vec{0, 6}}, tester{``, "", vec{0, 0}}, tester{`a`, "a", vec{0, 1}}, tester{`x`, "y", vec{}}, @@ -78,6 +80,8 @@ var matches = []tester{ tester{`[a\-\]z]+`, "az]-bcz", vec{0, 4}}, tester{`[^\n]+`, "abcd\n", vec{0, 4}}, tester{`[日本語]+`, "日本語日本語", vec{0, 18}}, + tester{`日本語+`, "日本語", vec{0, 9}}, + tester{`日本語+`, "日本語語語語", vec{0, 18}}, tester{`()`, "", vec{0, 0, 0, 0}}, tester{`(a)`, "a", vec{0, 1, 0, 1}}, tester{`(.)(.)`, "日a", vec{0, 4, 0, 3, 3, 4}}, @@ -89,6 +93,7 @@ var matches = []tester{ tester{`(((a|b|c)*)(d))`, "abcd", vec{0, 4, 0, 4, 0, 3, 2, 3, 3, 4}}, tester{`a*(|(b))c*`, "aacc", vec{0, 4, 2, 2, -1, -1}}, tester{`(.*).*`, "ab", vec{0, 2, 0, 2}}, + tester{`[.]`, ".", vec{0, 1}}, } func compileTest(t *testing.T, expr string, error os.Error) *Regexp { |