blob: ea4f9da61190520ef356830225467698dce047d3 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 lucy
import "testing"
import "math/rand"
func TestRegistrySingle(t *testing.T) {
reg := newObjRegistry(4)
index := reg.store(42)
if intVal, ok := reg.fetch(index).(int); !ok || intVal != 42 {
t.Error("Failed to store/fetch int")
}
reg.delete(index)
if reg.fetch(index) != nil {
t.Error("Failed to delete int")
}
}
func TestRegistryMany(t *testing.T) {
reg := newObjRegistry(4)
stored := make(map[int]uintptr)
deleted := make(map[int]uintptr)
for i := 0; i < 1000; i++ {
if rand.Intn(10) == 0 {
// Randomly delete an element 10% of the time.
goner := rand.Intn(i - 1)
if index, ok := stored[goner]; ok {
reg.delete(index)
delete(stored, goner)
deleted[goner] = index
}
}
stored[i] = reg.store(i)
}
for expected, index := range stored {
got, ok := reg.fetch(index).(int)
if !ok {
t.Errorf("Failed to fetch stored value %d at index %d", expected, index)
} else if got != expected {
t.Errorf("Expected %d got %d", expected, got)
}
}
for i := 0; i < len(*reg.entries) - 1; i++ {
got, ok := reg.fetch(uintptr(i)).(int)
if ok {
if _, wasDeleted := deleted[got]; wasDeleted {
t.Errorf("Deleted item %d still present at index %d", got, i)
}
}
}
}
func TestRegistryStringSlice(t *testing.T) {
reg := newObjRegistry(4)
s := make([]int, 2)
index := reg.store(&s)
s2 := reg.fetch(index).(*[]int)
(*s2)[1] = 1000
if s[1] != 1000 {
t.Error("Not the same slice")
}
}
func TestRegistryRange(t *testing.T) {
reg := newObjRegistry(4)
if reg.fetch(uintptr(10)) != nil {
t.Error("Out of range index should return nil")
}
}