///|
/// Benchmark: BPTreeAttrIndex set_attrs with many split points
test "bench/bptree_set_attrs_10k" (b : @bench.T) {
b.bench(fn() {
let index = BPTreeAttrIndex::new(order=32)
for i in 0..<10000 {
let attrs = @types.empty_attrs()
attrs.set("score", @types.Int(i.to_int64()))
attrs.set("bucket", @types.Int((i % 256).to_int64()))
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
b.keep(index.size())
})
}
///|
/// Benchmark: BPTreeAttrIndex equality lookup after scaling
test "bench/bptree_eq_lookup_10k" (b : @bench.T) {
let index = BPTreeAttrIndex::new(order=32)
for i in 0..<10000 {
let attrs = @types.empty_attrs()
attrs.set("score", @types.Int(i.to_int64()))
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
b.bench(fn() { b.keep(index.eq("score", @types.Int(7777L)).length()) })
}
///|
/// Benchmark: BPTreeAttrIndex range query after scaling
test "bench/bptree_range_query_10k" (b : @bench.T) {
let index = BPTreeAttrIndex::new(order=32)
for i in 0..<10000 {
let attrs = @types.empty_attrs()
attrs.set("score", @types.Int(i.to_int64()))
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
let range = @types.NumericRange::between(3000.0, 6999.0)
b.bench(fn() {
match index.range("score", range) {
Some(ids) => b.keep(ids.length())
None => b.keep(0)
}
})
}