use gossan_classify::BannerClassifier;
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig {
cases: 10_000,
..ProptestConfig::default()
})]
#[test]
fn classify_never_panics_on_arbitrary_ascii(input in "\\PC*") {
let cls = BannerClassifier::new();
let matches = cls.classify(&input);
for m in matches {
prop_assert!(!m.service.is_empty(), "empty service name");
prop_assert!(m.confidence >= 0.0, "negative confidence: {}", m.confidence);
prop_assert!(m.confidence <= 1.0, "confidence > 1.0: {}", m.confidence);
}
let top = cls.classify_top(&input);
let any = !cls.classify(&input).is_empty();
prop_assert_eq!(top.is_some(), any);
}
}
proptest! {
#![proptest_config(ProptestConfig {
cases: 1_000,
..ProptestConfig::default()
})]
#[test]
fn classify_handles_long_inputs(len in 0usize..16_384) {
let banner: String = std::iter::repeat('A').take(len).collect();
let cls = BannerClassifier::new();
let _ = cls.classify(&banner);
}
}