Defensive Programming
Assert Invariants
An invariant is a condition the program expects to remain true after an operation.
Assert Invariants
assert_invariants.cpp
#include <iostream>
int main() {
int balance = 20;
int withdrawal = ;
int nextBalance = balance - withdrawal;
bool invariantHolds = balance >= 0 && withdrawal >= 0 && nextBalance >= 0;
std::cout << "balance=" << balance << std::endl;
std::cout << "withdrawal=" << withdrawal << std::endl;
std::cout << "nextBalance=" << nextBalance << std::endl;
std::cout << "invariantHolds=" << invariantHolds << std::endl;
return 0;
}
#include <iostream>
int main() {
int balance = 20;
int withdrawal = ;
int nextBalance = balance - withdrawal;
bool invariantHolds = balance >= 0 && withdrawal >= 0 && nextBalance >= 0;
std::cout << "balance=" << balance << std::endl;
std::cout << "withdrawal=" << withdrawal << std::endl;
std::cout << "nextBalance=" << nextBalance << std::endl;
std::cout << "invariantHolds=" << invariantHolds << std::endl;
return 0;
}
#include <iostream>
int main() {
int balance = 20;
int withdrawal = ;
int nextBalance = balance - withdrawal;
bool invariantHolds = balance >= 0 && withdrawal >= 0 && nextBalance >= 0;
std::cout << "balance=" << balance << std::endl;
std::cout << "withdrawal=" << withdrawal << std::endl;
std::cout << "nextBalance=" << nextBalance << std::endl;
std::cout << "invariantHolds=" << invariantHolds << std::endl;
return 0;
}
invariant
Programs can report an invariant check without intentionally stopping execution.