use super::*;
use crate::schema::types::IntakeStatus;
use crate::schema::{parse_contract_str, validate_contract};
fn crux_contract(competitor: &str, demand_score: &str, intake_status: &str) -> String {
format!(
r#"
metadata:
version: "1.0.0"
description: "CRUX intake domain test"
kind: registry
registry: true
references:
- "contracts/crux-competitive-research-ux-v1.yaml"
competitor: {competitor}
demand_score: {demand_score}
intake_status: {intake_status}
equations: {{}}
proof_obligations: []
falsification_tests: []
"#
)
}
fn crux_errors(yaml: &str) -> Vec<Violation> {
let contract = parse_contract_str(yaml).expect("contract parses");
validate_contract(&contract)
.into_iter()
.filter(|v| v.severity == Severity::Error && v.rule.starts_with("CRUX-"))
.collect()
}
#[test]
fn the_2555_reproducer_is_rejected() {
let yaml = crux_contract("THIS-COMPETITOR-DOES-NOT-EXIST", "99999", "banana");
let err = parse_contract_str(&yaml).expect_err("nonsense must not parse");
let msg = err.to_string();
assert!(
msg.contains("intake_status") && msg.contains("banana"),
"parse error must name the offending field and value, got: {msg}"
);
let yaml = crux_contract("THIS-COMPETITOR-DOES-NOT-EXIST", "99999", "missing");
let rules: Vec<_> = crux_errors(&yaml).iter().map(|v| v.rule.clone()).collect();
assert!(rules.contains(&"CRUX-001".to_string()), "got {rules:?}");
assert!(rules.contains(&"CRUX-002".to_string()), "got {rules:?}");
}
#[test]
fn invented_intake_status_fails_to_parse() {
for bad in ["banana", "implemented", "done", "SUPPORTED", ""] {
let yaml = crux_contract("ollama", "3", &format!("\"{bad}\""));
let err = parse_contract_str(&yaml)
.err()
.unwrap_or_else(|| panic!("intake_status {bad:?} must not parse"));
assert!(
err.to_string().contains("intake_status"),
"parse error for {bad:?} must name intake_status, got: {err}"
);
}
}
#[test]
fn the_four_intake_statuses_parse_and_round_trip() {
let expected = [
("missing", IntakeStatus::Missing),
("partial", IntakeStatus::Partial),
("supported", IntakeStatus::Supported),
("unclear", IntakeStatus::Unclear),
];
for (word, variant) in expected {
let yaml = crux_contract("ollama", "3", word);
let contract = parse_contract_str(&yaml)
.unwrap_or_else(|e| panic!("intake_status {word:?} must parse: {e}"));
assert_eq!(contract.metadata.intake_status, Some(variant));
assert_eq!(variant.to_string(), word);
assert!(crux_errors(&yaml).is_empty());
}
}
#[test]
fn absent_crux_fields_produce_no_violations() {
let yaml = r#"
metadata:
version: "1.0.0"
description: "No crux fields"
kind: registry
registry: true
references:
- "Paper (2024)"
equations: {}
proof_obligations: []
falsification_tests: []
"#;
let contract = parse_contract_str(yaml).expect("parses");
assert_eq!(contract.metadata.intake_status, None);
assert_eq!(contract.metadata.demand_score, None);
assert_eq!(contract.metadata.competitor, None);
assert!(crux_errors(yaml).is_empty());
}
#[test]
fn out_of_range_demand_score_is_an_error() {
for bad in ["99999", "0", "-1", "6", "1000000000000"] {
let yaml = crux_contract("ollama", bad, "missing");
let errors = crux_errors(&yaml);
assert!(
errors.iter().any(|v| v.rule == "CRUX-001"),
"demand_score {bad} must raise CRUX-001, got {errors:?}"
);
assert!(
errors.iter().any(|v| v.message.contains(bad)),
"CRUX-001 message must quote the offending value {bad}, got {errors:?}"
);
}
}
#[test]
fn demand_score_bounds_are_inclusive() {
for good in ["1", "2", "3", "4", "5"] {
let yaml = crux_contract("ollama", good, "missing");
assert!(
crux_errors(&yaml).is_empty(),
"demand_score {good} is inside 1..=5 and must be accepted"
);
}
}
#[test]
fn unknown_competitor_is_an_error() {
for bad in [
"THIS-COMPETITOR-DOES-NOT-EXIST",
"HuggingFace",
"llama.cpp",
"openai",
"''",
] {
let yaml = crux_contract(&format!("'{}'", bad.trim_matches('\'')), "3", "missing");
let errors = crux_errors(&yaml);
assert!(
errors.iter().any(|v| v.rule == "CRUX-002"),
"competitor {bad:?} must raise CRUX-002, got {errors:?}"
);
}
}
#[test]
fn every_registered_competitor_is_accepted() {
for competitor in CRUX_COMPETITORS {
let yaml = crux_contract(&format!("\"{competitor}\""), "3", "missing");
assert!(
crux_errors(&yaml).is_empty(),
"registered competitor {competitor:?} must validate"
);
}
}
#[test]
fn competitor_registry_covers_the_corpus_vocabulary() {
for required in [
"huggingface",
"pytorch",
"llama_cpp",
"vllm",
"ecosystem",
"ollama",
"openclaw",
"hf-kernels-community",
"apr-qa-playbook",
"openclip",
"none",
] {
assert!(
CRUX_COMPETITORS.contains(&required),
"{required} is used by contracts/ and must stay in CRUX_COMPETITORS"
);
}
}
#[test]
fn beat_incumbents_cannot_name_the_crux_corpus() {
let beat_accepts = |c: &str| BEAT_INCUMBENTS.iter().any(|p| c.to_lowercase().contains(p));
assert!(!beat_accepts("huggingface"));
assert!(!beat_accepts("vllm"));
assert!(!beat_accepts("llama_cpp"));
assert!(beat_accepts("llama.cpp"));
for c in [
"ecosystem",
"openclaw",
"hf-kernels-community",
"apr-qa-playbook",
"openclip",
"none",
] {
assert!(!beat_accepts(c), "BEAT_INCUMBENTS unexpectedly accepts {c}");
}
assert!(beat_accepts("pytorch") && beat_accepts("ollama"));
assert!(!CRUX_COMPETITORS.contains(&"scikit-learn"));
assert!(!CRUX_COMPETITORS.contains(&"unsloth"));
}
#[test]
fn real_crux_contract_still_validates() {
let yaml = include_str!("../../../../contracts/crux-I-10-v1.yaml");
let contract = parse_contract_str(yaml).expect("crux-I-10 parses");
assert_eq!(contract.metadata.competitor.as_deref(), Some("ecosystem"));
assert_eq!(contract.metadata.demand_score, Some(4));
assert_eq!(contract.metadata.intake_status, Some(IntakeStatus::Partial));
assert!(crux_errors(yaml).is_empty());
}
#[test]
fn apr_lint_producers_carries_a_vocabulary_intake_status() {
let yaml = include_str!("../../../../contracts/apr-lint-producers-v1.yaml");
let contract = parse_contract_str(yaml).expect("apr-lint-producers parses");
assert_eq!(
contract.metadata.intake_status,
Some(IntakeStatus::Supported)
);
assert!(crux_errors(yaml).is_empty());
}
fn registry_contract(row: &str) -> String {
format!(
r#"
metadata:
version: "1.0.0"
description: "CRUX registry domain test"
kind: registry
registry: true
references:
- "contracts/crux-competitive-research-ux-v1.yaml"
equations: {{}}
proof_obligations: []
falsification_tests: []
stories:
{row}
"#
)
}
#[test]
fn the_real_crux_registry_rows_are_all_in_domain() {
let yaml = include_str!("../../../../contracts/crux-competitive-research-ux-v1.yaml");
let contract = parse_contract_str(yaml).expect("crux registry parses");
assert!(
contract.stories.len() >= 250,
"parsed only {} registry story rows — the `stories:` field stopped \
deserializing, which would make every registry check below vacuous",
contract.stories.len()
);
for st in &contract.stories {
assert!(st.demand_score.is_some(), "{} has no demand_score", st.id);
assert!(st.competitor.is_some(), "{} has no competitor", st.id);
assert!(st.status.is_some(), "{} has no status", st.id);
}
assert!(crux_errors(yaml).is_empty());
}
#[test]
fn registry_story_out_of_range_demand_score_is_an_error() {
for bad in ["99999", "0", "-1", "6", "1000000000000"] {
let yaml = registry_contract(&format!(
" - {{ id: CRUX-Z-01, competitor: ollama, demand_score: {bad}, status: missing }}"
));
let errors = crux_errors(&yaml);
assert!(
errors.iter().any(|e| e.rule == "CRUX-001"
&& e.location.as_deref() == Some("stories[CRUX-Z-01].demand_score")),
"registry demand_score {bad} must raise a located CRUX-001, got {errors:?}"
);
}
}
#[test]
fn registry_story_demand_score_bounds_are_inclusive() {
for ok in ["1", "2", "3", "4", "5"] {
let yaml = registry_contract(&format!(
" - {{ id: CRUX-Z-01, competitor: ollama, demand_score: {ok}, status: missing }}"
));
assert!(
crux_errors(&yaml).is_empty(),
"registry demand_score {ok} is in range and must raise nothing"
);
}
}
#[test]
fn registry_story_unknown_competitor_is_an_error() {
let yaml = registry_contract(
" - { id: CRUX-Z-01, competitor: NOT-A-COMPETITOR, demand_score: 3, status: missing }",
);
let errors = crux_errors(&yaml);
assert!(
errors
.iter()
.any(|e| e.rule == "CRUX-002"
&& e.location.as_deref() == Some("stories[CRUX-Z-01].competitor")),
"unregistered registry competitor must raise a located CRUX-002, got {errors:?}"
);
}
#[test]
fn registry_story_omitting_a_ranking_field_is_an_error() {
let cases = [
("demand_score", " - { id: CRUX-Z-01, competitor: ollama, status: missing }", "CRUX-001"),
("competitor", " - { id: CRUX-Z-01, demand_score: 3, status: missing }", "CRUX-002"),
];
for (field, row, rule) in cases {
let errors = crux_errors(®istry_contract(row));
assert!(
errors.iter().any(|e| e.rule == rule),
"a registry row with no {field} must raise {rule}, got {errors:?}"
);
}
}
#[test]
fn registry_story_invented_status_fails_to_parse() {
for bad in ["implemented", "banana", "SUPPORTED", "done", "in-progress"] {
let yaml = registry_contract(&format!(
" - {{ id: CRUX-Z-01, competitor: ollama, demand_score: 3, status: {bad} }}"
));
let err = parse_contract_str(&yaml)
.err()
.unwrap_or_else(|| panic!("registry status {bad:?} must not parse"));
let msg = err.to_string();
assert!(
msg.contains("status") && msg.contains(bad),
"parse error must name the field and the value, got: {msg}"
);
}
}
#[test]
fn padded_competitor_is_normalised_on_parse() {
let yaml = crux_contract("\" ecosystem \"", "3", "partial");
let contract = parse_contract_str(&yaml).expect("contract parses");
assert_eq!(
contract.metadata.competitor.as_deref(),
Some("ecosystem"),
"metadata.competitor must be STORED trimmed, not merely compared trimmed"
);
assert!(crux_errors(&yaml).is_empty());
let reg = registry_contract(
" - { id: CRUX-Z-01, competitor: \" ollama \", demand_score: 3, status: missing }",
);
let contract = parse_contract_str(®).expect("registry parses");
assert_eq!(
contract.stories[0].competitor.as_deref(),
Some("ollama"),
"stories[].competitor must be STORED trimmed too"
);
assert!(crux_errors(®).is_empty());
}
#[test]
fn whitespace_only_competitor_is_present_and_rejected() {
let yaml = crux_contract("\" \"", "3", "partial");
let contract = parse_contract_str(&yaml).expect("contract parses");
assert_eq!(
contract.metadata.competitor.as_deref(),
Some(""),
"a blank competitor must stay PRESENT so the domain check can report it"
);
assert!(
crux_errors(&yaml).iter().any(|v| v.rule == "CRUX-002"),
"a blank competitor must raise CRUX-002, not slip through as absent"
);
}