chiark / gitweb /
Filled in the observations section.
[matchsticks-search.git] / test.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use Getopt::Long;
6
7 my $main = "./main";
8 my $verbose = 0;
9
10 die "usage: test.pl [-v] [-c COMMAND]\n" unless GetOptions(
11     "verbose|v" => \$verbose,
12     "command|c=s" => \$main);
13
14 &runtest(3,2,"1");
15 &runtest(4,2,"2");
16 &runtest(4,3,"1");
17 &runtest(5,2,"1");
18 &runtest(5,3,"1.25");
19 &runtest(5,4,"1.5");
20 &runtest(6,2,"2");
21 &runtest(6,3,"3");
22 &runtest(6,4,"2");
23 &runtest(6,5,"2");
24 &runtest(7,2,"1");
25 &runtest(7,3,"1.25");
26 &runtest(7,4,"1.66667");
27 &runtest(7,5,"1.66667");
28 print "ok\n";
29
30 sub runtest {
31     my ($n, $m, $expected) = @_;
32     &singletest("$main $n $m", $expected);
33     for (my $i = 0; $i < 10; $i++) {
34         &singletest("$main -j4 $n $m", $expected);
35     }
36 }
37
38 sub singletest {
39     my ($cmd, $expected) = @_;
40     print "test: $cmd\n" if $verbose;
41     open my $pipe, "-|", "$cmd 2>/dev/null"
42         or die "open: $!\n";
43     my $firstline = <$pipe>;
44     chomp($firstline);
45     die "$cmd: first line of output not as expected:\n$firstline\n"
46         unless $firstline =~ /^(\d+) into (\d+): min fragment ([\d\.e\+\-]+)/;
47     die "$cmd: min fragment $3, expected $expected\n"
48         unless $3 eq $expected;
49 }