Skip to content

Commit 4bf91fd

Browse files
committed
Wire stress tests
1 parent 82884e8 commit 4bf91fd

File tree

1 file changed

+79
-152
lines changed

1 file changed

+79
-152
lines changed

tests/cases/unittests/versionCache.ts

Lines changed: 79 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@ module ts {
66
return source.substring(0, position) + newText + source.substring(position + deletedLength, source.length);
77
}
88

9-
var testDataDir = "..\..\..\src\compiler";
10-
11-
function bigTest() {
12-
editStress("scanner.ts", false);
13-
editStress("sys.ts", false);
14-
editStress("binder.ts", false);
15-
}
16-
179
function lineColToPosition(lineIndex: server.LineIndex, line: number, col: number) {
1810
var lineInfo = lineIndex.lineNumberToInfo(line);
1911
return (lineInfo.offset + col - 1);
@@ -166,29 +158,31 @@ and grew 1cm per day`;
166158
});
167159
});
168160

169-
function editStress(fname: string, timing: boolean) {
170-
var content = ts.sys.readFile(testDataDir + fname);
171-
var lm = server.LineIndex.linesFromText(content);
172-
var lines = lm.lines;
173-
if (lines.length == 0) {
174-
return;
175-
}
176-
var lineMap = lm.lineMap;
161+
describe('VersionCache stress test', () => {
162+
const interationCount = 20;
163+
//const interationCount = 20000; // uncomment for testing
177164

178-
var lineIndex = new server.LineIndex();
165+
// Use scanner.ts, decent size, does not change frequentlly
166+
let testFileName = "src/compiler/scanner.ts";
167+
let testContent = Harness.IO.readFile(testFileName);
168+
let totalChars = testContent.length;
169+
assert.isTrue(totalChars > 0, "Failed to read test file.");
170+
171+
let {lines, lineMap} = server.LineIndex.linesFromText(testContent);
172+
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
173+
174+
let lineIndex = new server.LineIndex();
179175
lineIndex.load(lines);
180-
var totalChars = content.length;
181-
var rsa: number[] = [];
182-
var la: number[] = [];
183-
var las: number[] = [];
184-
var elas: number[] = [];
185-
var ersa: number[] = [];
186-
var ela: number[] = [];
187-
var etotalChars = totalChars;
188-
var j: number;
189-
190-
var startTime: number;
191-
for (j = 0; j < 100000; j++) {
176+
177+
let rsa: number[] = [];
178+
let la: number[] = [];
179+
let las: number[] = [];
180+
let elas: number[] = [];
181+
let ersa: number[] = [];
182+
let ela: number[] = [];
183+
let etotalChars = totalChars;
184+
185+
for (let j = 0; j < 100000; j++) {
192186
rsa[j] = Math.floor(Math.random() * totalChars);
193187
la[j] = Math.floor(Math.random() * (totalChars - rsa[j]));
194188
if (la[j] > 4) {
@@ -209,144 +203,77 @@ and grew 1cm per day`;
209203
etotalChars += (las[j] - elas[j]);
210204
}
211205
}
212-
if (timing) {
213-
startTime = Date.now();
214-
}
215-
for (j = 0; j < 2000; j++) {
216-
var s2 = lineIndex.getText(rsa[j], la[j]);
217-
if (!timing) {
218-
var s1 = content.substring(rsa[j], rsa[j] + la[j]);
206+
207+
it("Range (average length 1/4 file size)", () => {
208+
for (let i = 0; i < interationCount; i++) {
209+
let s2 = lineIndex.getText(rsa[i], la[i]);
210+
let s1 = testContent.substring(rsa[i], rsa[i] + la[i]);
219211
assert.equal(s1, s2);
220212
}
221-
}
222-
if (timing) {
223-
console.log("range (average length 1/4 file size): " + ((Date.now() - startTime) / 2).toFixed(3) + " us");
224-
}
225-
// console.log("check1");
226-
if (timing) {
227-
startTime = Date.now();
228-
}
229-
for (j = 0; j < 10000; j++) {
230-
var s2 = lineIndex.getText(rsa[j], las[j]);
231-
if (!timing) {
232-
var s1 = content.substring(rsa[j], rsa[j] + las[j]);
213+
});
214+
215+
it("Range (average length 4 chars)", () => {
216+
for (let j = 0; j < interationCount; j++) {
217+
let s2 = lineIndex.getText(rsa[j], las[j]);
218+
let s1 = testContent.substring(rsa[j], rsa[j] + las[j]);
233219
assert.equal(s1, s2);
234220
}
235-
}
236-
// console.log("check2");
237-
if (timing) {
238-
console.log("range (average length 4 chars): " + ((Date.now() - startTime) / 10).toFixed(3) + " us");
239-
}
221+
});
240222

241-
if (timing) {
242-
startTime = Date.now();
243-
}
244-
var snapshot: server.LineIndex;
245-
for (j = 0; j < 2000; j++) {
246-
var insertString = content.substring(rsa[100000 - j], rsa[100000 - j] + las[100000 - j]);
247-
snapshot = lineIndex.edit(rsa[j], las[j], insertString);
248-
if (!timing) {
249-
var checkText = editFlat(rsa[j], las[j], insertString, content);
250-
var snapText = snapshot.getText(0, checkText.length);
251-
if (checkText != snapText) {
252-
assert.equal(s1, s2);
253-
}
223+
it("Edit (average length 4)", () => {
224+
for (let i = 0; i < interationCount; i++) {
225+
let insertString = testContent.substring(rsa[100000 - i], rsa[100000 - i] + las[100000 - i]);
226+
let snapshot = lineIndex.edit(rsa[i], las[i], insertString);
227+
let checkText = editFlat(rsa[i], las[i], insertString, testContent);
228+
let snapText = snapshot.getText(0, checkText.length);
229+
assert.equal(checkText, snapText);
254230
}
255-
}
256-
// console.log("check3");
257-
if (timing) {
258-
console.log("edit (average length 4): " + ((Date.now() - startTime) / 2).toFixed(3) + " us");
259-
}
231+
});
260232

261-
var svc = server.ScriptVersionCache.fromString(content);
262-
checkText = content;
263-
if (timing) {
264-
startTime = Date.now();
265-
}
266-
for (j = 0; j < 2000; j++) {
267-
insertString = content.substring(rsa[j], rsa[j] + las[j]);
268-
svc.edit(ersa[j], elas[j], insertString);
269-
if (!timing) {
270-
checkText = editFlat(ersa[j], elas[j], insertString, checkText);
271-
}
272-
if (0 == (j % 4)) {
273-
var snap = svc.getSnapshot();
274-
if (!timing) {
275-
snapText = snap.getText(0, checkText.length);
276-
if (checkText != snapText) {
277-
assert.equal(s1, s2);
278-
}
233+
it("Edit ScriptVersionCache ", () => {
234+
let svc = server.ScriptVersionCache.fromString(testContent);
235+
let checkText = testContent;
236+
237+
for (let i = 0; i < interationCount; i++) {
238+
let insertString = testContent.substring(rsa[i], rsa[i] + las[i]);
239+
svc.edit(ersa[i], elas[i], insertString);
240+
checkText = editFlat(ersa[i], elas[i], insertString, checkText);
241+
if (0 == (i % 4)) {
242+
let snap = svc.getSnapshot();
243+
let snapText = snap.getText(0, checkText.length);
244+
assert.equal(checkText, snapText);
279245
}
280246
}
281-
}
282-
if (timing) {
283-
console.log("edit ScriptVersionCache: " + ((Date.now() - startTime) / 2).toFixed(3) + " us");
284-
}
247+
});
285248

286-
// console.log("check4");
287-
if (timing) {
288-
startTime = Date.now();
289-
}
290-
for (j = 0; j < 5000; j++) {
291-
insertString = content.substring(rsa[100000 - j], rsa[100000 - j] + la[100000 - j]);
292-
snapshot = lineIndex.edit(rsa[j], la[j], insertString);
293-
if (!timing) {
294-
checkText = editFlat(rsa[j], la[j], insertString, content);
295-
snapText = snapshot.getText(0, checkText.length);
296-
if (checkText != snapText) {
297-
assert.equal(s1, s2);
298-
}
249+
it("Edit (average length 1/4th file size)", () => {
250+
for (let i = 0; i < interationCount; i++) {
251+
let insertString = testContent.substring(rsa[100000 - i], rsa[100000 - i] + la[100000 - i]);
252+
let snapshot = lineIndex.edit(rsa[i], la[i], insertString);
253+
let checkText = editFlat(rsa[i], la[i], insertString, testContent);
254+
let snapText = snapshot.getText(0, checkText.length);
255+
assert.equal(checkText, snapText);
299256
}
300-
}
301-
if (timing) {
302-
console.log("edit (average length 1/4th file size): " + ((Date.now() - startTime) / 5).toFixed(3) + " us");
303-
}
257+
});
304258

305-
var t: ts.LineAndCharacter;
306-
var errorCount = 0;
307-
if (timing) {
308-
startTime = Date.now();
309-
}
310-
// console.log("check5");
311-
for (j = 0; j < 100000; j++) {
312-
var lp = lineIndex.charOffsetToLineNumberAndPos(rsa[j]);
313-
if (!timing) {
314-
var lac = ts.computeLineAndCharacterOfPosition(lineMap, rsa[j]);
315-
assert.equal(lac.line, lp.line, "Line number mismatch " + lac.line + " " + lp.line + " " + j);
316-
assert.equal(lac.character, (lp.offset + 1), "Charachter offset mismatch " + lac.character + " " + (lp.offset + 1) + " " + j);
259+
it("Line/offset from pos", () => {
260+
for (let i = 0; i < interationCount; i++) {
261+
let lp = lineIndex.charOffsetToLineNumberAndPos(rsa[i]);
262+
let lac = ts.computeLineAndCharacterOfPosition(lineMap, rsa[i]);
263+
assert.equal(lac.line + 1, lp.line, "Line number mismatch " + (lac.line + 1) + " " + lp.line + " " + i);
264+
assert.equal(lac.character, (lp.offset), "Charachter offset mismatch " + lac.character + " " + lp.offset + " " + i);
317265
}
318-
}
319-
// console.log("check6");
320-
if (timing) {
321-
console.log("line/offset from pos: " + ((Date.now() - startTime) / 100).toFixed(3) + " us");
322-
}
323-
324-
if (timing) {
325-
startTime = Date.now();
326-
}
266+
});
327267

328-
var outer = 1;
329-
if (timing) {
330-
outer = 100;
331-
}
332-
for (var ko = 0; ko < outer; ko++) {
333-
for (var k = 0, llen = lines.length; k < llen; k++) {
334-
var lineInfo = lineIndex.lineNumberToInfo(k + 1);
335-
var lineIndexOffset = lineInfo.offset;
336-
if (!timing) {
337-
var lineMapOffset = lineMap[k];
268+
it("Start pos from line", () => {
269+
for (let i = 0; i < interationCount; i++) {
270+
for (let j = 0, llen = lines.length; j < llen; j++) {
271+
let lineInfo = lineIndex.lineNumberToInfo(j + 1);
272+
let lineIndexOffset = lineInfo.offset;
273+
let lineMapOffset = lineMap[j];
338274
assert.equal(lineIndexOffset, lineMapOffset);
339275
}
340276
}
341-
}
342-
if (timing) {
343-
console.log("start pos from line: " + (((Date.now() - startTime) / lines.length) * 10).toFixed(3) + " us");
344-
}
345-
}
346-
347-
//function edTest() {
348-
// bigTest();
349-
//}
350-
351-
//edTest();
277+
});
278+
});
352279
}

0 commit comments

Comments
 (0)