#!/usr/bin/perl -w
use strict;
open VALUES, "values.txt" || die "Couldn't open values : $!\n";
my $test;
my $current_tests = {};
my $num = 1;
while (<VALUES>) {
next if /^\s*$/;
if (/^Series: (.+)$/) {
dump_tests(\$num,$test, $current_tests);
$current_tests = {};
$test = $1;
next;
}
my ($val, $tests) = split /:/, $_;
($val) = split /\s/, $val;
my @tests = split /\s/, $tests;
foreach my $test (@tests) {
push @{$current_tests->{$test}}, $val;
}
}
sub dump_tests {
my ($numr, $test, $current_tests) = @_;
foreach my $key (keys %{$current_tests}) {
my $filename = "$test.$key.ints";
my @tests = @{$current_tests->{$key}};
my $read = "";
my $write = "";
my $modifier = 1;
my $func = '$bin->';
my $efunc;
if ($key =~ s/^u//) {
$efunc .= "ui$key";
} elsif ($key =~ s/^p//) {
$efunc .= "si$key";
} elsif ($key =~ s/^n//) {
$efunc .= "si$key";
$modifier = -1;
} else {
next;
#die "Invalid key : '$key'\n";
}
foreach my $test (@tests) {
my $val = $test*$modifier;
$read .= "is(${func}get_${efunc}(),$val);\n";
$write .= "ok(${func}put_${efunc}($val));\n";
}
my $tfile = sprintf "%.2d%s", $$numr++, $filename;
open TEST, ">$tfile.be.t" || die "Couldn't open $tfile : $!\n";
print TEST <<"EOF";
#!perl -w
use strict;
use Test::More qw(no_plan);
use File::Binary;
my \$bin = File::Binary->new('t/be.$filename');
\$bin->set_endian(\$File::Binary::BIG_ENDIAN);
$read
\$bin->close();
\$bin = File::Binary->new('>t/temp');
\$bin->set_endian(\$File::Binary::BIG_ENDIAN);
$write
\$bin->close();
\$bin = File::Binary->new('t/temp');
\$bin->set_endian(\$File::Binary::BIG_ENDIAN);
$read
\$bin->close();
EOF
close TEST;
open TEST, ">$tfile.le.t" || die "Couldn't open $tfile : $!\n";
print TEST <<"EOF";
#!perl -w
use strict;
use Test::More qw(no_plan);
use File::Binary;
my \$bin = File::Binary->new('t/le.$filename');
\$bin->set_endian(\$File::Binary::LITTLE_ENDIAN);
$read
\$bin->close();
\$bin = File::Binary->new('>t/temp');
\$bin->set_endian(\$File::Binary::LITTLE_ENDIAN);
$write
\$bin->close();
\$bin = File::Binary->new('t/temp');
\$bin->set_endian(\$File::Binary::LITTLE_ENDIAN);
$read
\$bin->close();
EOF
close TEST;
}
}
syntax highlighted by Code2HTML, v. 0.9.1