mod support;

pub use support::{ast, config, formatter, lexer, parser};

use std::collections::BTreeMap;

use support::{FixtureRole, FormatOutcome};

#[test]
fn upstream_normalization_inventory_is_explicit_by_role() {
    let mut counts = BTreeMap::new();

    for behavior in support::upstream_fixture_behaviors() {
        if behavior.format_outcome == FormatOutcome::Rewritten {
            *counts.entry(behavior.role).or_insert(0usize) += 1;
        }
    }

    assert_eq!(
        counts.into_iter().collect::<Vec<_>>(),
        vec![
            (FixtureRole::Example, 16),
            (FixtureRole::Case, 242),
            (FixtureRole::AntiCase, 41),
            (FixtureRole::Support, 64),
        ]
    );
}

#[test]
fn upstream_normalization_is_not_limited_to_a_single_corpus_tier() {
    let behaviors = support::upstream_fixture_behaviors();

    assert!(behaviors.iter().any(|behavior| {
        behavior.role == FixtureRole::Example && behavior.format_outcome == FormatOutcome::Rewritten
    }));
    assert!(behaviors.iter().any(|behavior| {
        behavior.role == FixtureRole::Case && behavior.format_outcome == FormatOutcome::Rewritten
    }));
    assert!(behaviors.iter().any(|behavior| {
        behavior.role == FixtureRole::Support && behavior.format_outcome == FormatOutcome::Rewritten
    }));
}
