#![cfg(feature = "experimental")]
use ordvec::bucket_code::BucketCode;
use ordvec::Contingency;
#[test]
fn from_vector_codes_feed_contingency_self_pair_full_diagonal() {
let dim = 1024usize;
let bits = 2u8;
let nb = 1usize << bits;
let v: Vec<f32> = (0..dim).map(|i| (i as f32 * 7.0).sin()).collect();
let code = BucketCode::from_vector(dim, bits, &v).unwrap();
let codes = code.codes();
assert!(codes.iter().all(|&c| (c as usize) < nb));
assert_eq!(codes.len(), dim);
let cont = Contingency::new(codes, codes, nb)
.expect("from_vector codes must be a valid contingency input");
assert_eq!(
cont.diagonal_agreement() as usize,
dim,
"self-pair must agree on every coordinate"
);
}
#[test]
fn from_vector_codes_are_in_range_for_all_supported_bits() {
let dim = 256usize;
let v: Vec<f32> = (0..dim).map(|i| ((i * 31 + 7) % 97) as f32).collect();
for bits in [1u8, 2, 4] {
let nb = 1usize << bits;
let code = BucketCode::from_vector(dim, bits, &v).unwrap();
let mut rev: Vec<u8> = code.codes().to_vec();
rev.reverse();
let cont = Contingency::new(code.codes(), &rev, nb)
.expect("from_vector codes must be a valid contingency input");
assert!((cont.diagonal_agreement() as usize) <= dim);
}
}