use super::{DistanceMetric, DISTANCE_METRIC_NAMES};
fn ordinal(metric: DistanceMetric) -> usize {
match metric {
DistanceMetric::Cosine => 0,
DistanceMetric::Euclidean => 1,
DistanceMetric::DotProduct => 2,
DistanceMetric::Hamming => 3,
DistanceMetric::Jaccard => 4,
}
}
#[test]
fn distance_metric_names_is_exhaustive_and_canonical() {
let variants = [
DistanceMetric::Cosine,
DistanceMetric::Euclidean,
DistanceMetric::DotProduct,
DistanceMetric::Hamming,
DistanceMetric::Jaccard,
];
assert_eq!(variants.len(), DISTANCE_METRIC_NAMES.len());
for (i, variant) in variants.into_iter().enumerate() {
assert_eq!(ordinal(variant), i);
assert_eq!(DISTANCE_METRIC_NAMES[i], variant.canonical_name());
}
}