% The e-TRIP manual: How to validate e-TeX - last modified 24 Jan 1998 % % some e-TeX numbers % \def\minps{32000} % minimum pool_size for e-TRIP test \def\minms{3200} % minimum max_string for e-TRIP test % \def\extracs{66} % additional multiletter control sequences \def\extrasv{2} % additional save stack positions \def\extrabf{23} % additional input buffer positions \def\extramw{38} % additional memory words dumped % \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 2, January 1998\/})} \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.TYP}, the symbolic version of a correct output file \.{eTRIP.DVI} that was produced at the same time as the \.{eTRIP.LOG} file of Appendix~F. Appendix H is \.{eTRIP.OUT}, a short file written out and read in by \eTeX\ when it processes \.{eTRIP.TEX}. Appendix I 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 $\ge\minps$ and \\{max\_strings} to a value $\ge\minms$. \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 \eTeX-specific point (and only in this one): \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. \def\bs{{\char`\\}} \def\sp{{\char'40}} \item{4.} Perform steps 3--7 of the \.{TRIP} test once again with \.{e-TRIPTEX}. During the first run type `\.{*\bs input\sp trip}' instead of `\.{\bs input\sp trip}', as a consequence \.{e-TRIPTEX} will run in extended mode. During the second run type `\.{\&trip\sp\bs toksdef\bs tokens=0\sp\bs input\sp trip}' instead of `\.{\sp\&trip\sp\sp trip\sp}'. 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 message `\.{entering extended mode}' will appear on the terminal and in the \.{TRIP.LOG} files. \itemitem{c)} The input `\.{*\bs input trip}' instead of `\.{\bs input trip}' is recorded in the first \.{TRIP.LOG} file; similarly the input `\.{\&trip\sp\bs toksdef\bs tokens=0\sp\bs input\sp trip}' instead of `\.{\sp\&trip\sp\sp trip\sp}' is recorded in the second \.{TRIP.LOG} file. \itemitem{d)} The following 6 lines (the last of them blank) will be missing from the first \.{TRIP.LOG} file\verblines 6 ! Bad register code (256). l.29 ...{1} \toksdef\tokens=256 \show\errorstopmode A register number must be between 0 and 255. I changed this one to zero. \itemitem{e)} The first \.{TRIP.LOG} file will report the dumping of \extramw~additional memory words. \itemitem{f)} If the date has changed, the number of string characters dumped by the first \.{e-TRIPTEX} run may vary by $\pm2$. \itemitem{g)} Both \.{e-TRIPTEX} runs report \extracs~additional multiletter control sequences (in the \.{TRIP.LOG} files). \itemitem{f)} 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 ### semi simple group (level 1) entered at line 429 (begingroup) ### bottom level The second \.{TRIP.LOG} does not contain six lines\verblines 1 {restoring \fam=-1} one line\verblines 1 {restoring \displayindent=0.0pt} and one line\verblines 1 {restoring current font=\ip} Ten lines displaying an \.{\bs hbox} contain the additional text `\.{, display}'. Finally the second \.{TRIP.LOG} reports the additional use of \extrabf~input buffer (\.{b}) and \extrasv~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}, \.{eTRIP.TYP}, \.{eTRIP.OUT}, and \.{eTRIP.FOT}, as in Appendices C, D, E, F, G, H, and~I (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 outputs \.{eTRIP.LOG}, \.{eTRIP.DVI}, and \.{eTRIP.OUT}. Furthermore, your terminal should receive output that matches \.{eTRIP.FOT} (Appendix~I). 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. \item{10.} Use \.{DVItype} to convert your file \.{eTRIP.DVI} to a file \.{eTRIP.TYP}. The following options should be set when using \.{DVItype}: $$\vbox{\halign{#\hfil&\hfil#\cr Output level = 2\cr Starting page = \.{*.*.*.*.*.*.*.*.*.*}\hskip-20pt\cr Number of pages = 1000000&(this is the default)\cr Resolution = 7227/100&(this is one point per pixel)\cr New magnification = 0&(this is the default)\cr}}$$ The resulting file should agree with the master \.{eTRIP.TYP} file of step~5, except that some of the values might be a little off due to floating-point rounding discrepancies. Furthermore there may be differences between `\\{right}' and `\\w' and `\\x' commands, and between `\\{down}' and `\\y' and `\\z'; the key thing is that all characters and rules and \\{xxx}'s should be in almost the same positions as specified in Appendix~G. If you have set \\{dvi\_buf\_size} to 800, then your \.{DVI} file should be virtually identical to the one supplied.) \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.TYP} file. Here is another major component of the test. It shows the output of \.{DVItype} applied to the file \.{eTRIP.DVI} that was created at the same time Appendix F was produced. \runninghead{APPENDIX G: \.{eTRIP.TYP} (CONTINUED)} {\let\tt=\eighttt\leftskip 1in\baselineskip 9pt plus .1pt minus .1pt \vskip8pt \verbatim{etrip.typ} } \vfill\eject \section Appendix H: The \.{eTRIP.OUT} file. This short file was written out once and read in several times, during the time Appendix F was being produced. There are only four lines. \runninghead{APPENDIX H: \.{eTRIP.OUT} (CONTINUED)} \vskip8pt \verbatim{etrip.out} \vfill\eject \section Appendix I: The \.{eTRIP.FOT} file. This shows what appeared on the terminal while Appendix F was being produced. \runninghead{APPENDIX I: \.{eTRIP.FOT} (CONTINUED)} \vskip8pt \verbatim{etrip.fot} \vfill\end