Modify the random distributions test to verify to 2 more decimal
[pspp-builds.git] / tests / expressions / randist / compare.pl
1 #! /usr/bin/perl -w
2
3 use strict;
4
5 my ($epsilon) = 1;
6
7 open (EXPECTED, '<', $ARGV[0]) or die "$ARGV[0]: open: $!\n";
8 open (ACTUAL, '<', $ARGV[1]) or die "$ARGV[1]: open: $!\n";
9
10 my ($errors) = 0;
11 LINE: for (;;) {
12     my $a = <EXPECTED>;
13     my $b = <ACTUAL>;
14
15     last if !defined $a && !defined $b;
16     die "$ARGV[0]:$.: unexpected end of file\n" if !defined $a;
17     die "$ARGV[1]:$.: unexpected end of file\n" if !defined $b;
18
19     my (@a) = split (' ', $a);
20     my (@b) = split (' ', $b);
21     die "$ARGV[1]:$.: contains ". scalar (@b) . " fields but should "
22       . "contain " . scalar (@a) . "\n"
23         if $#a != $#b;
24     foreach my $i (0...$#a) {
25         die "$ARGV[1]:$.: unexpected number of decimals\n"
26           if count_decimals ($a[$i]) != count_decimals ($b[$i]);
27
28         my ($an) = to_int ($a[$i]);
29         my ($bn) = to_int ($b[$i]);
30         if ($an ne $bn && ($bn < $an - $epsilon || $bn > $an + $epsilon)) {
31             $errors++;
32             if ($errors > 5) {
33                 print "$ARGV[1]: Additional differences suppressed.\n";
34                 last LINE;
35             }
36             print "$ARGV[1]:$.: Values differ from $ARGV[0]:$.\n";
37             print "Expected:\n", $a;
38             print "Calculated:\n", $b;
39         }
40     }
41 }
42 exit ($errors > 0);
43
44 sub count_decimals {
45     my ($s) = @_;
46     return length (substr ($s, index ($s, '.')));
47 }
48
49 sub to_int {
50     local ($_) = @_;
51     s/\.//;
52     return $_;
53 }