blob: 4faa741ef32d9cca370dd19e368cb30e0b866256 [file] [log] [blame]
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package zoekt
import (
"bytes"
"reflect"
"testing"
)
func TestReadWrite(t *testing.T) {
b, err := NewIndexBuilder(nil)
if err != nil {
t.Fatalf("NewIndexBuilder: %v", err)
}
if err := b.AddFile("filename", []byte("abcde")); err != nil {
t.Fatalf("AddFile: %v", err)
}
var buf bytes.Buffer
b.Write(&buf)
f := &memSeeker{buf.Bytes()}
r := reader{r: f}
var toc indexTOC
err = r.readTOC(&toc)
if err != nil {
t.Errorf("got read error %v", err)
}
if toc.fileContents.data.sz != 5 {
t.Errorf("got contents size %d, want 5", toc.fileContents.data.sz)
}
data, err := r.readIndexData(&toc)
if err != nil {
t.Fatalf("readIndexData: %v", err)
}
if got := data.fileName(0); string(got) != "filename" {
t.Errorf("got filename %q, want %q", got, "filename")
}
if len(data.ngrams) != 3 {
t.Fatalf("got ngrams %v, want 3 ngrams", data.ngrams)
}
if _, ok := data.ngrams[stringToNGram("bcq")]; ok {
t.Errorf("found ngram bcd in %v", data.ngrams)
}
}
func TestReadWriteNames(t *testing.T) {
b, err := NewIndexBuilder(nil)
if err != nil {
t.Fatalf("NewIndexBuilder: %v", err)
}
if err := b.AddFile("abCd", []byte("")); err != nil {
t.Fatalf("AddFile: %v", err)
}
var buf bytes.Buffer
b.Write(&buf)
f := &memSeeker{buf.Bytes()}
r := reader{r: f}
var toc indexTOC
if err := r.readTOC(&toc); err != nil {
t.Errorf("got read error %v", err)
}
if toc.fileNames.data.sz != 4 {
t.Errorf("got contents size %d, want 4", toc.fileNames.data.sz)
}
data, err := r.readIndexData(&toc)
if err != nil {
t.Fatalf("readIndexData: %v", err)
}
if !reflect.DeepEqual([]uint32{0, 4}, data.fileNameIndex) {
t.Errorf("got index %v, want {0,4}", data.fileNameIndex)
}
if got := data.fileNameNgrams[stringToNGram("bCd")]; !reflect.DeepEqual(got, []uint32{1}) {
t.Errorf("got trigram bcd at bits %v, want sz 2", data.fileNameNgrams)
}
}