#!/usr/local/bin/perl

$file = "nespole-english";

# "/afs/cs.cmu.edu/project/nnspeech-6/Nespole/Mappers/Generation/English/$file.gra"
open(GRA, "septest/$file.gra") or die $!;

$key = "";
while ($line = <GRA>) {
    $line =~ s/;.*$//;
    $line =~ s/\s*$//;
    $line = "\U$line\E";
    if ($line =~ m/\#\|/) {
	$ignore = 1;
    }
    if ($line =~ m/\|\#/) {
	$ignore = 0;
	next;
    }
    next if $ignore;
    if ($line =~ m/^\s*\(\</) {
	if ($key ne "") {
	    if (defined($grarules{$key})) {
		if (defined($grarules{$key . "-2"})) {
		    $grarules{$key . "-3"} = $entry;
		} else {
		    $grarules{$key . "-2"} = $entry;
		}
	    } else {
		$grarules{$key} = $entry;
	    }
	}
	$line =~ s/\s//g;
	$key = $line;
	$entry = $key;
	$key =~ s/\).*$/\)/;
    }
    else {
	$entry .= $line;
    }

}
close(GRA);

open(GRA, "septest/$file.out") or die $!;
$key = "";
while ($line = <GRA>) {
    $line =~ s/;.*$//;
    $line =~ s/\s*$//;
    $line = "\U$line\E";
    if ($line =~ m/^\s*\(\</) {
	if ($key ne "") {
	    if (defined($outrules{$key})) {
		if (defined($outrules{$key . "-2"})) {
		    $outrules{$key . "-3"} = $entry;
		} else {
		    $outrules{$key . "-2"} = $entry;
		}
	    } else {
		$outrules{$key} = $entry;
	    }
	}
	$line =~ s/\s//g;
	$key = $line;
	$entry = $key;
	$key =~ s/\).*$/\)/;
    }
    else {
	$entry .= $line;
    }
}
close(GRA);


foreach $key (sort keys %grarules) {
    if (!defined($outrules{$key})) {
	print "$key NOT FOUND IN OUTRULES:\n\n";
	#print $grarules{$key};
	next;
    }

    %gracounts = ();
    for ($i = 0; $i < length($grarules{$key}); $i++) {
	$char = substr($grarules{$key}, $i, 1);
	if ($char !~ m/[ \r\n\t]/) {
	    $gracounts{$char}++;
	}
    }

    %outcounts = ();
    for ($i = 0; $i < length($outrules{$key}); $i++) {
	$char = substr($outrules{$key}, $i, 1);
	if ($char !~ m/[ \r\n\t]/) {
	    $outcounts{$char}++;
	}
    }

    foreach $char (sort keys %gracounts) {
	if ($gracounts{$char} != $outcounts{$char}) {
	    print "$key HAS CHAR MISMATCH on '$char'!\n\n";
	}
    }

}
