It enforces regression testing. It strongly encourages levelization. It provides simple templates to help remind authors of style guidelines. It works well with CVS.
To use this system, first edit the ./generic.* files to match whatever style of naming conventions you like best. Then to create a new class, copy these generic.* files to the library to create the following three files:
foo.h = declaration
foo.cc = definitions
foo.test.cc = examples of how to use Foo and testing of Foo
Now edit them to implement the class Foo. Finally add "foo.o" somewhere in the Makefile levelization section. Now do a "make foo.OK" and the following will be generated:
foo.d = the dependencies of foo.cc
foo.test.d = the dependencies for foo.test.cc
foo.o = object
foo.test.o = object (temp)
foo.test.executable = testing executable (temp)
foo.test.results = output of the sample code (temp)
At this point the system will have compiled the class, and ran the foo.test.cc file to generate the output. It will then try to compare this output to the regression output. (Which currently doesn't exist). So you should look at the output and certify that it did the right thing. Then copy it to foo.test.results_correct. Now when you rerun the "make foo.OK" you will have the following two files added:
foo.test.results_correct = output of the sample code (temp)
foo.OK = signifies passing regression testing
Finally if you run a plan "make" or a "make test" or a "make install" the system will generate *.OK's and then generate a file called:
test = signifies passing ALL regression tests
make test : tries to generate *.OK
make : runs "make test"
make install : copies *.h to ../Include/*. Builds a library and copies it to ../lib/*
make install : runs a make install on each library.
make evil : tricks the system into generating libraries and copying the .h files WITHOUT running any regression testing. This saves link time and run time. So it is very fast, but it undermines the entire reason for building this whole system!
make pure : Runs a make test in each library.
So you think regression testing is really cool--but your on a slow machine. So it takes FOREVER to to the linking. Your sure you haven't actually introduced any errors. You want to see how the new library effects some other code. You are looking for a "fast make" that doesn't actually do all these regression tests. Take the following oath: "I PROMISE to ALWAYS do regression tests as soon as I buy a new CPU." Now you may run "make evil". This can be up to 10 times faster.
After you have been taken over by the dark-side, read a chapter of Lakos so the force will be with you!
test(Detailed instructions: cvs co CVSROOT; cd CVSROOT; edit cvsignore; cvs ci; cd ..;rm -rf CVSROOT)