mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			117 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2011 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 syntax
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
var compileTests = []struct {
 | 
						|
	Regexp string
 | 
						|
	Prog   string
 | 
						|
}{
 | 
						|
	{"a", `  0	fail
 | 
						|
  1*	rune1 "a" -> 2
 | 
						|
  2	match
 | 
						|
`},
 | 
						|
	{"[A-M][n-z]", `  0	fail
 | 
						|
  1*	rune "AM" -> 2
 | 
						|
  2	rune "nz" -> 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"", `  0	fail
 | 
						|
  1*	nop -> 2
 | 
						|
  2	match
 | 
						|
`},
 | 
						|
	{"a?", `  0	fail
 | 
						|
  1	rune1 "a" -> 3
 | 
						|
  2*	alt -> 1, 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a??", `  0	fail
 | 
						|
  1	rune1 "a" -> 3
 | 
						|
  2*	alt -> 3, 1
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a+", `  0	fail
 | 
						|
  1*	rune1 "a" -> 2
 | 
						|
  2	alt -> 1, 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a+?", `  0	fail
 | 
						|
  1*	rune1 "a" -> 2
 | 
						|
  2	alt -> 3, 1
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a*", `  0	fail
 | 
						|
  1	rune1 "a" -> 2
 | 
						|
  2*	alt -> 1, 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a*?", `  0	fail
 | 
						|
  1	rune1 "a" -> 2
 | 
						|
  2*	alt -> 3, 1
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"a+b+", `  0	fail
 | 
						|
  1*	rune1 "a" -> 2
 | 
						|
  2	alt -> 1, 3
 | 
						|
  3	rune1 "b" -> 4
 | 
						|
  4	alt -> 3, 5
 | 
						|
  5	match
 | 
						|
`},
 | 
						|
	{"(a+)(b+)", `  0	fail
 | 
						|
  1*	cap 2 -> 2
 | 
						|
  2	rune1 "a" -> 3
 | 
						|
  3	alt -> 2, 4
 | 
						|
  4	cap 3 -> 5
 | 
						|
  5	cap 4 -> 6
 | 
						|
  6	rune1 "b" -> 7
 | 
						|
  7	alt -> 6, 8
 | 
						|
  8	cap 5 -> 9
 | 
						|
  9	match
 | 
						|
`},
 | 
						|
	{"a+|b+", `  0	fail
 | 
						|
  1	rune1 "a" -> 2
 | 
						|
  2	alt -> 1, 6
 | 
						|
  3	rune1 "b" -> 4
 | 
						|
  4	alt -> 3, 6
 | 
						|
  5*	alt -> 1, 3
 | 
						|
  6	match
 | 
						|
`},
 | 
						|
	{"A[Aa]", `  0	fail
 | 
						|
  1*	rune1 "A" -> 2
 | 
						|
  2	rune "A"/i -> 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
	{"(?:(?:^).)", `  0	fail
 | 
						|
  1*	empty 4 -> 2
 | 
						|
  2	anynotnl -> 3
 | 
						|
  3	match
 | 
						|
`},
 | 
						|
}
 | 
						|
 | 
						|
func TestCompile(t *testing.T) {
 | 
						|
	for _, tt := range compileTests {
 | 
						|
		re, _ := Parse(tt.Regexp, Perl)
 | 
						|
		p, _ := Compile(re)
 | 
						|
		s := p.String()
 | 
						|
		if s != tt.Prog {
 | 
						|
			t.Errorf("compiled %#q:\n--- have\n%s---\n--- want\n%s---", tt.Regexp, s, tt.Prog)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEmptyOpContext(b *testing.B) {
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		var r1 rune = -1
 | 
						|
		for _, r2 := range "foo, bar, baz\nsome input text.\n" {
 | 
						|
			EmptyOpContext(r1, r2)
 | 
						|
			r1 = r2
 | 
						|
		}
 | 
						|
		EmptyOpContext(r1, -1)
 | 
						|
	}
 | 
						|
}
 |