+# Tests in the test file have a syntax similar to mail headers,
+# individual test case are separated by blank lines and they can contain
+# the following fields:
+#
+# Name: name of the case (default: sequence number since start of file)
+# Run: command to run (default: command from the previous test case)
+# This can be an arbitrary shell pipeline, sequences $0 to $9 are
+# replaced by file names of In<N> or Out<N> files (see below).
+# In: lines to pass to the program as standard input
+# Out: lines to expect at the program's standard output
+# In<N>: lines to pass to the program as input file <N>
+# Out<N>: lines to expect from the program in output file <N>
+# Both In<N> and Out<N> can be specified simultaneously if we
+# are testing a program which modifies some of its input files.
+# Exit: expected exit code of the program (default: 0)
+
+use Getopt::Long;
+
+my $verbose = 0;
+my $rundir = ".";
+GetOptions("verbose!" => \$verbose,
+ "rundir=s" => \$rundir)
+ or die "Usage: tester [--verbose] [--rundir=<dir>] <tests>\n";
+