On 11.08.2011 8:58, Don wrote:
bearophile wrote:
Contracts don't replace unittests, they complement each other.


They are nice but have little value over plain assert _unless_ we are talking about classes and _inheritance_, which isn't the case here.

It's easy to forget to test the output of a function, the "out" contracts help here. In structs the invariant helps you avoid forgetting to call manually a sanity test function every time you come in and out of a method.

You're conflating a couple of things here. Invariants are tremendously helpful for structs as well as classes.

I stand corrected about invariants, somehow I wasn't considering them a part of contracts.

"out" contracts seem to be almost useless, unless you have a theorem prover. The reason is, that they test nothing apart from the function they are attached to, and it's much better to do that with unittesting.
They have very little in common with 'in' contracts.

I think that EVERY struct and class in Phobos should have an invariant (except for something like Complex, where there are no invalid values).
But I don't think 'out' contracts would add much value at all.


--
Dmitry Olshansky

Reply via email to