% The e-TRIP manual: How to validate e-TeX - last modified 05 Nov 1996 % % some e-TeX numbers % \def\extracs{34} % additional multiletter control sequences \def\extrasv{7} % additional save stack positions % \font\eighttt= cmtt8 \font\eightrm= cmr8 \font\rtitlefont= cmr7 scaled\magstep5 \font\ititlefont= cmmi7 scaled\magstep5 \def\titlefont{\rtitlefont \textfont1=\ititlefont} \def\eTeX{$\varepsilon$-\TeX} \def\NTS{NTS} \let\mc=\eightrm \rm \let\mainfont=\tenrm \def\.#1{\hbox{\tt#1}} \def\\#1{\hbox{\it#1\/\hskip.05em}} % italic type for identifiers \parskip 2pt plus 1pt \baselineskip 12pt plus .25pt \def\verbatim#1{\begingroup \frenchspacing \def\do##1{\catcode`##1=12 } \dospecials \parskip 0pt \parindent 0pt \catcode`\ =\active \catcode`\^^M=\active \tt \def\par{\ \endgraf} \obeylines \obeyspaces \input #1 \endgroup} % a blank line will be typeset at the end of the file; % if you're unlucky it will appear on a page by itself! {\obeyspaces\global\let =\ } \def\verblines#1 {$$\frenchspacing \global\count255=-#1 \abovedisplayskip=0pt \belowdisplayskip=\abovedisplayskip \def\do##1{\catcode`##1=12 }\dospecials \def\par{\cr\noalign{\global\advance\count255by1 }% \ifnum\count255<0 \else \egroup $$\fi}% \obeylines \obeyspaces \halign\bgroup\indent\tt##\hfil\cr} \output{\shipout\box255\global\advance\pageno by 1} % for the title page only \null \vfill \centerline{\titlefont A torture test for \eTeX} \vskip 6pt \centerline{({\sl Version 1, October 1996\/})} \vskip 18pt \centerline{by The \NTS\ Team} \vskip 6pt \centerline{Peter Breitenlohner, Max-Planck-Institut f\"ur Physik, M\"unchen} \vskip 6pt \centerline{Bernd Raichle, Institut f\"ur Informatik, Universit\"at Stuttgart} \vfill \centerline{\vbox{\hsize 4in \noindent Programs that claim to be implementations of \eTeX\ are supposed to be able to process the test routines described in this report, producing the outputs described in this report.}} \vskip 24pt {\baselineskip 9pt \eightrm\noindent The preparation of this report was supported in part by DANTE, Deutschsprachige Anwendervereinigung \TeX\ e.V.\hfil\break `\TeX' is a trademark of the American Mathematical Society. }\pageno=0\eject \output{\shipout\vbox{ % for subsequent pages \baselineskip0pt\lineskip0pt \hbox to\hsize{\strut \ifodd\pageno \hfil\eightrm\firstmark\hfil \mainfont\the\pageno \else\mainfont\the\pageno\hfil \eightrm\firstmark\hfil\fi} \vskip 10pt \box255} \global\advance\pageno by 1} \let\runninghead=\mark \outer\def\section#1.{\noindent{\bf#1.}\quad \runninghead{\uppercase{#1} }\ignorespaces} \section Introduction. The program \TeX82 by D.E.~Knuth is in the public domain, and its algorithms are published; he has done this since he does not want to discourage its use by placing proprietary restrictions on the software. However, he doesn't want faulty imitations to masquerade as \TeX\ processors, since users want \TeX\ to produce identical results on different machines. He has copyrighted the programs so that he has some chance to forbid unauthorized copies; he explicitly authorizes copying of correct \TeX\ implementations, and not of incorrect ones! In order to determine, what is a correct implementation of \TeX, he has devised a test suite for \TeX, the \.{TRIP} test [1]. The program \eTeX\ by `The \NTS\ Team' extends the capabilities of \TeX\ by adding a relatively small amount (less than 10 per cent) of code; it is in the public domain, and its algorithms (beyond those of \TeX) are published. This report has been inspired by and is based on the \.{TRIP} manual. It describes the \.{e-TRIP} test, a test suite that allows one to determine whether what one has is a correct implementation of \eTeX. If somebody claims to have a correct implementation of \eTeX, we will not believe it until we see that the \.{e-TRIP} test is performed properly. We propose, in fact, that a program must meet two criteria before it can justifiably be called \eTeX: (1)~The person who wrote it must be happy with the way it works at his or her installation; and (2)~the program must produce the correct results from the \.{e-TRIP} test. Hence we are planning to do whatever we can to suppress any systems that call themselves \eTeX\ without meeting conditions (1) and~(2). We have copyrighted the programs so that we have some chance to forbid unauthorized copies; we explicitly authorize copying of correct \eTeX\ implementations, and not of incorrect ones! The process of generating an \eTeX\ implementation for a particular system [2] is based on that of generating a \TeX\ implementation for the same system. Moreover, when \eTeX\ is used in compatibility mode, it is supposed to be 100 per cent compatible with \TeX. Thus a correct \eTeX\ implementation, when running in compatibility mode, must pass the \.{TRIP} test. In fact, the first part of the \.{e-TRIP} test for a particular implementation of \eTeX\ consists in performing the standard \.{TRIP} test (a)~for \eTeX\ in compatibility mode and (b)~for \eTeX\ in extended mode. The deviations in the test output from step~(a) should, of course, be limited to those explicitly allowed by Knuth and described in Appendix~A, item~5 of the \.{TRIP} manual. Any additional deviations in the test output from step~(b) must be accounted for by \eTeX's additional algorithms and are described in detail in this report. Once an \eTeX\ implementation has passed these preliminary tests, it should be subjected to the second part of the \.{e-TRIP} test. There the extended features and algorithms of \eTeX\ are tested under normal circumstances as well as in situations a normal user would never dream of (in the spirit of the \.{TRIP} test). The remainder of this report consists of appendices, whose contents ought to be described briefly here: Appendix A explains in detail how to carry out the first part of the test of \eTeX, given copies of the files described in the \.{TRIP} manual. Appendix B explains how to carry out the \eTeX\ specific test, given copies of the files described in the other appendices. Appendix C is \.{eTRIP.TEX}, a fiendish test file for \eTeX. Appendix D is \.{eTRIP.PL}, the property-list description of a special font called \.{etrip}. Appendix E is \.{eTRIPIN.LOG}, a correct transcript file \.{eTRIP.LOG} that results if \.{e-TRIPTEX} is applied to \.{eTRIP.TEX}. This run of \.{e-TRIPTEX} also creates a binary format file called \.{eTRIP.FMT} or similar.) Appendix F is a correct transcript file \.{eTRIP.LOG} that results if \.{e-TRIPTEX} or any other version of \eTeX\ is applied to \.{eTRIP.TEX} with format \.{eTRIP.FMT}. Appendix G is \.{eTRIP.FOT}, an abbreviated version of Appendix F that appears on the user's terminal during the run that produces \.{eTRIP.LOG}. \vskip 24pt plus 24pt \section References. \item {[1]} {\sl A torture test for \TeX\/}, by Donald E.~Knuth, Stanford Computer Science Report~1027. \item {[2]} {\sl How to generate \eTeX\/}, by The \NTS\ Team (Peter Breitenlohner and Phil Taylor). \item {[3]} {\sl The \.{WEB} system of structured documentation\/}, by Donald E.~Knuth, Stanford Computer Science Report~980. \item {[4]} {\sl \TeX ware\/}, by Donald E.~Knuth and David R.~Fuchs, Stanford Computer Science Report~1097. \vfill\eject \section Appendix A: How to test \eTeX\ (part 1). \item{0.} Let's assume that you have copies of the files \.{TRIP.TEX}, \.{TRIP.PL}, \.{TRIPIN.LOG}, \.{TRIP.LOG}, \.{TRIP.TYP}, and \.{TRIP.FOT} as described in Appendices~B, C, D, E, F, and~G of the \.{TRIP} manual [1] (in a safe place so that these ``master'' files will not be clobbered). Furthermore, let's suppose that you have a working \.{WEB} system [3], and that you have working programs \.{PLtoTF} and \.{DVItype}, as described in the \TeX ware report [4]. Finally let's assume that you are able to generate \eTeX\ as described in [2]. \item{1.} Use \.{PLtoTF} to convert \.{TRIP.PL} into \.{TRIP.TFM}; install \.{TRIP.TFM} in the standard file area for \TeX\ font metric files (or set a suitable environment variable or similar such that these files will be found by the program). \item{2.} Generate \.{e-TRIPTEX}, a special version of \.{e-INITEX}. The parameters for \.{e-TRIPTEX} should agree with those for \.{TRIPTEX} (as described in [1]), except that you should set \\{pool\_size} to a value $\ge32000$ and \\{max\_strings} to a value $\ge3200$. \item{3.} Perform the \.{TRIP} test as described in Appendix~A, items~3--7 of [1], with \.{e-TRIPTEX} as prepared in step~2. The program will run in compatibility mode and should therefore be fully compatible with \.{TRIPTEX} as described in [1]; apart from the allowed differences listed in item~5, the test output should deviate from the master files in the following two \eTeX-specific points (and only in these): \itemitem{a)} The name and version by which the program announces itself will be different; the extension of the format file produced during the first \.{e-TRIPTEX} run may be different. \itemitem{b)} The message `\.{entering compatibility mode}' will appear on the terminal and in the \.{TRIP.LOG} files. \item{4.} Perform steps 3--7 of the \.{TRIP} test once again with \.{e-TRIPTEX}. During the first run type `\.{*\char`\\input trip}' instead of `\.{\char`\\input trip}'. As a consequence \.{e-TRIPTEX} will run in extended mode and the test output should differ from that of step~3 above in the following respects (and only in these): \itemitem{a)} The date and\slash or time will naturally be different. \itemitem{b)} The input `\.{*\char`\\input trip}' instead of `\.{\char`\\input trip}' is recorded in the first \.{TRIP.LOG} file; the word `\.{compatibility}' is replaced by `\.{extended}'. \itemitem{c)} If the date has changed, the number of string characters dumped by the first \.{e-TRIPTEX} run may vary by $\pm2$. \itemitem{d)} Both \.{e-TRIPTEX} runs report \extracs~additional multiletter control sequences (in the \.{TRIP.LOG} files). \itemitem{e)} The second \.{e-TRIPTEX} run reports different memory usage statistics during the output of pages; there will be the three (non consecutive) lines\verblines 3 Memory usage before: 151&313; after: 102&278; still untouched: 1613 Memory usage before: 851&436; after: 290&417; still untouched: 175 Memory usage before: 330&428; after: 292&415; still untouched: 175 instead of\verblines 3 Memory usage before: 159&313; after: 102&278; still untouched: 1613 Memory usage before: 895&436; after: 290&417; still untouched: 175 Memory usage before: 334&428; after: 292&415; still untouched: 175 The first and third of these appear on the terminal and in the \.{TRIP.LOG} file, the second one in \.{TRIP.LOG} only. Next the second run reports the unfinished group(s) when the program terminates; there are three additional lines (the first of them blank) on the terminal and in the \.{TRIP.LOG} file\verblines 3 ### 1: semi simple group entered at line 429 (begingroup) ### 0: bottom level The second \.{TRIP.LOG} contains six additional lines\verblines 1 {restoring \predisplaydirection=0} and ten lines displaying an \.{\char`\\hbox} contain the additional text `\.{, display}'. Finally the second \.{TRIP.LOG} reports the use of \extrasv~additional save (\.{s}) stack positions. \vfill\eject \section Appendix B: How to test \eTeX\ (part 2). \item{5.} Assume that you have copies of the ``master'' files \.{eTRIP.TEX}, \.{eTRIP.PL}, \.{eTRIPIN.LOG}, \.{eTRIP.LOG}, and \.{eTRIP.FOT}, as in Appendices C, D, E, F, and~G (again in a safe place). \item{6.} Use \.{PLtoTF} to convert \.{eTRIP.PL} into \.{eTRIP.TFM}; install \.{eTRIP.TFM} in the standard file area for \TeX\ font metric files (or set a suitable environment variable or similar). \item{7.} Run \.{e-TRIPTEX}; in response to the `\.{**}' prompt, type `\.{*etrip}'. You should get an output file \.{eTRIP.LOG} that matches the file \.{eTRIPIN.LOG} (Appendix~E). Contrary to the analogous step in the \.{TRIP} test (steps~3 and~4 above) there should be no error messages; lines in the output saying ``Emergency stop'' would indicate that you have performed this test with a standard \TeX\ or with \eTeX\ in compatibility mode. \item{8.} Run \.{e-TRIPTEX} again; this time type `\.{\&etrip{\char'40}etrip}'. You should get an output \.{eTRIP.LOG}. Furthermore, your terminal should receive output that matches \.{eTRIP.FOT} (Appendix~G). Once again, the terminal will be getting no output during the middle part of this test. \item{9.} Compare the \.{eTRIP.LOG} file from step 8 with the ``master'' \.{eTRIP.LOG} file of step~5. There should be no lines saying ``Emergency stop'' (see above) or ``Bug in your e-TeX implementation''; there should be perfect agreement between these files except in the following respects: \itemitem{a)} The dates and possibly the file names will naturally be different. \itemitem{b)} Glue settings in the displays of \TeX\ boxes are subject to system-dependent rounding, so slight deviations are permissible. However, such deviations apply only to the `\.{glue set}' values that appear at the end of an \.{\char'134hbox} or \.{\char'134vbox} line; all other numbers should agree exactly, since they are computed with integer arithmetic in a prescribed system-independent manner. \itemitem{c)} The amount of space in kerns that are marked ``for accent'' are, similarly, subject to system-dependent rounding. \itemitem{d)} If you had different values for \\{stack\_size}, \\{buf\_size}, etc., the corresponding capacity values will be different when they are printed out at the end. \itemitem{e)} Help messages may be different; indeed, the author of \TeX\ encourages non-English help messages in versions of \TeX\ for people who don't understand English as well as some other language. Similarly, \eTeX\ could well be used with non-English help messages. \itemitem{f)} The total number and length of strings at the end may well be different. \itemitem{g)} If your \eTeX\ uses a different memory allocation or packing scheme or \.{DVI} output logic, the memory usage statistics may change. \vfill\eject \section Appendix C: The \.{eTRIP.TEX} file. The contents of the test routine are prefixed here with line numbers, for ease in comparing this file with the error messages printed later; the line numbers aren't actually present. \runninghead{APPENDIX C: \.{eTRIP.TEX} (CONTINUED)} \vskip 8pt \begingroup\count255=0 \everypar{\global\advance\count255 by 1 \hbox to 20pt{\sevenrm\hfil\the\count255\ \ }} \verbatim{etrip.tex} \endgroup \vfill\eject \section Appendix D: The \.{eTRIP.PL} file. At the moment the \.{eTRIP.PL} file is just a copy of \.{TRIP.PL} as described in Appendix~C of [1]. \section Appendix E: The \.{eTRIPIN.LOG} file. When \.{e-TRIPTEX} makes the \.{eTRIP.FMT} file, it also creates a file called \.{eTRIP.LOG} that looks like this. \runninghead{APPENDIX E: \.{eTRIPIN.LOG} (CONTINUED)} \vskip8pt \verbatim{etripin.log} \vfill\eject \section Appendix F: The \.{eTRIP.LOG} file. Here is the major output of the \.{e-TRIP} test; it is generated by running \.{e-TRIPTEX} and loading \.{eTRIP.FMT}, then reading \.{eTRIP.TEX}. \runninghead{APPENDIX F: \.{eTRIP.LOG} (CONTINUED)} {\let\tt=\eighttt\leftskip 1in\baselineskip 9pt plus .1pt minus .1pt \vskip8pt \verbatim{etrip.log} } \vfill\eject \section Appendix G: The \.{eTRIP.FOT} file. This shows what appeared on the terminal while Appendix F was being produced. \runninghead{APPENDIX G: \.{eTRIP.FOT} (CONTINUED)} \vskip8pt \verbatim{etrip.fot} \vfill\end