-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathtripdiff.js
161 lines (124 loc) · 4.94 KB
/
tripdiff.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
var fs = require('fs');
var Diff = require('diff');
const colors = require('colors');
var testeeFilename = process.argv[2];
var originalFilename = process.argv[3];
var testee = fs.readFileSync(testeeFilename).toString();
var original = fs.readFileSync(originalFilename).toString();
// I am not using ./ in filenames
original = original.replace('(./etrip.tex', '(etrip.tex');
original = original.replace(/\(\.\/etrip\.out/g, '(etrip.out');
var diffs = Diff.diffLines(testee, original);
diffs = diffs.filter( (diff) => (diff.removed || diff.added) );
diffs = diffs.reduce(function(result, value, index, array) {
if (index % 2 === 0)
result.push(array.slice(index, index + 2));
return result;
}, []);
function isNotTooDifferent(a, b) {
if (b == 'This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is TeX, Version 3.141592653 (INITEX) 4 JUL 1776 12:00\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7) 7 JAN 2014 09:59\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX) 22 JAN 2014 11:25\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex)\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is DVItype, Version 3.6 (TeX Live 2014)\n') {
return ('Banner is permitted to differ.');
}
if (b == ' 7i,7n,9p,113b,38s stack positions out of 200i,40n,60p,500b,600s\n') {
return ('Should this be different?');
}
if (b == '\' TeX output 2014.01.22:1125\'\n') {
return ('Dates and times can differ.');
}
if (a == '(etrip.tex\n') {
return ('Filename is permitted to differ.');
}
if (b == 'This is TeX, Version 3.14159265 (INITEX) 7 JAN 2014 09:09\n') {
return ('Banner is permitted to differ.');
}
if (b == 'This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etrip 2014.1.22) 22 JAN 2014 11:25\n') {
return ('Banner is permitted to differ.');
}
if (b == ' (preloaded format=trip 2014.1.7)\n') {
return ('Date of format file is permitted to differ.');
}
if (b == ' (preloaded format=trip 1776.7.4)\n1326 strings of total length 23633\n') {
return ('Date of format file is permitted to differ.');
}
if (b == ' (preloaded format=etrip 2014.1.22)\n1491 strings of total length 26258\n') {
return ('Date of format file is permitted to differ.');
}
if (b.startsWith(' 47 strings out of 1674\n')) {
return ('Number of strings is permitted to differ.');
}
if (b == ' 372 multiletter control sequences out of 2100\n') {
return ('Number of control sequences is permitted to differ.');
}
if (b == '341 multiletter control sequences\n') {
return ('Number of control sequences is permitted to differ.');
}
if (b == '408 multiletter control sequences\n') {
return ('Number of control sequences is permitted to differ.');
}
if ((b == 'Hyphenation trie of length 434 has 12 ops out of 35111\n') &&
(a.startsWith('Hyphenation trie of length 434 has 12 ops out of '))) {
return ('Number of control sequences is permitted to differ.');
}
if (b.match(/, glue set /)) {
var lefts = a.split(', glue set ');
var rights = b.split(', glue set ');
if (lefts[0] == rights[0]) {
var l = parseFloat(lefts[1].replace( 'fil', '' ));
var r = parseFloat(rights[1].replace( 'fil', '' ));
if (Math.abs(l-r) < 0.00005) {
return ('Some glue differs by ' + Math.abs(l-r).toString());
}
}
}
if (a.startsWith('Memory usage before: ') && b.startsWith('Memory usage before: ')) {
return 'Memory usage may differ.';
}
if (b == ' 19 strings out of 1809\n 145 string characters out of 7742\n 3164 words of memory out of 3999\n 409 multiletter control sequences out of 15000+0\n') {
return 'Memory usage may differ.';
}
if (b == ' 10 hyphenation exceptions out of 659\n') {
return 'Hyphenation can differ?';
}
if (b == 'Output written on trip.dvi (16 pages, 2920 bytes).\n') {
return ('Size of dvi output can differ.');
}
return false;
}
for(const diff of diffs) {
[x, y] = diff;
if ((x === undefined) || (y === undefined)) {
if (y) process.stdout.write(y.value.red);
if (x) process.stdout.write(x.value.green);
console.log('Test failed.'.red.bold);
process.exit(1);
}
if (x.added && y.removed)
[x,y] = [y,x];
process.stdout.write(y.value.red);
process.stdout.write(x.value.green);
var result = isNotTooDifferent(diff[0].value, diff[1].value);
if (result == false) {
console.log('Test failed.'.red.bold);
process.exit(1);
} else {
console.log(result.yellow);
process.stdout.write('\n');
}
}
console.log('Tests passed!'.green.bold);
process.exit(0);