From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- dviware/dvi2bitmap/test/t8.pl | 195 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100755 dviware/dvi2bitmap/test/t8.pl (limited to 'dviware/dvi2bitmap/test/t8.pl') diff --git a/dviware/dvi2bitmap/test/t8.pl b/dviware/dvi2bitmap/test/t8.pl new file mode 100755 index 0000000000..cb9e93d4e2 --- /dev/null +++ b/dviware/dvi2bitmap/test/t8.pl @@ -0,0 +1,195 @@ +#! /usr/bin/perl -w +# +# Testing dvi2bitmap specials +# +# Create a TeX file with strut and mark specials in it, use +# --query=bitmaps, and check that the correct stuff is reported. + +sub compare_bitmaps($$\@); + +$texbin='/usr/texbin/tex'; +if ($texbin eq 'NO_TEX') { + print STDERR "No TeX binary available. Can't run t8, so assume success\n"; + exit 0; +} + +$prefix = 'temp-t8'; +$texfile = "$prefix.tex"; +$m = 2; # magnification factor + +open (TEX, ">$texfile") || die "Can't open $texfile for output"; +$newpage = "\n\n\\vfill\\eject\n\n"; + +$nerrors = 0; + +@expected = (); + +print TEX <<'EOD'; +%\hoffset=0pt +%\voffset=0pt +%\leftskip=0pt % default +%\topskip=0pt +%\parindent=0pt +%\parskip=0pt +\nopagenumbers + + +EOD + +print TEX "\\special{dvi2bitmap default unit bp}\n\n"; + +print TEX '\vrule width 20bp height 10bp'; +print TEX $newpage; +push(@expected, [20*$m, 10*$m]); + + +print TEX '\vrule width 20bp height 10bp \special{dvi2bitmap strut 10 4 5 6}'; +print TEX $newpage; +push(@expected, [24*$m, 16*$m]); + +print TEX '\vrule width 10bp height 10bp \special{dvi2bitmap strut 12 0 15 0}'; +print TEX $newpage; +push(@expected, [12*$m, 15*$m]); + +print TEX '\vrule width 20bp height 10bp \special{dvi2bitmap mark}'; +print TEX $newpage; +push(@expected, [20*$m, 10*$m, 20*$m, 10*$m]); + +print TEX "\\bye\n"; + +close(TEX); + +system("$texbin $prefix") == 0 + || die "Command 'tex $prefix' failed"; + +########## test 1 +# +# Basic use + +$cmd = sprintf("../dvi2bitmap --output=%s-%%d --query=bitmaps --resolution=%d --verbose=quiet %s.dvi", + $prefix, 72*$m, $prefix); +$nerrors += compare_bitmaps("Test 1", $cmd, @expected); + + +########## test 2 +# +# Same, but with a --magnification of 2, so that the expected values +# must be doubled + +@texpected = (); +foreach my $ev (@expected) { + my @t = (); + foreach my $tt (@$ev) { + push (@t, $tt*2); + } + push (@texpected, \@t); +} + +$cmd = sprintf("../dvi2bitmap --output=%s-%%d --query=bitmaps --resolution=%d --verbose=quiet --magnification=2 %s.dvi", + $prefix, 72*$m, $prefix); +$nerrors += compare_bitmaps("Test 2", $cmd, @texpected); + +########## test 3 +# +# Same, but with a --magnification of 5, so that the expected values +# must be multiplied by 5. This should show up more straightforward +# rounding errors + +@texpected = (); +foreach my $ev (@expected) { + my @t = (); + foreach my $tt (@$ev) { + push (@t, $tt*5); + } + push (@texpected, \@t); +} + +$cmd = sprintf("../dvi2bitmap --output=%s-%%d --query=bitmaps --resolution=%d --verbose=quiet --magnification=5 %s.dvi", + $prefix, 72*$m, $prefix); +$nerrors += compare_bitmaps("Test 3", $cmd, @texpected); + +########## test 4 +# +# Same, but with a --magnification of 3 and --scaledown of 2. This +# seems to stress roundings. In DviFilePosition::DviFilePosition, the +# initialised positions are offset by one to avoid a failure here (and +# are otherwise unmotivated). [there's a reference to this text there, +# so change both together] + +@texpected = (); +foreach my $ev (@expected) { + my @t = (); + foreach my $tt (@$ev) { + push (@t, $tt*1.5); + } + push (@texpected, \@t); +} + +$cmd = sprintf("../dvi2bitmap --output=%s-%%d --query=bitmaps --resolution=%d --verbose=quiet --magnification=3 --scaledown=2 %s.dvi", + $prefix, 72*$m, $prefix); +$nerrors += compare_bitmaps("Test 4", $cmd, @texpected); + +########## That's all.... + + +exit($nerrors); + + +sub compare_bitmaps ($$\@) { + my $testlabel = shift; + my $cmd = shift; + my $exref = shift; + my $nerr = 0; + + my @exp = @$exref; + + open (DB, "$cmd |") || die "Can't open $cmd in a pipe"; + + my $ntests = 0; + while () { + chomp; + s/^Qbitmaps \S*\s*//; + my @a = split; + + if ($#expected < 0) { + print STDERR "More actual than expected\n"; + $nerr++; + last; + } + my @e = @{$exp[$ntests]}; + $ntests++; + + my $isok = 1; + my $i = 0; + while (1) { + if (! (defined($e[$i]) && defined($a[$i]))) { # one list has ended + $isok = !(defined($e[$i]) || defined($a[$i])); + # false unless both undef + last; + } + if ($e[$i] != $a[$i]) { + $isok = 0; + last; + } + $i++; + } + if (!$isok) { + print STDERR "$testlabel, page $ntests: expected ["; + foreach $i (0..$#e) { + printf STDERR " %.1f", $e[$i]; + } + print STDERR " ], got ["; + foreach $i (0..$#a) { + printf STDERR " %.1f", $a[$i]; + } + print " ]\n"; + $nerr++; + } + } + + close(DB); + + return $nerr; +} + + -- cgit v1.2.3