use super::vector_statistics;
use crate::retrieval_planning::VectorStatisticsRead;
use std::cell::Cell;
use uqa_core::{DiskANNQueryStats, IndexStats};
use uqa_sql::SQLError;
struct Vectors(Cell<usize>);
impl VectorStatisticsRead for Vectors {
fn dimensions(&self, field: &str) -> Option<u32> {
(field == "embedding").then_some(2)
}
fn diskann_query_statistics(
&self,
field: &str,
query: &[f32],
) -> Result<Option<DiskANNQueryStats>, SQLError> {
assert_eq!(field, "embedding");
assert_eq!(query, [f32::MAX, 0.0]);
self.0.set(self.0.get() + 1);
Ok(None)
}
}
#[test]
fn physical_vector_cost_inputs_preserve_execution_validation() {
let vectors = Vectors(Cell::new(0));
let mut stats = IndexStats::new(1);
for query in [
vec![],
vec![1.0],
vec![1.0, 0.0, 0.0],
vec![f32::NAN, 0.0],
vec![f32::INFINITY, 0.0],
vec![f32::NEG_INFINITY, 0.0],
] {
vector_statistics(&vectors, &mut stats, vec![("embedding".into(), query)]).unwrap();
}
vector_statistics(
&vectors,
&mut stats,
vec![("missing".into(), vec![1.0, 0.0])],
)
.unwrap();
assert_eq!(vectors.0.get(), 0);
assert_eq!(stats.dimensions, 3);
vector_statistics(
&vectors,
&mut stats,
vec![("embedding".into(), vec![f32::MAX, 0.0])],
)
.unwrap();
assert_eq!(vectors.0.get(), 1);
}