2018-10-29 01:49:45 +03:00
|
|
|
package server
|
2016-03-05 02:08:16 +03:00
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
"testing"
|
2024-05-27 23:54:55 +03:00
|
|
|
|
|
|
|
"github.com/tidwall/tile38/internal/field"
|
2016-03-05 02:08:16 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestLowerCompare(t *testing.T) {
|
|
|
|
if !lc("hello", "hello") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if !lc("Hello", "hello") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if !lc("HeLLo World", "hello world") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if !lc("", "") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if lc("hello", "") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if lc("", "hello") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
if lc("HeLLo World", "Hello world") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-27 23:54:55 +03:00
|
|
|
func TestParseWhereins(t *testing.T) {
|
|
|
|
s := &Server{}
|
|
|
|
|
|
|
|
type tcase struct {
|
|
|
|
inputWhereins []whereinT
|
|
|
|
expWhereins []whereinT
|
|
|
|
}
|
|
|
|
|
|
|
|
fn := func(tc tcase) func(t *testing.T) {
|
|
|
|
return func(t *testing.T) {
|
|
|
|
|
|
|
|
_, tout, err := s.parseSearchScanBaseTokens(
|
|
|
|
"scan",
|
|
|
|
searchScanBaseTokens{
|
|
|
|
whereins: tc.inputWhereins,
|
|
|
|
},
|
|
|
|
[]string{"key"},
|
|
|
|
)
|
|
|
|
got := tout.whereins
|
|
|
|
exp := tc.expWhereins
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("unexpected error while parsing search scan base tokens")
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(got) != len(exp) {
|
|
|
|
t.Fatalf("expected equal length whereins")
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := range got {
|
|
|
|
if got[i].name != exp[i].name {
|
|
|
|
t.Fatalf("expected equal field names")
|
|
|
|
}
|
|
|
|
|
|
|
|
for j := range exp[i].valArr {
|
|
|
|
if !got[i].match(exp[i].valArr[j]) {
|
|
|
|
t.Fatalf("expected matching value arrays")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
tests := map[string]tcase{
|
|
|
|
"upper case": {
|
|
|
|
inputWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "TEST",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
expWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "TEST",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"lower case": {
|
|
|
|
inputWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "test",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
expWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "test",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"mixed case": {
|
|
|
|
inputWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "teSt",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
expWhereins: []whereinT{
|
|
|
|
{
|
|
|
|
name: "teSt",
|
|
|
|
valArr: []field.Value{
|
|
|
|
field.ValueOf("1"),
|
|
|
|
field.ValueOf("1"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, tc := range tests {
|
|
|
|
t.Run(name, fn(tc))
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-03-05 02:08:16 +03:00
|
|
|
// func testParseFloat(t testing.TB, s string, f float64, invalid bool) {
|
|
|
|
// n, err := parseFloat(s)
|
|
|
|
// if err != nil {
|
|
|
|
// if invalid {
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// t.Fatal(err)
|
|
|
|
// }
|
|
|
|
// if invalid {
|
|
|
|
// t.Fatalf("expecting an error for %s", s)
|
|
|
|
// }
|
|
|
|
// if n != f {
|
|
|
|
// t.Fatalf("for '%s', expect %f, got %f", s, f, n)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func TestParseFloat(t *testing.T) {
|
|
|
|
// testParseFloat(t, "100", 100, false)
|
|
|
|
// testParseFloat(t, "0", 0, false)
|
|
|
|
// testParseFloat(t, "-1", -1, false)
|
|
|
|
// testParseFloat(t, "-0", -0, false)
|
|
|
|
|
|
|
|
// testParseFloat(t, "-100", -100, false)
|
|
|
|
// testParseFloat(t, "-0", -0, false)
|
|
|
|
// testParseFloat(t, "+1", 1, false)
|
|
|
|
// testParseFloat(t, "+0", 0, false)
|
|
|
|
|
|
|
|
// testParseFloat(t, "33.102938", 33.102938, false)
|
|
|
|
// testParseFloat(t, "-115.123123", -115.123123, false)
|
|
|
|
|
|
|
|
// testParseFloat(t, ".1", 0.1, false)
|
|
|
|
// testParseFloat(t, "0.1", 0.1, false)
|
|
|
|
|
|
|
|
// testParseFloat(t, "00.1", 0.1, false)
|
|
|
|
// testParseFloat(t, "01.1", 1.1, false)
|
|
|
|
// testParseFloat(t, "01", 1, false)
|
|
|
|
// testParseFloat(t, "-00.1", -0.1, false)
|
|
|
|
// testParseFloat(t, "+00.1", 0.1, false)
|
|
|
|
// testParseFloat(t, "", 0.1, true)
|
|
|
|
// testParseFloat(t, " 0", 0.1, true)
|
|
|
|
// testParseFloat(t, "0 ", 0.1, true)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
func BenchmarkLowerCompare(t *testing.B) {
|
|
|
|
for i := 0; i < t.N; i++ {
|
|
|
|
if !lc("HeLLo World", "hello world") {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkStringsLowerCompare(t *testing.B) {
|
|
|
|
for i := 0; i < t.N; i++ {
|
|
|
|
if strings.ToLower("HeLLo World") != "hello world" {
|
|
|
|
t.Fatal("failed")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// func BenchmarkParseFloat(t *testing.B) {
|
|
|
|
// s := []string{"33.10293", "-115.1203102"}
|
|
|
|
// for i := 0; i < t.N; i++ {
|
|
|
|
// _, err := parseFloat(s[i%2])
|
|
|
|
// if err != nil {
|
|
|
|
// t.Fatal("failed")
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func BenchmarkStrconvParseFloat(t *testing.B) {
|
|
|
|
// s := []string{"33.10293", "-115.1203102"}
|
|
|
|
// for i := 0; i < t.N; i++ {
|
|
|
|
// _, err := strconv.ParseFloat(s[i%2], 64)
|
|
|
|
// if err != nil {
|
|
|
|
// t.Fatal("failed")
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|