use candle_core::DType;
use crate::registry;
use crate::registry::multi_vector;
use crate::registry::rerank;
use crate::registry::sparse;
const DTYPES: [DType; 3] = [DType::F32, DType::F16, DType::BF16];
#[test]
fn every_catalogs_answer_is_the_row_its_builder_refuses_from() {
for d in registry::dense::all() {
for dtype in DTYPES {
let row = d.dtype_backends.row(dtype);
assert_eq!(
registry::dense::dtype_needs_accelerator(&d.id, dtype),
row.needs_accelerator(),
"dense {} {dtype:?}: {row:?}",
d.id
);
}
}
for d in sparse::all() {
for dtype in DTYPES {
let row = d.dtype_backends.row(dtype);
assert_eq!(
sparse::dtype_needs_accelerator(&d.id, dtype),
row.needs_accelerator(),
"sparse {} {dtype:?}: {row:?}",
d.id
);
}
}
for d in multi_vector::all() {
for dtype in DTYPES {
let row = d.dtype_backends.row(dtype);
assert_eq!(
multi_vector::dtype_needs_accelerator(&d.id, dtype),
row.needs_accelerator(),
"multi-vector {} {dtype:?}: {row:?}",
d.id
);
}
}
for d in rerank::all() {
for dtype in DTYPES {
let row = d.dtype_backends.row(dtype);
assert_eq!(
rerank::dtype_needs_accelerator(&d.id, dtype),
row.needs_accelerator(),
"rerank {} {dtype:?}: {row:?}",
d.id
);
}
}
}
#[test]
fn needs_accelerator_is_a_processor_refusal_that_metal_serves() {
use crate::registry::BackendSupport;
use crate::registry::Support::*;
let row = |cpu, metal| BackendSupport {
cpu,
metal,
cuda: Untested,
};
assert!(row(Unsupported, Verified).needs_accelerator());
assert!(row(Unsupported, Untested).needs_accelerator());
assert!(!row(Unsupported, Unsupported).needs_accelerator());
assert!(!row(Verified, Verified).needs_accelerator());
assert!(!row(Pending, Verified).needs_accelerator());
assert!(!BackendSupport::not_applicable().needs_accelerator());
}