fehler127: WTF - autobreak expects this to compile.
[libfirm] / ir / be / test / diffreports.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use XML::Simple;
5 use Data::Dumper;
6
7 my $resfile_name = "result.xml";
8
9 my $old_file  = $ARGV[0]."/".$resfile_name;
10 my $new_file  = $ARGV[1]."/".$resfile_name;
11 my $diff_file = "results_diff.xml";
12
13 $| = 1; # perform flush after each write to STDOUT
14
15 print "reading $old_file ... ";
16 my $start = time;
17 my $res_old = XMLin("$old_file", forcearray => 1);
18 print "done (", time - $start," s)\n";
19
20 print "reading $new_file ... ";
21 $start = time;
22 my $res_new = XMLin("$new_file", forcearray => 1);
23 print "done (", time - $start," s)\n";
24
25 open(DIFF, ">$diff_file") or die "Could not open $diff_file, reason:$!\n";
26
27 print DIFF "<?xml version=\"1.0\"?>\n";
28 print DIFF "<results>\n";
29 print DIFF "    <files>\n";
30 print DIFF "        <OLD>$old_file</OLD>\n";
31 print DIFF "        <NEW>$new_file</NEW>\n";
32 print DIFF "    </files>\n";
33
34 if (! exists($res_old->{"environment"})) {
35         print "environment missing in $old_file!\n";
36 }
37 elsif (! exists($res_new->{"environment"})) {
38         print "environment missing in $new_file!\n";
39 }
40 else {
41         print DIFF "    <environment>\n";
42         print DIFF "        <OLD>\n";
43
44         my %env = %{ @{ $res_old->{"environment"} }[0] };
45
46         foreach (keys(%env)) {
47                 print DIFF "            <$_>", @{ $env{"$_"} }[0], "</$_>\n";
48         }
49         print DIFF "        </OLD>\n";
50         print DIFF "        <NEW>\n";
51
52         %env = %{ @{ $res_new->{"environment"} }[0] };
53
54         foreach (keys(%env)) {
55                 print DIFF "            <$_>", @{ $env{"$_"} }[0], "</$_>\n";
56         }
57         print DIFF "        </NEW>\n";
58         print DIFF "    </environment>\n";
59 }
60
61 my $section_old = $res_old->{"section"};
62 my $section_new = $res_new->{"section"};
63
64 foreach (keys(%{ $section_old })) {
65         if (! exists($section_new->{"$_"})) {
66                 print "Section $_ missing in $new_file!\n";
67                 next;
68         }
69
70         print DIFF "    <section name=\"$_\">\n";
71
72         my $old = $section_old->{"$_"}{"result"};
73         my $new = $section_new->{"$_"}{"result"};
74
75         foreach my $test (keys(%{ $old })) {
76                 my $entry_old = $old->{"$test"};
77                 my $entry_new = $new->{"$test"};
78                 my $has_diff = 0;
79
80                 if (! exists($new->{"$test"})) {
81                         foreach my $k1 (keys(%{ $entry_old })) {
82                                 $entry_new->{"$k1"} = [ 'missing' ];
83                                 $has_diff           = 1;
84                         }
85                 }
86                 else {
87                         foreach my $k (keys(%{ $entry_old })) {
88                                 if (! exists($entry_new->{"$k"})) {
89                                     $entry_new->{"$k"} = [ 'missing' ];
90                                         $has_diff = 1;
91                                 }
92                                 else {
93                                         my @val_old = @{ $entry_old->{"$k"} };
94                                         my @val_new = @{ $entry_new->{"$k"} };
95                                         if ($val_old[0] ne $val_new[0]) {
96                                                 $has_diff = 1;
97                                         }
98                                 }
99                         }
100                 }
101
102                 if ($has_diff == 1) {
103                         print DIFF "        <result name=\"$test\">\n";
104                         print DIFF "            <OLD>\n";
105                         emit_entry($entry_old);
106                         print DIFF "            </OLD>\n";
107                         print DIFF "            <NEW>\n";
108                         emit_entry($entry_new);
109                         print DIFF "            </NEW>\n";
110                         print DIFF "        </result>\n";
111                 }
112         }
113
114         print DIFF "    </section>\n";
115 }
116
117 print DIFF "</results>\n";
118
119 close(DIFF);
120
121 print "processing results_diff.xml ... ";
122 `xsltproc --output results_diff.html makediffhtml.xslt results_diff.xml`;
123 print "results_diff.html created\n";
124
125 sub emit_entry {
126         my $href = shift;
127
128         foreach (keys(%{ $href })) {
129                 my @val = @{ $href->{"$_"} };
130                 print DIFF "                <$_>", $val[0], "</$_>\n";
131         }
132 }