Go to the first, previous, next, last section, table of contents.

Support for representation invariants

Most GNU C++ library classes possess a method named OK(), that is useful in helping to verify correct performance of class operations.

The OK() operations checks the "representation invariant" of a class object. This is a test to check whether the object is in a valid state. In effect, it is a (sometimes partial) verification of the library's promise that (1) class operations always leave objects in valid states, and (2) the class protects itself so that client functions cannot corrupt this state.

While no simple validation technique can assure that all operations perform correctly, calls to OK() can at least verify that operations do not corrupt representations. For example for String a, b, c; ... a = b + c;, a call to a.OK(); will guarantee that a is a valid String, but does not guarantee that it contains the concatenation of b + c. However, given that a is known to be valid, it is possible to further verify its properties, for example via a.after(b) == c && a.before(c) == b. In other words, OK() generally checks only those internal representation properties that are otherwise inaccessible to users of the class. Other class operations are often useful for further validation.

Failed calls to OK() call a class's error method if one exists, else directly call abort. Failure indicates an implementation error that should be reported.

With only rare exceptions, the internal support functions for a class never themselves call OK() (although many of the test files in the distribution call OK() extensively).

Verification of representational invariants can sometimes be very time consuming for complicated data structures.

Go to the first, previous, next, last section, table of contents.