bbqvec 0.0.10

Scalable, embeddable, vector storage for approximate K-nearest-neighbors (AKNN)
Documentation
use anyhow::Result;
use bbqvec::{self, backend::VectorBackend, IndexIDIterator};

#[test]
fn creates_a_vector() {
    let v = bbqvec::create_random_vector(20);
    assert_eq!(v.len(), 20);
}

#[test]
fn full_table_scan() -> Result<()> {
    let vecs = bbqvec::create_vector_set(20, 200);
    let mut mem = bbqvec::MemoryBackend::new(20, 3)?;
    for (id, v) in vecs.enumerate_ids() {
        mem.put_vector(id, v)?;
    }
    let target = bbqvec::create_random_vector(256);
    let _ = mem.find_nearest(&target, 20)?;
    Ok(())
}

#[test]
fn built_index() -> Result<()> {
    let vecs = bbqvec::create_vector_set(20, 2000);
    let mem = bbqvec::MemoryBackend::new(20, 10)?;
    let mut store = bbqvec::VectorStore::new_croaring_bitmap(mem)?;
    store.add_vector_iter(vecs.enumerate_ids())?;
    Ok(())
}

#[test]
fn built_quantized_index() -> Result<()> {
    let vecs = bbqvec::create_vector_set(20, 2000);
    let mem = bbqvec::QuantizedMemoryBackend::<bbqvec::BF16Quantization>::new(20, 10)?;
    let mut store = bbqvec::VectorStore::new_croaring_bitmap(mem)?;
    store.add_vector_iter(vecs.enumerate_ids())?;
    Ok(())
}

#[test]
fn built_big_index() -> Result<()> {
    let vecs = bbqvec::create_vector_set(256, 1000);
    let mem = bbqvec::MemoryBackend::new(256, 10)?;
    let mut store = bbqvec::VectorStore::new_croaring_bitmap(mem)?;
    store.add_vector_iter(vecs.enumerate_ids())?;
    Ok(())
}