@@ -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