...
Run Format

Source file src/regexp/syntax/prog_test.go

Documentation: regexp/syntax

  // 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)
  	}
  }
  

View as plain text