@@ -29,6 +29,8 @@ function fromByteString(s: string): Uint8Array {
2929 return result ;
3030}
3131
32+ const BATCH_SIZE = 2048 ;
33+
3234const TEST_STRINGS = [
3335 'Лорем ипсум долор сит амет, ех сеа аццусам диссентиет. Ан еос стет еирмод витуперата. Иус дицерет урбанитас ет. Ан при алтера долорес сплендиде, цу яуо интегре денияуе, игнота волуптариа инструцтиор цу вим.' ,
3436 'ლორემ იფსუმ დოლორ სით ამეთ, ფაცერ მუციუს ცონსეთეთურ ყუო იდ, ფერ ვივენდუმ ყუაერენდუმ ეა, ესთ ამეთ მოვეთ სუავითათე ცუ. ვითაე სენსიბუს ან ვიხ. ეხერცი დეთერრუისსეთ უთ ყუი. ვოცენთ დებითის ადიფისცი ეთ ფერ. ნეც ან ფეუგაით ფორენსიბუს ინთერესსეთ. იდ დიცო რიდენს იუს. დისსენთიეთ ცონსეყუუნთურ სედ ნე, ნოვუმ მუნერე ეუმ ათ, ნე ეუმ ნიჰილ ირაცუნდია ურბანითას.' ,
@@ -54,36 +56,40 @@ describe('text encodings', () => {
5456
5557 describe ( 'StringToUtf32 decoder' , ( ) => {
5658 describe ( 'full codepoint test' , ( ) => {
57- it ( '0..65535' , ( ) => {
58- const decoder = new StringToUtf32 ( ) ;
59- const target = new Uint32Array ( 5 ) ;
60- for ( let i = 0 ; i < 65536 ; ++ i ) {
61- // skip surrogate pairs and a BOM
62- if ( ( i >= 0xD800 && i <= 0xDFFF ) || i === 0xFEFF ) {
63- continue ;
59+ for ( let min = 0 ; min < 65535 ; min += BATCH_SIZE ) {
60+ const max = Math . min ( min + BATCH_SIZE , 65536 ) ;
61+ it ( `${ formatRange ( min , max ) } ` , ( ) => {
62+ const decoder = new StringToUtf32 ( ) ;
63+ const target = new Uint32Array ( 5 ) ;
64+ for ( let i = min ; i < max ; ++ i ) {
65+ // skip surrogate pairs and a BOM
66+ if ( ( i >= 0xD800 && i <= 0xDFFF ) || i === 0xFEFF ) {
67+ continue ;
68+ }
69+ const length = decoder . decode ( String . fromCharCode ( i ) , target ) ;
70+ assert . equal ( length , 1 ) ;
71+ assert . equal ( target [ 0 ] , i ) ;
72+ assert . equal ( utf32ToString ( target , 0 , length ) , String . fromCharCode ( i ) ) ;
73+ decoder . clear ( ) ;
6474 }
65- const length = decoder . decode ( String . fromCharCode ( i ) , target ) ;
66- assert . equal ( length , 1 ) ;
67- assert . equal ( target [ 0 ] , i ) ;
68- assert . equal ( utf32ToString ( target , 0 , length ) , String . fromCharCode ( i ) ) ;
69- decoder . clear ( ) ;
70- }
71- } ) ;
72-
73- it ( '65536..0x10FFFF (surrogates)' , function ( ) : void {
74- this . timeout ( 20000 ) ;
75- const decoder = new StringToUtf32 ( ) ;
76- const target = new Uint32Array ( 5 ) ;
77- for ( let i = 65536 ; i < 0x10FFFF ; ++ i ) {
78- const codePoint = i - 0x10000 ;
79- const s = String . fromCharCode ( ( codePoint >> 10 ) + 0xD800 ) + String . fromCharCode ( ( codePoint % 0x400 ) + 0xDC00 ) ;
80- const length = decoder . decode ( s , target ) ;
81- assert . equal ( length , 1 ) ;
82- assert . equal ( target [ 0 ] , i ) ;
83- assert . equal ( utf32ToString ( target , 0 , length ) , s ) ;
84- decoder . clear ( ) ;
85- }
86- } ) ;
75+ } ) ;
76+ }
77+ for ( let min = 65536 ; min < 0x10FFFF ; min += BATCH_SIZE ) {
78+ const max = Math . min ( min + BATCH_SIZE , 0x10FFFF ) ;
79+ it ( `${ formatRange ( min , max ) } (surrogates)` , ( ) => {
80+ const decoder = new StringToUtf32 ( ) ;
81+ const target = new Uint32Array ( 5 ) ;
82+ for ( let i = min ; i < max ; ++ i ) {
83+ const codePoint = i - 0x10000 ;
84+ const s = String . fromCharCode ( ( codePoint >> 10 ) + 0xD800 ) + String . fromCharCode ( ( codePoint % 0x400 ) + 0xDC00 ) ;
85+ const length = decoder . decode ( s , target ) ;
86+ assert . equal ( length , 1 ) ;
87+ assert . equal ( target [ 0 ] , i ) ;
88+ assert . equal ( utf32ToString ( target , 0 , length ) , s ) ;
89+ decoder . clear ( ) ;
90+ }
91+ } ) ;
92+ }
8793
8894 it ( '0xFEFF(BOM)' , ( ) => {
8995 const decoder = new StringToUtf32 ( ) ;
@@ -121,11 +127,8 @@ describe('text encodings', () => {
121127
122128 describe ( 'Utf8ToUtf32 decoder' , ( ) => {
123129 describe ( 'full codepoint test' , ( ) => {
124- function formatRange ( min : number , max : number ) : string {
125- return `${ min } ..${ max } (0x${ min . toString ( 16 ) . toUpperCase ( ) } ..0x${ max . toString ( 16 ) . toUpperCase ( ) } )` ;
126- }
127- for ( let min = 0 ; min < 65535 ; min += 10000 ) {
128- const max = Math . min ( min + 10000 , 65536 ) ;
130+ for ( let min = 0 ; min < 65535 ; min += BATCH_SIZE ) {
131+ const max = Math . min ( min + BATCH_SIZE , 65536 ) ;
129132 it ( `${ formatRange ( min , max ) } (1/2/3 byte sequences)` , ( ) => {
130133 const decoder = new Utf8ToUtf32 ( ) ;
131134 const target = new Uint32Array ( 5 ) ;
@@ -142,9 +145,9 @@ describe('text encodings', () => {
142145 }
143146 } ) ;
144147 }
145- for ( let minRaw = 60000 ; minRaw < 0x10FFFF ; minRaw += 10000 ) {
148+ for ( let minRaw = 60000 ; minRaw < 0x10FFFF ; minRaw += BATCH_SIZE ) {
146149 const min = Math . max ( minRaw , 65536 ) ;
147- const max = Math . min ( minRaw + 10000 , 0x10FFFF ) ;
150+ const max = Math . min ( minRaw + BATCH_SIZE , 0x10FFFF ) ;
148151 it ( `${ formatRange ( min , max ) } (4 byte sequences)` , function ( ) : void {
149152 const decoder = new Utf8ToUtf32 ( ) ;
150153 const target = new Uint32Array ( 5 ) ;
@@ -265,3 +268,7 @@ describe('text encodings', () => {
265268 } ) ;
266269 } ) ;
267270} ) ;
271+
272+ function formatRange ( min : number , max : number ) : string {
273+ return `${ min } ..${ max } (0x${ min . toString ( 16 ) . toUpperCase ( ) } ..0x${ max . toString ( 16 ) . toUpperCase ( ) } )` ;
274+ }
0 commit comments