#[test]
fn test_fused_q4_0_q8_0_dot_scalar_multiple_blocks() {
let q4_data = vec![0u8; 36]; let q8_scales = vec![1.0f32; 2];
let q8_quants = vec![1i8; 64];
let result = fused_q4_0_q8_0_dot_scalar(&q4_data, &q8_scales, &q8_quants, 64);
assert!(result.is_finite());
}
#[test]
fn test_fused_q8_0_q8_0_dot_scalar_zero() {
let q8_weight = vec![0u8; 34];
let q8_scales = vec![0.0f32];
let q8_quants = vec![0i8; 32];
let result = fused_q8_0_q8_0_dot_scalar(&q8_weight, &q8_scales, &q8_quants, 32);
assert_eq!(result, 0.0);
}
#[test]
fn test_fused_q8_0_q8_0_dot_scalar_basic() {
let mut q8_weight = vec![0u8; 34];
q8_weight[0] = 0x00;
q8_weight[1] = 0x3C;
for i in 2..34 {
q8_weight[i] = 1; }
let q8_scales = vec![1.0f32];
let q8_quants = vec![1i8; 32];
let result = fused_q8_0_q8_0_dot_scalar(&q8_weight, &q8_scales, &q8_quants, 32);
assert!(result.is_finite());
assert!((result - 32.0).abs() < 1.0);
}
#[test]
fn test_fused_q8_0_q8_0_dot_scalar_negative() {
let mut q8_weight = vec![0u8; 34];
q8_weight[0] = 0x00;
q8_weight[1] = 0x3C;
for i in 2..34 {
q8_weight[i] = 0xFF; }
let q8_scales = vec![1.0f32];
let q8_quants = vec![1i8; 32];
let result = fused_q8_0_q8_0_dot_scalar(&q8_weight, &q8_scales, &q8_quants, 32);
assert!(result.is_finite());
assert!((result - (-32.0)).abs() < 1.0);
}
#[test]
fn test_fused_q8_0_q8_0_dot_scalar_multiple_blocks() {
let q8_weight = vec![0u8; 68]; let q8_scales = vec![1.0f32; 2];
let q8_quants = vec![1i8; 64];
let result = fused_q8_0_q8_0_dot_scalar(&q8_weight, &q8_scales, &q8_quants, 64);
assert!(result.is_finite());
}
#[test]
fn test_q4_0_dot_scalar_partial_block() {
let q4_data = vec![0u8; 36]; let q8_scales = vec![1.0f32; 2];
let q8_quants = vec![1i8; 50];
let result = fused_q4_0_q8_0_dot_scalar(&q4_data, &q8_scales, &q8_quants, 50);
assert!(result.is_finite());
}
#[test]
fn test_q8_0_dot_scalar_partial_block() {
let q8_weight = vec![0u8; 68];
let q8_scales = vec![1.0f32; 2];
let q8_quants = vec![1i8; 50];
let result = fused_q8_0_q8_0_dot_scalar(&q8_weight, &q8_scales, &q8_quants, 50);
assert!(result.is_finite());
}
#[test]
fn test_interleaved_q4k_three_superblocks() {
let data = vec![0u8; 432]; let interleaved = InterleavedQ4K::from_q4k(&data).expect("test value should be present");
assert_eq!(interleaved.num_super_blocks, 3);
assert_eq!(interleaved.num_values(), 768);
}
#[test]
fn test_q8k_into_exact_buffer_sizes() {
let activations = vec![0.5f32; 256];
let mut scales = vec![0.0f32; 1]; let mut quants = vec![0i8; 256];
let result = quantize_activations_q8k_into(&activations, &mut scales, &mut quants);
assert!(result.is_ok());
}
#[test]
fn test_extract_scale_min_all_blocks() {
let scales: [u8; 12] = [
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
];
for i in 0..8 {
let (scale, min) = extract_scale_min(&scales, i);
assert!(scale >= 0.0);
assert!(min >= 0.0);
}
}