parlov-analysis 0.7.0

Analysis engine trait and signal detection for parlov.
Documentation
//! Unit tests for existence oracle classifier — one per pattern arm.
//!
//! Tests verify verdict, severity, label, leaks, `rfc_basis`, and confidence fields.
//! Verdicts derive from confidence thresholds: >= 80 Confirmed, 60-79 Likely, < 60 `NotPresent`.

use super::classify;
use http::StatusCode;
use parlov_core::{OracleVerdict, Severity};

use crate::signals::tests::status_code_diff_technique;

fn assert_pattern(
    baseline: u16,
    probe: u16,
    verdict: OracleVerdict,
    severity: Option<Severity>,
    label: Option<&str>,
    has_leaks: bool,
    rfc_basis: Option<&str>,
) {
    let b = StatusCode::from_u16(baseline).expect("valid status");
    let p = StatusCode::from_u16(probe).expect("valid status");
    let technique = status_code_diff_technique();
    let r = classify(b, p, vec![], &technique);
    assert_eq!(r.verdict, verdict, "{baseline}/{probe} verdict");
    assert_eq!(r.severity, severity, "{baseline}/{probe} severity");
    assert_eq!(r.label.as_deref(), label, "{baseline}/{probe} label");
    if has_leaks {
        assert!(r.leaks.is_some(), "{baseline}/{probe} expected leaks");
    } else {
        assert!(r.leaks.is_none(), "{baseline}/{probe} expected no leaks");
    }
    assert_eq!(
        r.rfc_basis.as_deref(),
        rfc_basis,
        "{baseline}/{probe} rfc_basis"
    );
}

#[path = "classifier_tests/lower_moderate.rs"]
mod lower_moderate;
#[path = "classifier_tests/strong.rs"]
mod strong;
#[path = "classifier_tests/upper_moderate.rs"]
mod upper_moderate;
#[path = "classifier_tests/weak.rs"]
mod weak;