@@ -29,6 +29,8 @@ function fromByteString(s: string): Uint8Array {
29
29
return result ;
30
30
}
31
31
32
+ const BATCH_SIZE = 2048 ;
33
+
32
34
const TEST_STRINGS = [
33
35
'Лорем ипсум долор сит амет, ех сеа аццусам диссентиет. Ан еос стет еирмод витуперата. Иус дицерет урбанитас ет. Ан при алтера долорес сплендиде, цу яуо интегре денияуе, игнота волуптариа инструцтиор цу вим.' ,
34
36
'ლორემ იფსუმ დოლორ სით ამეთ, ფაცერ მუციუს ცონსეთეთურ ყუო იდ, ფერ ვივენდუმ ყუაერენდუმ ეა, ესთ ამეთ მოვეთ სუავითათე ცუ. ვითაე სენსიბუს ან ვიხ. ეხერცი დეთერრუისსეთ უთ ყუი. ვოცენთ დებითის ადიფისცი ეთ ფერ. ნეც ან ფეუგაით ფორენსიბუს ინთერესსეთ. იდ დიცო რიდენს იუს. დისსენთიეთ ცონსეყუუნთურ სედ ნე, ნოვუმ მუნერე ეუმ ათ, ნე ეუმ ნიჰილ ირაცუნდია ურბანითას.' ,
@@ -54,36 +56,40 @@ describe('text encodings', () => {
54
56
55
57
describe ( 'StringToUtf32 decoder' , ( ) => {
56
58
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 ( ) ;
64
74
}
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
+ }
87
93
88
94
it ( '0xFEFF(BOM)' , ( ) => {
89
95
const decoder = new StringToUtf32 ( ) ;
@@ -121,11 +127,8 @@ describe('text encodings', () => {
121
127
122
128
describe ( 'Utf8ToUtf32 decoder' , ( ) => {
123
129
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 ) ;
129
132
it ( `${ formatRange ( min , max ) } (1/2/3 byte sequences)` , ( ) => {
130
133
const decoder = new Utf8ToUtf32 ( ) ;
131
134
const target = new Uint32Array ( 5 ) ;
@@ -142,9 +145,9 @@ describe('text encodings', () => {
142
145
}
143
146
} ) ;
144
147
}
145
- for ( let minRaw = 60000 ; minRaw < 0x10FFFF ; minRaw += 10000 ) {
148
+ for ( let minRaw = 60000 ; minRaw < 0x10FFFF ; minRaw += BATCH_SIZE ) {
146
149
const min = Math . max ( minRaw , 65536 ) ;
147
- const max = Math . min ( minRaw + 10000 , 0x10FFFF ) ;
150
+ const max = Math . min ( minRaw + BATCH_SIZE , 0x10FFFF ) ;
148
151
it ( `${ formatRange ( min , max ) } (4 byte sequences)` , function ( ) : void {
149
152
const decoder = new Utf8ToUtf32 ( ) ;
150
153
const target = new Uint32Array ( 5 ) ;
@@ -265,3 +268,7 @@ describe('text encodings', () => {
265
268
} ) ;
266
269
} ) ;
267
270
} ) ;
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