#!/usr/bin/perl -w use IO::File; use strict; $ENV{CLASSPATH} .= ":../../src/main/java"; $ENV{CLASSPATH} .= ":../../lib/cql-java.jar"; if (@ARGV != 2) { print STDERR "Usage: $0 \n"; exit(1); } my $compiler = $ARGV[0]; my $norman = $ARGV[1]; # name of XML normaliser program my($ntests, $ncorrect) = (0, 0); while () { my $sdir = $_; s@sections/@@; next if /^CVS$/; print "testing section $_ - ", read_file("$sdir/name"), "\n"; while (<$sdir/*.cql>) { my $qfile = $_; s@sections/([0-9]+/.*)\.cql@$1@; my $query = read_file($qfile); my $afile = $qfile; $afile =~ s/\.cql$/.xcql/; print " query $_ - $query "; $ntests++; my $correct = read_file("$norman < $afile |"); my $tested = read_file("$compiler < $qfile | $norman |"); if (!$tested) { print "\n *** test compiler exited non-zero\n"; } elsif ($tested eq $correct) { print "OK\n"; $ncorrect++; } else { print "\n *** XCQL output differs from $afile\n"; print "=== tested ===\n$tested"; print "=== end ===\n"; } } } print sprintf("%d of %d passed: %d%%\n", $ncorrect, $ntests, (100 * $ncorrect) / $ntests); sub read_file { my($name) = @_; $name = "<$name" if $name !~ /\|$/; my $fh = new IO::File("$name") or die "can't read '$name': $!"; my $contents = join('', <$fh>); $fh->close(); return $contents; }