contracts: Tell whether invariant was violation was pre or post

This commit is contained in:
Mikolaj Wielgus 2023-09-19 18:04:08 +02:00
parent f36f80537f
commit 12e37e0e91
1 changed files with 16 additions and 8 deletions

View File

@ -226,15 +226,19 @@ pub(crate) fn generate(
c.ty == ContractType::Requires || c.ty == ContractType::Invariant c.ty == ContractType::Requires || c.ty == ContractType::Invariant
}) })
.flat_map(|c| { .flat_map(|c| {
let contract_type_name = if c.ty == ContractType::Invariant {
format!("{} (as pre-condition)", c.ty.message_name())
} else {
format!("{}", c.ty.message_name())
};
let desc = if let Some(desc) = c.desc.as_ref() { let desc = if let Some(desc) = c.desc.as_ref() {
format!( format!(
"{} of {} violated: {}", "{} of {} violated: {}",
c.ty.message_name(), contract_type_name, func_name, desc
func_name,
desc
) )
} else { } else {
format!("{} of {} violated", c.ty.message_name(), func_name) format!("{} of {} violated", contract_type_name, func_name)
}; };
c.assertions.iter().zip(c.streams.iter()).map( c.assertions.iter().zip(c.streams.iter()).map(
@ -264,15 +268,19 @@ pub(crate) fn generate(
c.ty == ContractType::Ensures || c.ty == ContractType::Invariant c.ty == ContractType::Ensures || c.ty == ContractType::Invariant
}) })
.flat_map(|c| { .flat_map(|c| {
let contract_type_name = if c.ty == ContractType::Invariant {
format!("{} (as post-condition)", c.ty.message_name())
} else {
format!("{}", c.ty.message_name())
};
let desc = if let Some(desc) = c.desc.as_ref() { let desc = if let Some(desc) = c.desc.as_ref() {
format!( format!(
"{} of {} violated: {}", "{} of {} violated: {}",
c.ty.message_name(), contract_type_name, func_name, desc
func_name,
desc
) )
} else { } else {
format!("{} of {} violated", c.ty.message_name(), func_name) format!("{} of {} violated", contract_type_name, func_name)
}; };
c.assertions.iter().zip(c.streams.iter()).map( c.assertions.iter().zip(c.streams.iter()).map(