new beta-0.90.0
[luatex.git] / source / texk / web2c / triptrap / README
blob4a3b6e1909a7d1b6e754c9b8dafd1db40f8e4d46
1 web2c/triptrap -- The trip and trap tests are Knuth's torture tests for
2 TeX and Metafont.  The MetaPost test is also named `trap', so I've
3 renamed the conflicting files to `mftrap...' and `mptrap...'.  (The
4 contents of all files remain absolutely unaltered, of course.)
6 The tests are exercised in the web2c distribution via `make trip trap mptrap'
7 (from the top-level or web2c/ directories).  They do not and cannot
8 exercise the path searching capabilities; for that, a few ``normal''
9 test runs before and after installation should suffice.
11 {trip,mftrap,mptrap}.diffs -- show the diffs from Knuth's originals as
12 generated on my development machine. tripman.tex, trapman.tex, and
13 mptrap.readme explain precisely what is and is not acceptable.
14 Generally, for trap and MetaPost trap, dates and times, a number of
15   constants and one call to BLANKRECTANGLE will be different.
16 For trip:
17   - Some compile-time constants will be different.
18   - The floating point numbers in glue set ratios may be slightly
19     different (but all the box dimensions must be the same).
20   - The y* and down* commands in the trip.dvi file may be somewhat
21     different.
22   These three kinds of differences are allowed by the trip manual.
24   - The hyphenation exceptions are different because the exception
25   routine now does not count identical hyphenations separately, i.e.,
26   \hyphenation{a-a a-a} only generates one exception in the table.  See
27   the messages below for why this is a good/necessary thing (if the
28   hyphenation exception table is to be dynamic at all).  Knuth has said
29   this discrepancy is ok.
31 For trap, additionally, the capsule numbers will be different.  We
32 believe this is because the master trap.log was not updated completed
33 after the 2.7182818 (2014) tune-up, and have asked Knuth to review.
35 texmf.cnf -- sets up various constants the way the tests want them.  Not
36 all constants can be changed, alas, but this suffices to avoid building
37 a separate binary just to run the tests.
39 *.in -- fed to the programs as standard input, to avoid manual intervention.
41 All the other files are test sources and output.
42 It's a mistake to change them.
45 About the hyphenation exception thing:
47 Date: Mon, 1 Apr 96 11:04:29 BST
48 From: wgs@maths.ucd.ie (Wayne G. Sullivan)
49 To: kb@cs.umb.edu (K. Berry)
50 Subject: Re: hyph_size +1
52 Upon consideration I found another change needed for dynamic hyph_size.
53 Actually, it is one I used earlier but removed for the sake of the trip.log.
54 Knuth's treatment of hyhpenation exceptions has an unpleasant "feature"
55 in that if the same "word" is given in \hyphenation{...}, the code does not
56 replace the existing entry, but adds a new entry which comes before all
57 other entries of the specific "word" (which includes the language code
58 as its last "letter"), so that the earlier entries are inaccessible. The
59 point is that the exceptions table retains useless data. 
60 Try this with the current version of TeX:
61         \hyphenation{ab ab ab ab ... ab ab}
62 Use any word you like for "ab" so long as it has at least two letters. With
63 \tracingstats>0, you get lots of hyphen exceptions, but only the last for
64 "ab" is accessible. I could copy this behavior using a simple hash code,
65 but it seems [pointless]. Instead, when a word is repeated in "\hyphenation"
66 the new code simply replaces the old entry, so no extra space in the
67 exception tables is consumed. Since there is no way to recover the previous
68 entry for a hyphenation exception which has been superseded, I can see no
69 point in keeping the old data. The location of hyphens is kept as a linked
70 list in TeX's mem array. This data for a superseded hyphenation exception
71 could also be flushed, but it makes more differences in trip.log because
72 the memory stats are different. These entries are unlikely to consume much
73 space, so there is little harm in leaving them.
75 Anyway the additional change needed corresponds to the following:
77 diff -c tex.ch.old tex.ch
78 *** tex.ch.old  Fri Mar 29 17:25:28 1996
79 --- tex.ch      Mon Apr  1 10:08:54 1996
80 ***************
81 *** 2177,2182 ****
82 --- 2177,2183 ----
83   until u=str_start[k+1];
84   {repeat hyphenation exception; flushing old data}
85   flush_string; s:=hyph_word[h]; {avoid |slow_make_string|!}
86 + decr(hyph_count);
87   { We could also |flush_list(hyph_list[h]);|, but it interferes
88     with the trip.log. }
89   goto found;
91 Thus it is only additional change is to decrement the hyph_count when a
92 repeat hyphenation exception is encountered. This is really essential only
93 for the "ini" version. The reason is to know exactly how many hyphenation
94 exceptions to undump. The change might as well be included in all versions,
95 because it handles repeated hyphenation exceptions in a more efficient way
96 than the original code. I checked through trip.tex. There is only one word
97 included in hyphenation exceptions, but it is given two different hyphenations.
98 Thus the original trip.log states 2 hyphenation exceptions, while the one
99 using simple hashing shows only 1 -- the single exception has been entered
100 twice. 
102 [...]
104 Wayne