use strict; use Roman; sub ton1 { my $t = shift; my $s; ($s.=4x$_%1859^7)=~y/IVCXL91-80/XLMCDXVIII/d for $t=~/./g; return $s } sub ton2 { my $t = shift; my $s; ($s.=5x$_*8%29628)=~y/IVCXL426(-:/XLMCDIVX/d for $t=~/./g; return $s } sub pmo1 { my $t = shift; my $s; ($s.="32e$_"%72726)=~y/CLXVI60-9/MDCLXVIX/d for $t=~/./g; return $s } sub pmo2 { my $t = shift; my $s; ($s.="57e$_"%474976)=~y/CLXVI0-9/MDCLXIXV/d for $t=~/./g; return $s } for my $i (1..3999) { my $r = uc roman($i); my $t1 = ton1($i); my $t2 = ton2($i); my $p1 = pmo1($i); my $p2 = pmo2($i); print "$i: $r\n"; $r eq $t1 or die "t1: expected '$r' got '$t1'\n"; $r eq $t2 or die "t2: expected '$r' got '$t2'\n"; $r eq $p1 or die "p1: expected '$r' got '$p1'\n"; $r eq $p2 or die "p2: expected '$r' got '$p2'\n"; } print "all tests successful\n";