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 }