use anyhow::Result;
use theory_core::smt_stub::*;
use theory_core::*;
#[test]
fn test_constraint_ir_basic() -> Result<()> {
let mut ir = ConstraintIR::new();
use theory_core::ir::{Domain, Variable, VariableMetadata};
let var = Variable {
name: "x".to_string(),
domain: Domain::Boolean,
metadata: VariableMetadata::default(),
};
let _var_id = ir.add_variable(var);
ir.add_theory_tag(theory_core::ir::TheoryTag::LRA);
assert_eq!(ir.variables.len(), 1);
assert_eq!(ir.theory_tags.len(), 1);
Ok(())
}
#[test]
fn test_smt_backend_stub() -> Result<()> {
let backend = SmtBackend::new(SmtBackendConfig::default())?;
let mut ir = ConstraintIR::new();
use theory_core::ir::{Domain, Variable, VariableMetadata};
let var = Variable {
name: "test_var".to_string(),
domain: Domain::Boolean,
metadata: VariableMetadata::default(),
};
ir.add_variable(var);
let rt = tokio::runtime::Runtime::new().unwrap();
let result = rt.block_on(async { backend.solve(&ir).await })?;
assert!(result.satisfiable);
assert!(result.confidence > 0.5);
assert!(!result.assignment.is_empty());
Ok(())
}
#[test]
fn test_plausibility_checker() -> Result<()> {
let checker = PlausibilityChecker::new(PlausibilityConfig::default());
let mut ir = ConstraintIR::new();
use theory_core::ir::{Domain, Variable, VariableMetadata};
let var = Variable {
name: "x".to_string(),
domain: Domain::Boolean,
metadata: VariableMetadata::default(),
};
ir.add_variable(var);
use std::collections::HashMap;
let mut assignment = HashMap::new();
assignment.insert("v0".to_string(), SolutionValue::Bool(true));
let solution = SolutionResult {
satisfiable: true,
assignment,
confidence: 0.95,
estimated_time_ms: 5.0,
winning_branch_id: None,
winning_strategy: None,
winning_backend: None,
variable_ranges: None,
};
let result = checker.check_plausibility(&ir, &solution)?;
assert!(result.plausible);
assert!(result.confidence > 0.7);
Ok(())
}
#[test]
fn test_routing_strategy() -> Result<()> {
let router = SpeculateVerifyRouter::new();
let mut ir = ConstraintIR::new();
use theory_core::ir::{Domain, TheoryTag, Variable, VariableMetadata};
let var = Variable {
name: "x".to_string(),
domain: Domain::Integer {
min: Some(0),
max: Some(100),
},
metadata: VariableMetadata::default(),
};
ir.add_variable(var);
ir.add_theory_tag(TheoryTag::LRA);
let strategy = router.route(&ir)?;
match strategy {
ReasoningStrategy::Speculate => println!("✓ Router chose speculative strategy"),
ReasoningStrategy::Verify => println!("✓ Router chose verification strategy"),
ReasoningStrategy::Hybrid => println!("✓ Router chose hybrid strategy"),
}
Ok(())
}