use crate::gguf::OwnedQuantizedModel;
use rand::rngs::StdRng;
use rand::SeedableRng;
const LOGITS: [f32; 8] = [1.0, 1.2, 1.4, 6.0, 1.3, 1.1, 0.9, 1.5];
const HEAD: u32 = 3;
#[test]
fn topp_small_collapses_to_head() {
for seed in 0..128u64 {
let mut rng = StdRng::seed_from_u64(seed);
let tok = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 1.0, 0, 0.02, &mut rng);
assert_eq!(
tok, HEAD,
"FALSIFY-SAMPLE-TOPP-NOOP-001: top_p=0.02 must keep only the nucleus \
(token {HEAD}); got {tok} at seed {seed}. A tail token here means top_p \
was ignored and the full distribution was sampled."
);
}
}
#[test]
fn topp_small_differs_from_topp_disabled() {
let mut differs = false;
for seed in 0..128u64 {
let mut a_rng = StdRng::seed_from_u64(seed);
let mut b_rng = StdRng::seed_from_u64(seed);
let filtered = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 1.0, 0, 0.02, &mut a_rng);
let unfiltered = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 1.0, 0, 1.0, &mut b_rng);
if filtered != unfiltered {
differs = true;
break;
}
}
assert!(
differs,
"FALSIFY-SAMPLE-TOPP-NOOP-001: top_p=0.02 produced the SAME token as \
top_p=1.0 for all 128 seeds — top_p is a no-op."
);
}
#[test]
fn topp_one_is_bit_exact_noop() {
for seed in 0..128u64 {
let mut a_rng = StdRng::seed_from_u64(seed);
let mut b_rng = StdRng::seed_from_u64(seed);
let one = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 0.8, 0, 1.0, &mut a_rng);
let above = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 0.8, 0, 2.0, &mut b_rng);
assert_eq!(
one, above,
"top_p=1.0 must be a no-op identical to any value >= 1.0 (seed {seed})"
);
}
}
#[test]
fn topp_zero_is_disabled_not_empty() {
for seed in 0..64u64 {
let mut rng = StdRng::seed_from_u64(seed);
let tok = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 1.0, 0, 0.0, &mut rng);
assert!(
(tok as usize) < LOGITS.len(),
"top_p=0.0 must mean disabled, not an empty candidate set (seed {seed})"
);
}
}
#[test]
fn topk_then_topp_compose() {
for seed in 0..64u64 {
let mut rng = StdRng::seed_from_u64(seed);
let tok = OwnedQuantizedModel::sample_topk_seeded(&LOGITS, 1.0, 4, 0.02, &mut rng);
assert_eq!(
tok, HEAD,
"top_k=4 then top_p=0.02 must still collapse to the head (seed {seed})"
);
}
}