extern crate alloc;
use alloc::sync::Arc;
use tinyquant_core::backend::{SearchBackend, SearchResult};
fn _assert_dyn_safe(_: &dyn SearchBackend) {}
fn _assert_send_sync<T: Send + Sync>() {}
fn _assert_clone<T: Clone>() {}
#[test]
fn search_result_is_send_sync_clone() {
_assert_send_sync::<SearchResult>();
_assert_clone::<SearchResult>();
}
#[test]
fn search_result_ordering_descending() {
let mut v = [
SearchResult {
vector_id: Arc::from("a"),
score: 0.5,
},
SearchResult {
vector_id: Arc::from("b"),
score: 0.9,
},
SearchResult {
vector_id: Arc::from("c"),
score: 0.1,
},
];
v.sort();
assert_eq!(v[0].vector_id.as_ref(), "b");
assert_eq!(v[1].vector_id.as_ref(), "a");
assert_eq!(v[2].vector_id.as_ref(), "c");
}
#[test]
fn search_result_nan_collapses_to_equal() {
use std::sync::Arc;
let mut v = [
SearchResult {
vector_id: Arc::from("one"),
score: 1.0,
},
SearchResult {
vector_id: Arc::from("nan"),
score: f32::NAN,
},
];
v.sort(); assert_eq!(v[0].vector_id.as_ref(), "nan");
}
#[test]
fn search_result_tie_breaks_preserve_insertion_order() {
let mut v = [
SearchResult {
vector_id: Arc::from("first"),
score: 0.5,
},
SearchResult {
vector_id: Arc::from("second"),
score: 0.5,
},
SearchResult {
vector_id: Arc::from("third"),
score: 0.5,
},
];
v.sort();
assert_eq!(v[0].vector_id.as_ref(), "first");
assert_eq!(v[1].vector_id.as_ref(), "second");
assert_eq!(v[2].vector_id.as_ref(), "third");
}