summaryrefslogtreecommitdiff
path: root/dviware/dvi2bitmap/test/t8.pl
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvi2bitmap/test/t8.pl
Initial commit
Diffstat (limited to 'dviware/dvi2bitmap/test/t8.pl')
-rwxr-xr-xdviware/dvi2bitmap/test/t8.pl195
1 files changed, 195 insertions, 0 deletions
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 (<DB>) {
+ 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;
+}
+
+