mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
// Copyright 2022 Molecula Corp. (DBA FeatureBase).
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package ingest
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
type badTranslator struct{}
|
|
|
|
func (b badTranslator) TranslateKeys(keys ...string) (map[string]uint64, error) {
|
|
if len(keys) == 0 {
|
|
return nil, errors.New("no keys")
|
|
}
|
|
m := make(map[string]uint64)
|
|
skip := true
|
|
for i, k := range keys {
|
|
if skip {
|
|
skip = false
|
|
continue
|
|
}
|
|
m[k] = uint64(i)
|
|
}
|
|
out := make([]uint64, len(keys)-1)
|
|
for i := range out {
|
|
out[i] = uint64(i)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func (b badTranslator) TranslateIDs(...uint64) (map[uint64]string, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func TestStringTableErrors(t *testing.T) {
|
|
tbl := NewStringTable()
|
|
btr := badTranslator{}
|
|
_, keyErr := tbl.MakeIDMap(btr)
|
|
if keyErr == nil {
|
|
t.Fatalf("expected error passed up from failed translate, didn't get it")
|
|
}
|
|
a1, err := tbl.ID([]byte("a"))
|
|
if err != nil {
|
|
t.Fatalf("getting translation for key: %v", err)
|
|
}
|
|
b1, err := tbl.ID([]byte("b"))
|
|
if err != nil {
|
|
t.Fatalf("getting translation for key: %v", err)
|
|
}
|
|
_, keyErr = tbl.MakeIDMap(btr)
|
|
if keyErr == nil {
|
|
t.Fatalf("expected error for short translate, didn't get it")
|
|
}
|
|
tr := newStableTranslator()
|
|
_, err = tr.TranslateKeys("c", "d")
|
|
if err != nil {
|
|
t.Fatalf("translating stray keys: %v", err)
|
|
}
|
|
m, err := tbl.MakeIDMap(tr)
|
|
if err != nil {
|
|
t.Fatalf("creating lookup: %v", err)
|
|
}
|
|
var y = []uint64{a1, b1}
|
|
err = translateUnsigned(m, y)
|
|
if err != nil {
|
|
t.Fatalf("unexpected unsigned translation error: %v", err)
|
|
}
|
|
trResults, err := tr.TranslateKeys("a", "b")
|
|
if err != nil {
|
|
t.Fatalf("unexpected translation error: %v", err)
|
|
}
|
|
if y[0] != trResults["a"] {
|
|
t.Fatalf("expected %d, got %d", trResults["a"], y[0])
|
|
}
|
|
if y[1] != trResults["b"] {
|
|
t.Fatalf("expected %d, got %d", trResults["b"], y[1])
|
|
}
|
|
y[0] = a1
|
|
y[1] = (a1 + b1 + 1) // assumed not to be any of them
|
|
err = translateUnsigned(m, y)
|
|
if err == nil {
|
|
t.Fatalf("no error from translating invalid table")
|
|
}
|
|
z := []int64{int64(a1), int64(b1)}
|
|
err = translateSigned(m, z)
|
|
if err != nil {
|
|
t.Fatalf("unexpected unsigned translation error: %v", err)
|
|
}
|
|
if uint64(z[0]) != trResults["a"] {
|
|
t.Fatalf("expected %d, got %d", trResults["a"], z[0])
|
|
}
|
|
if uint64(z[1]) != trResults["b"] {
|
|
t.Fatalf("expected %d, got %d", trResults["b"], z[1])
|
|
}
|
|
z[0] = int64(a1)
|
|
z[1] = int64(a1 + b1 + 1) // assumed not to be any of them
|
|
err = translateSigned(m, z)
|
|
if err == nil {
|
|
t.Fatalf("no error from translating invalid table")
|
|
}
|
|
}
|