tile38/internal/server/token_test.go

226 lines
4.3 KiB
Go

package server
import (
"strings"
"testing"
"github.com/tidwall/tile38/internal/field"
)
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")
}
}
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))
}
}
// 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")
// }
// }
// }