The attaxgame.Testing performs certain end-to-end tests as well as
any unit tests you've supplied. There are two types: those that run one
instance of the program, and those that run two instances that play each 
other. 

The Testing.runSingleTests method searches this directory for files
named NAME0.in (the '0.in' part being literal and NAME being
arbitrary).  For each such file, it runs 'java ataxx' with this
directory as the current directory, using the contents of the file as
the standard input, and captures the standard output and error.  It
reports failure if there is any output to the standard error, if the 
program terminates with a non-zero exit code, or if it times out.  Otherwise,
if there is a file NAME0.out, it is compared literally with the program's
output.  If instead there is a file named NAME0.req (that's a lower-case
Q at the end), then it is stripped of everything except those outputs that
the spec. requires ('Red wins.', 'Blue wins.', 'Draw.', and dumps of the 
board between "===" marks) and compared with the program output, similarly
stripped.

The Testing.runDoubleTests method searches for pairs of 
files named NAME1.in and NAME2.in.  It runs two instances of the ataxx program
simultaneously, feeding NAME1.in to the first and NAME2.in to the second. 
There is a pause between starting the first and second program, which gives the
first time to execute a 'host' command.  The output of the two programs is
then compared with NAME1.out, NAME1.req, NAME2.out, and NAME.req as in the 
first case.  

Naturally, for this to be useful, you'll have to be careful to make things
deterministic, using the 'seed' command if necessary.

