diff --git a/src/main.rs b/src/main.rs index 431d12b..94d15b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -63,7 +63,7 @@ enum ProofResult } fn run_vampire(input: &str, arguments: Option) - -> Result + -> Result<(ProofResult, Option), ask_dracula::Error> where I: IntoIterator, S: AsRef { let mut vampire = std::process::Command::new("vampire"); @@ -106,18 +106,24 @@ fn run_vampire(input: &str, arguments: Option) if proof_not_found_regex.is_match(stdout) { - return Ok(ProofResult::ProofNotFound); + return Ok((ProofResult::ProofNotFound, None)); } return Err(ask_dracula::Error::new_run_vampire( format!("Vampire returned unsuccessful exit code ({})\n\n======== stdout ========\n{}\n\n======== stderr ========\n{}", output.status, std::str::from_utf8(&output.stdout).unwrap_or("(not valid UTF-8)").trim(), std::str::from_utf8(&output.stderr).unwrap_or("(not valid UTF-8)").trim()))); } + let proof_time_regex = regex::Regex::new(r"% \(\d+\)Success in time (\d+(?:\.\d+)?) s").unwrap(); + + let proof_time = proof_time_regex.captures(stdout) + .map(|captures| captures.get(1).unwrap().as_str().parse::().ok()) + .unwrap_or(None); + let refutation_regex = regex::Regex::new(r"% \(\d+\)Termination reason: Refutation").unwrap(); if refutation_regex.is_match(stdout) { - return Ok(ProofResult::Refutation); + return Ok((ProofResult::Refutation, proof_time)); } Err(ask_dracula::Error::new_interpret_vampire_output(stdout.to_string(), stderr.to_string())) @@ -155,7 +161,7 @@ fn main() -> Result<(), Box> { let conjecture = find_conjecture(&project, proof_direction); - let vampire_result = match conjecture + let (vampire_result, proof_time) = match conjecture { None => { @@ -183,7 +189,14 @@ fn main() -> Result<(), Box> }, ProofResult::Refutation => { - println!("assertion proven"); + if let Some(proof_time) = proof_time + { + println!("assertion proven in {} seconds", proof_time); + } + else + { + println!("assertion proven"); + } conjecture.kind = ask_dracula::project::StatementKind::Axiom; conjecture.original_text = replace_statement_kind_regex.replace(&conjecture.original_text, "axiom").to_string();