github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/src/m3ninx/index/segment/fst/regexp/regexp_test.go (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  // Adapted from: https://raw.githubusercontent.com/blevesearch/bleve/master/index/scorch/segment/regexp_test.go
    22  package regexp
    23  
    24  import (
    25  	"fmt"
    26  	"regexp/syntax"
    27  	"testing"
    28  )
    29  
    30  func TestLiteralPrefix(t *testing.T) {
    31  	tests := []struct {
    32  		input, expected string
    33  	}{
    34  		{"", ""},
    35  		{"hello", "hello"},
    36  		{"hello.?", "hello"},
    37  		{"hello$", "hello"},
    38  		{`[h][e][l][l][o].*world`, "hello"},
    39  		{`[h-h][e-e][l-l][l-l][o-o].*world`, "hello"},
    40  		{".*", ""},
    41  		{"h.*", "h"},
    42  		{"h.?", "h"},
    43  		{"h[a-z]", "h"},
    44  		{`h\s`, "h"},
    45  		{`(hello)world`, ""},
    46  		{`日本語`, "日本語"},
    47  		{`日本語\w`, "日本語"},
    48  		{`^hello`, ""},
    49  		{`^`, ""},
    50  		{`$`, ""},
    51  	}
    52  
    53  	for i, test := range tests {
    54  		t.Run(fmt.Sprintf("test: %d, %+v", i, test), func(t *testing.T) {
    55  			s, err := syntax.Parse(test.input, syntax.Perl)
    56  			if err != nil {
    57  				t.Fatalf("expected no syntax.Parse error, got: %v", err)
    58  			}
    59  
    60  			got := LiteralPrefix(s)
    61  			if test.expected != got {
    62  				t.Fatalf("got: %s", got)
    63  			}
    64  		})
    65  	}
    66  }