///|
/// Benchmark: BasicAttrIndex set_attrs (5 attrs)
test "bench/basic_set_attrs_5" (b : @bench.T) {
let attrs = @types.empty_attrs()
attrs.set("name", @types.String("test"))
attrs.set("score", @types.Float(0.95))
attrs.set("count", @types.Int(42L))
attrs.set("active", @types.Bool(true))
attrs.set("tag", @types.String("benchmark"))
b.bench(fn() {
let index = BasicAttrIndex::new()
for i in 0..<100 {
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
b.keep(index.size())
})
}
///|
/// Benchmark: BasicAttrIndex get_attrs
test "bench/basic_get_attrs" (b : @bench.T) {
let index = BasicAttrIndex::new()
let attrs = @types.empty_attrs()
attrs.set("name", @types.String("test"))
for i in 0..<1000 {
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
let id = @types.VectorId::from_int(500)
b.bench(fn() { b.keep(index.get_attrs(id) is Some(_)) })
}
///|
/// Benchmark: BasicAttrIndex equality lookup
test "bench/basic_eq_lookup" (b : @bench.T) {
let index = BasicAttrIndex::new()
for i in 0..<1000 {
let attrs = @types.empty_attrs()
attrs.set("category", @types.String("cat_" + (i % 100).to_string()))
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
b.bench(fn() {
b.keep(index.eq("category", @types.String("cat_50")).length())
})
}
///|
/// Benchmark: BasicAttrIndex exists lookup
test "bench/basic_exists_lookup" (b : @bench.T) {
let index = BasicAttrIndex::new()
for i in 0..<1000 {
let attrs = @types.empty_attrs()
attrs.set("name", @types.String("test_" + i.to_string()))
if i % 2 == 0 {
attrs.set("optional", @types.Int(i.to_int64()))
}
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
b.bench(fn() { b.keep(index.exists("optional").length()) })
}
///|
/// Benchmark: BasicAttrIndex range query
test "bench/basic_range_query" (b : @bench.T) {
let index = BasicAttrIndex::new()
for i in 0..<1000 {
let attrs = @types.empty_attrs()
attrs.set("score", @types.Float(i.to_double() / 1000.0))
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
let range = @types.NumericRange::between(0.3, 0.7)
b.bench(fn() {
match index.range("score", range) {
Some(ids) => b.keep(ids.length())
None => b.keep(0)
}
})
}
///|
/// Benchmark: BasicAttrIndex remove_id
test "bench/basic_remove_id" (b : @bench.T) {
let attrs = @types.empty_attrs()
attrs.set("name", @types.String("test"))
attrs.set("score", @types.Float(0.5))
b.bench(fn() {
let index = BasicAttrIndex::new()
for i in 0..<100 {
index.set_attrs(@types.VectorId::from_int(i), attrs)
}
for i in 0..<100 {
index.remove_id(@types.VectorId::from_int(i))
}
b.keep(index.size())
})
}