snapshot of https://github.com/blevesearch/bleve.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
Coverage / coverage (push) Failing after 6s
Tests / test (1.24.x, ubuntu-latest) (push) Failing after 42s
Tests / test (1.26.x, ubuntu-latest) (push) Failing after 38s
Tests / test (1.25.x, ubuntu-latest) (push) Failing after 35s
Tests / test (1.25.x, windows-latest) (push) Has been cancelled
Tests / test (1.26.x, macos-latest) (push) Has been cancelled
Tests / test (1.26.x, windows-latest) (push) Has been cancelled
Tests / test (1.24.x, macos-latest) (push) Has been cancelled
Tests / test (1.24.x, windows-latest) (push) Has been cancelled
Tests / test (1.25.x, macos-latest) (push) Has been cancelled
Some checks failed
Coverage / coverage (push) Failing after 6s
Tests / test (1.24.x, ubuntu-latest) (push) Failing after 42s
Tests / test (1.26.x, ubuntu-latest) (push) Failing after 38s
Tests / test (1.25.x, ubuntu-latest) (push) Failing after 35s
Tests / test (1.25.x, windows-latest) (push) Has been cancelled
Tests / test (1.26.x, macos-latest) (push) Has been cancelled
Tests / test (1.26.x, windows-latest) (push) Has been cancelled
Tests / test (1.24.x, macos-latest) (push) Has been cancelled
Tests / test (1.24.x, windows-latest) (push) Has been cancelled
Tests / test (1.25.x, macos-latest) (push) Has been cancelled
This commit is contained in:
117
geov2/score_test.go
Normal file
117
geov2/score_test.go
Normal file
@@ -0,0 +1,117 @@
|
||||
// Copyright (c) 2026 Couchbase, Inc.
|
||||
//
|
||||
// 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 geov2
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/blevesearch/geo/s2"
|
||||
)
|
||||
|
||||
func TestPow4(t *testing.T) {
|
||||
tests := []struct {
|
||||
exp uint64
|
||||
want uint64
|
||||
}{
|
||||
{0, 1},
|
||||
{1, 4},
|
||||
{10, 1048576},
|
||||
{15, 1073741824},
|
||||
{31, 4611686018427387904}, // last representable power of 4 in a uint64
|
||||
{32, 0}, // out of range, guarded to 0
|
||||
{100, 0}, // well out of range, guarded to 0
|
||||
}
|
||||
for _, test := range tests {
|
||||
if got := pow4(test.exp); got != test.want {
|
||||
t.Errorf("pow4(%d) = %d, want %d", test.exp, got, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCalcScore(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
queryCellLevel uint64
|
||||
indexCellLevel uint64
|
||||
want uint64
|
||||
}{
|
||||
{
|
||||
// equal levels: the overlap is a single cell at that level
|
||||
name: "equal levels", queryCellLevel: 16, indexCellLevel: 16, want: pow4(0),
|
||||
},
|
||||
{
|
||||
name: "equal levels shallow", queryCellLevel: 6, indexCellLevel: 6, want: pow4(10),
|
||||
},
|
||||
{
|
||||
// index cell is deeper (smaller): the overlap is the index cell
|
||||
name: "index deeper", queryCellLevel: 6, indexCellLevel: 10, want: pow4(6),
|
||||
},
|
||||
{
|
||||
// query cell is deeper (smaller): the overlap is the query cell
|
||||
name: "query deeper", queryCellLevel: 11, indexCellLevel: 8, want: pow4(5),
|
||||
},
|
||||
{
|
||||
name: "both at level 0", queryCellLevel: 0, indexCellLevel: 0, want: pow4(16),
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
if got := calcScore(test.queryCellLevel, test.indexCellLevel); got != test.want {
|
||||
t.Errorf("%s: calcScore(%d, %d) = %d, want %d",
|
||||
test.name, test.queryCellLevel, test.indexCellLevel, got, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// cellAtLevel returns a valid S2 cell ID at the requested level, derived
|
||||
// deterministically from a fixed face so tests do not depend on any RNG.
|
||||
func cellAtLevel(level int) uint64 {
|
||||
return uint64(s2.CellIDFromFace(1).ChildBeginAtLevel(level))
|
||||
}
|
||||
|
||||
func TestCalcCellsScore(t *testing.T) {
|
||||
// build cells at known levels; each contributes calcScore(0, level)
|
||||
// which equals pow4(16 - level)
|
||||
cells := []uint64{
|
||||
cellAtLevel(16), // contributes pow4(0) = 1
|
||||
cellAtLevel(15), // contributes pow4(1) = 4
|
||||
cellAtLevel(14), // contributes pow4(2) = 16
|
||||
}
|
||||
want := pow4(0) + pow4(1) + pow4(2)
|
||||
if got := CalcCellsScore(cells); got != want {
|
||||
t.Fatalf("CalcCellsScore = %d, want %d", got, want)
|
||||
}
|
||||
|
||||
// an empty slice scores zero
|
||||
if got := CalcCellsScore(nil); got != 0 {
|
||||
t.Fatalf("CalcCellsScore(nil) = %d, want 0", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCellLevelAndParent(t *testing.T) {
|
||||
cell := cellAtLevel(12)
|
||||
if got := getCellLevel(cell); got != 12 {
|
||||
t.Fatalf("getCellLevel = %d, want 12", got)
|
||||
}
|
||||
parent := getParentCell(cell, 8)
|
||||
if got := getCellLevel(parent); got != 8 {
|
||||
t.Fatalf("getCellLevel(parent) = %d, want 8", got)
|
||||
}
|
||||
// the parent's range must contain the child cell
|
||||
minVal, maxVal := getCellSearchBounds(parent)
|
||||
if cell < minVal || cell > maxVal {
|
||||
t.Fatalf("expected child cell %d to fall within parent bounds [%d, %d]",
|
||||
cell, minVal, maxVal)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user