use super::isolation::spectral_entropy;
#[test]
fn falsify_se_001_range_bound() {
let test_cases: Vec<Vec<f32>> = vec![
vec![1.0, 1.0, 1.0, 1.0], vec![100.0, 0.001, 0.001, 0.001], vec![1.0, 2.0, 3.0, 4.0, 5.0], vec![0.1; 100], vec![1e-6, 1.0, 1e-6], ];
for (i, mags) in test_cases.iter().enumerate() {
let h = spectral_entropy(mags);
assert!(
(0.0..=1.001).contains(&h),
"FALSIFIED SE-001 case {i}: entropy = {h}, expected ∈ [0, 1]"
);
}
}
#[test]
fn falsify_se_002_uniform_max_entropy() {
for &n in &[2_usize, 4, 8, 16, 100] {
let uniform = vec![1.0; n];
let h = spectral_entropy(&uniform);
assert!(
(h - 1.0).abs() < 1e-4,
"FALSIFIED SE-002: uniform({n}) entropy = {h}, expected ≈ 1.0"
);
}
}
#[test]
fn falsify_se_002b_zero_input() {
assert!((spectral_entropy(&[]) - 0.0).abs() < 1e-6, "empty → 0");
assert!(
(spectral_entropy(&[0.0, 0.0, 0.0]) - 0.0).abs() < 1e-6,
"all-zero → 0"
);
}
#[test]
fn falsify_se_003_peaked_lower_than_uniform() {
let n = 8;
let uniform = vec![1.0; n];
let h_uniform = spectral_entropy(&uniform);
let mut peaked = vec![0.01; n];
peaked[0] = 100.0;
let h_peaked = spectral_entropy(&peaked);
assert!(
h_peaked < h_uniform,
"FALSIFIED SE-003: peaked entropy ({h_peaked}) not < uniform entropy ({h_uniform})"
);
}
mod se_proptest_falsify {
use super::*;
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(30))]
#[test]
fn falsify_se_001_prop_range_bound(
seed in 0..500u32,
) {
let n = (seed % 20 + 2) as usize;
let mags: Vec<f32> = (0..n)
.map(|i| ((i as f32 + seed as f32) * 0.37).sin().abs() * 10.0 + 0.01)
.collect();
let h = spectral_entropy(&mags);
prop_assert!(
(0.0..=1.001).contains(&h),
"FALSIFIED SE-001-prop: entropy={} not in [0,1] for n={} seed={}",
h, n, seed
);
}
}
proptest! {
#![proptest_config(ProptestConfig::with_cases(20))]
#[test]
fn falsify_se_003_prop_peaked_lower(
n in 3..=30usize,
) {
let uniform = vec![1.0f32; n];
let h_uniform = spectral_entropy(&uniform);
let mut peaked = vec![0.01f32; n];
peaked[0] = 100.0;
let h_peaked = spectral_entropy(&peaked);
prop_assert!(
h_peaked < h_uniform,
"FALSIFIED SE-003-prop: peaked({}) >= uniform({}) for n={}",
h_peaked, h_uniform, n
);
}
}
}