• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16var FastBuffer = undefined;
17
18let encodeArr = ['utf8', 'utf-8', 'ucs2', 'ucs-2', 'ascii', 'latin1', 'binary',
19    'utf16le', 'utf-16le', 'base64', 'base64url', 'hex'];
20
21const UINT32_MAX = 2 ** 32 - 1; // 表示2^32-1,是uint32能表达的最大值
22
23function normalizeEncoding(enc) {
24    enc = enc.toLowerCase();
25    if (enc === 'ucs2' || enc === 'ucs-2' || enc === 'utf-16le') {
26        enc = 'utf16le';
27    }
28    if (enc === 'utf-8') {
29        enc = 'utf8';
30    }
31    return enc;
32}
33
34if (globalThis["ArkPrivate"] != undefined) {
35    let map = new Map();
36    FastBuffer = ArkPrivate.Load(ArkPrivate.FastBuffer);
37    {
38        let buf2 = new FastBuffer(10);
39        buf2.fill('F1刘FG', 0, 10, 'ascii');
40        let str = buf2.toString("hex");
41        map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
42
43        let buf3 = new FastBuffer(10);
44        buf3.fill('F1FG', 0, 10, 'base64');
45        str = buf3.toString("hex");
46        map.set("buffer.fill() failed, expect: 17514617514617514617, output: " + str, str === "17514617514617514617");
47
48        let buf4  = new FastBuffer(10);
49        buf4.fill('F1刘FG', 0, 10, 'binary');
50        str = buf4.toString("hex");
51        map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
52
53        let buf5 = new FastBuffer(10);
54        buf5.fill('F1刘FG', 0, 10, 'latin1');
55        str = buf5.toString("hex");
56        map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
57
58        let buf6 = new FastBuffer(10);
59        buf6.fill('F1刘FG', 0, 10, normalizeEncoding('ucs2'));
60        str = buf6.toString("hex");
61        map.set("buffer.fill() failed, expect: 46003100185246004700, output: " + str, str === "46003100185246004700");
62
63        let buf7 = new FastBuffer(10);
64        buf7.fill('F1刘FG', 0, 10, 'utf8');
65        str = buf7.toString("hex");
66        map.set("buffer.fill() failed, expect: 4631e5889846474631e5, output: " + str, str === "4631e5889846474631e5");
67    }
68    {
69        let uint8array = new Uint8Array(10).fill(0);
70        let buf = new FastBuffer([1, 2, 3, 4, 5, 6, 7]);
71        let num = buf.copy(uint8array, 0, 3);
72        map.set("buffer.copy() failed, expect num: 4, output: " + num, num === 4);
73        let str = uint8array.toString();
74        map.set("buffer.copy() failed, expect str: 4,5,6,7,0,0,0,0,0,0, output: " + str, str === "4,5,6,7,0,0,0,0,0,0");
75    }
76    {
77        let latin1str = '¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ';
78        let strbuf = new FastBuffer(latin1str, "latin1");
79        let toStr = strbuf.toString("latin1");
80        map.set("buffer create and tostring latin1 failed, expect: " + latin1str + ", output: " + toStr, toStr === latin1str);
81    }
82    {
83        let buf = new FastBuffer(10);
84        let buf1 = new FastBuffer(10);
85        buf1.fill('!');
86        for (let i = 0; i < 10; i++) {
87          buf[i] = i + 97;
88        }
89        let len = buf.copy(buf1, 0, 4, 10);
90        let str = buf1.toString();
91        map.set("buffer.copy() failed, expect len: 6, output: " + len, len === 6);
92        map.set("buffer.copy() failed, expect str: efghij!!!!, output: " + str, str === "efghij!!!!");
93    }
94    {
95        let buf = new FastBuffer(10);
96        for (let i = 0; i < 10; i++) {
97          buf[i] = i + 97;
98        }
99        let len = buf.copy(buf, 2);
100        map.set("buffer.copy() failed, expect len: 8, output: " + len, len === 8);
101        let str = buf.toString();
102        map.set("buffer.copy() failed, expect str: ababcdefgh, output: " + str, str === "ababcdefgh");
103    }
104    {
105        let buf1 = new FastBuffer("123656");
106        let buf2 = new FastBuffer("1235");
107        let num = buf1.copy(buf2);
108        let str = buf2.toString();
109        map.set("buffer.copy() failed, expect num: 4, output: " + num, num === 4);
110        map.set("buffer.copy() failed, expect str: 1236, output: " + str, str === "1236");
111    }
112    {
113        let buf1 = new FastBuffer("测试一");
114        let buf2 = new FastBuffer("测试二");
115        let res = buf1.compare(buf2);
116        map.set("buffer.comapre() failed, expect res: -1, output: " + res, res === -1);
117    }
118    {
119        let buf1 = new FastBuffer("1236测试");
120        let buf2 = new FastBuffer("1236测试");
121        let res = buf1.equals(buf2);
122        map.set("buffer.equals() failed, expect res: true, output: " + res, res === true);
123    }
124    {
125        let buf1 = new FastBuffer("测试特殊字符$#@!");
126        let flag = buf1.includes("#@");
127        map.set("buffer.includes() failed, expect flag: true, output: " + flag, flag === true);
128        flag = buf1.includes("测试");
129        map.set("buffer.includes() failed, expect flag: true, output: " + flag, flag === true);
130    }
131    {
132        let buf1 = new FastBuffer("测试特殊字符$#@!");
133        let index = buf1.indexOf("@");
134        map.set("buffer.indexOf() failed, expect index: 20, output: " + index, index === 20);
135    }
136    {
137        let buf = new FastBuffer('this buffer is a buffer');
138        let index = buf.lastIndexOf('buffer', -4);
139        map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
140        index = buf.lastIndexOf('buffer', -5);
141        map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
142        index = buf.lastIndexOf('buffer', -7);
143        map.set("buffer.indexOf() failed, expect index: 5, output: " + index, index === 5);
144        index = buf.lastIndexOf('buffer', 1);
145        map.set("buffer.indexOf() failed, expect index: -1, output: " + index, index === -1);
146        index = buf.lastIndexOf('buffer', 9999);
147        map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
148        index = buf.lastIndexOf('buffer', -999);
149        map.set("buffer.indexOf() failed, expect index: -1, output: " + index, index === -1);
150        index = buf.lastIndexOf('buffer');
151        map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
152    }
153    {
154        let uarr = new Uint8Array(4);
155        uarr[0] = 0x31;
156        uarr[1] = 0x32;
157        uarr[2] = 0x33;
158        uarr[3] = 0x34;
159        let buf1 = new FastBuffer(uarr);
160        let keys = buf1.keys();
161        let index = 0;
162        for (const key of keys) {
163          map.set("buffer.keys() failed, expect index: " + key +", output: " + index, index === key);
164          index++;
165        }
166    }
167    {
168        let uarr = new Uint8Array(4);
169        uarr[0] = 0x31;
170        uarr[1] = 0x32;
171        uarr[2] = 0x33;
172        uarr[3] = 0x34;
173        let buf1 = new FastBuffer(uarr);
174        let values = buf1.values();
175        let va = 0x31;
176        for (const value of values) {
177          map.set("buffer.values() failed, expect value: " + va +", output: " + value, value === va);
178          va++;
179        }
180    }
181    {
182        let buf1 = new FastBuffer("1234");
183        let entries = buf1.entries();
184        let va = 49, index = 0;
185        for (const [key, value] of entries) {
186          map.set("buffer.entries() failed, expect key: " + index +", output: " + key, key === index);
187          map.set("buffer.entries() failed, expect value: " + va +", output: " + value, value === va);
188          va++;
189          index++;
190        }
191    }
192    {
193        let buf = new FastBuffer('this buffer is a buffer');
194        let res = buf.lastIndexOf('buffer', -4);
195        map.set("buffer.lastIndexOf() failed, expect: 17, output: " + res, res === 17);
196    }
197    {
198        let buf = new FastBuffer(8);
199        buf.writeUInt8(123);
200        let res = buf.readUInt8(0);
201        map.set("buffer.writeUInt8() failed, expect: 123, output: " + res, res === 123);
202
203        buf.writeUInt16BE(100, 0);
204        res = buf.readUInt16BE(0);
205        map.set("buffer.readUInt16BE() failed, expect: 100, output: " + res, res === 100);
206
207        buf.writeUInt16LE(100, 0);
208        res = buf.readUInt16LE(0);
209        map.set("buffer.readUInt16LE() failed, expect: 100, output: " + res, res === 100);
210
211        buf.writeUInt32BE(100, 0);
212        res = buf.readUInt32BE(0);
213        map.set("buffer.writeUInt32BE() failed, expect: 100, output: " + res, res === 100);
214
215        buf.writeUInt32LE(100, 0);
216        res = buf.readUInt32LE(0);
217        map.set("buffer.writeUInt32LE() failed, expect: 100, output: " + res, res === 100);
218
219        buf.writeUIntBE(100, 2, 6);
220        res = buf.readUIntBE(2, 6);
221        map.set("buffer.writeUIntBE() failed, expect: 100, output: " + res, res === 100);
222
223        buf.writeUIntLE(100, 2, 6);
224        res = buf.readUIntLE(2, 6);
225        map.set("buffer.writeUIntLE() failed, expect: 100, output: " + res, res === 100);
226
227        buf.writeInt8(123);
228        res = buf.readInt8(0);
229        map.set("buffer.writeInt8() failed, expect: 123, output: " + res, res === 123);
230
231        buf.writeInt16BE(100, 0);
232        res = buf.readInt16BE(0);
233        map.set("buffer.readInt16BE() failed, expect: 100, output: " + res, res === 100);
234
235        buf.writeInt16LE(100, 0);
236        res = buf.readInt16LE(0);
237        map.set("buffer.readInt16LE() failed, expect: 100, output: " + res, res === 100);
238
239        buf.writeInt32BE(100, 0);
240        res = buf.readInt32BE(0);
241        map.set("buffer.writeInt32BE() failed, expect: 100, output: " + res, res === 100);
242
243        buf.writeInt32LE(100, 0);
244        res = buf.readInt32LE(0);
245        map.set("buffer.writeInt32LE() failed, expect: 100, output: " + res, res === 100);
246
247        buf.writeIntBE(100, 2, 6);
248        res = buf.readIntBE(2, 6);
249        map.set("buffer.writeIntBE() failed, expect: 100, output: " + res, res === 100);
250
251        buf.writeIntLE(100, 2, 6);
252        res = buf.readIntLE(2, 6);
253        map.set("buffer.writeIntLE() failed, expect: 100, output: " + res, res === 100);
254
255        const eps = 1e-3;
256        const eeps = 1e-6;
257        buf.writeFloatBE(114.514, 0);
258        map.set("buffer.writeFloatBE() failed", Math.abs(buf.readFloatBE(0) - 114.514) < eps);
259
260        buf.writeFloatLE(114.514, 0);
261        map.set("buffer.writeFloatLE() failed", Math.abs(buf.readFloatLE(0) - 114.514) < eps);
262
263        buf.writeDoubleBE(114.5141919, 0);
264        map.set("buffer.writeDoubleBE() failed", Math.abs(buf.readDoubleBE(0) - 114.5141919) < eeps);
265
266        buf.writeDoubleLE(114.5141919, 0);
267        map.set("buffer.writeDoubleLE() failed", Math.abs(buf.readDoubleLE(0) - 114.5141919) < eeps);
268    }
269
270    {
271        let buf = new FastBuffer(20);
272        map.set("buffer.length:", buf.length == 20);
273    }
274    {
275        let buf = new FastBuffer(20);
276        buf.fill("abc");
277        let flag = true;
278        for (let i = 0; i + 3 < buf.length; i += 3) {
279            let str = buf.toString("utf8", i, i + 3);
280            if (str !== "abc") {
281                flag = false;
282            }
283        }
284        map.set("buffer.fill(string):", flag);
285    }
286    {
287        let buf = new FastBuffer(20);
288        buf.fill(123);
289        let flag = true;
290        for (let i = 0; i < buf.length; i ++) {
291            if (buf.readInt8(i) !== 123) {
292                flag = false;
293            }
294        }
295        map.set("buffer.fill(number):", flag);
296    }
297    {
298        let buf = new FastBuffer(20);
299        let buff = new FastBuffer(20);
300        buff.fill("abc");
301        buf.fill(buff);
302        let flag = true;
303        for (let i = 0; i + 3 < buf.length; i += 3) {
304            let str = buf.toString("utf8", i, i + 3);
305            if (str !== "abc") {
306                flag = false;
307            }
308        }
309        map.set("buffer.fill(FastBuffer):", flag);
310    }
311    {
312        let buf = new FastBuffer(20);
313        let typeArray = new Uint8Array([1,2,3,4,5]);
314        buf.fill(typeArray);
315        let flag = true;
316        for (let i = 0; i < buf.length; i++) {
317            if (buf.readInt8(i) !== typeArray[i % 5]) {
318                flag = false;
319            }
320        }
321        map.set("buffer.fill(Uint8Array):", flag);
322    }
323    {
324        let buf1 = new FastBuffer("hello world", 'utf8');
325        buf1.copy(buf1);
326        let buf2 = new FastBuffer(20);
327        buf1.copy(buf2);
328        map.set("buffer.copy() failed", buf1.compare(buf2, 0, 11) === 0);
329    }
330    {
331        let buf1 = new FastBuffer("hello world", 'utf8');
332        let array = new Uint8Array(11);
333        buf1.copy(array)
334        map.set("buffer.copy() failed", buf1.compare(array, 0, 11) === 0);
335        map.set("buffer.equals() failed", buf1.equals(array));
336    }
337    {
338        let buf1 = new FastBuffer("hello world", 'utf8');
339        map.set("buffer.includes(string) failed", buf1.includes("hello"));
340        let buf2 = new FastBuffer("   hello world", 'utf8');
341        map.set("buffer.includes(string) failed", buf2.includes("hello"));
342    }
343    {
344        let buf1 = new FastBuffer(10);
345        buf1.writeUInt8(114, 0);
346        buf1.writeUInt8(514 & 255, 1);
347        map.set("buffer.includes(number) failed", buf1.includes(114));
348        map.set("buffer.includes(number) failed", buf1.includes(514 & 255));
349    }
350    {
351        let buf1 = new FastBuffer(10);
352        buf1.writeUInt8(114, 0);
353        buf1.writeUInt8(514 & 255, 1);
354        let buf2 = new FastBuffer(10);
355        buf2.writeUInt8(114, 0);
356        map.set("buffer.includes(buffer) failed", !buf1.includes(buf2));
357        let buf3 = new FastBuffer(1);
358        buf3.writeUInt8(114, 0);
359        map.set("buffer.includes(buffer) failed", buf1.includes(buf3));
360    }
361    {
362        let temp = new FastBuffer(15);
363        temp.write("aGVsbG8gd29ybGQh", 0, 12, "base64");
364        let str = temp.toString('utf-8', 0, 12);
365        map.set("buffer.write(str, 'base64') failed", str === "hello world!");
366        for (const [key, value] of temp.entries()) {
367            if (key >= str.length) {
368                break;
369            }
370            if (str[key] != String.fromCharCode(value)) {
371                map.set("buffer.entries() failed", false);
372                break;
373            }
374        }
375    }
376    {
377        let temp = new FastBuffer("hello world hello", "utf8");
378        let index = temp.indexOf('hello');
379        map.set("buffer.indexOf() failed", index === 0);
380        index = temp.lastIndexOf('hello');
381        map.set("buffer.lastIndexOf() failed", index === 12);
382        index = temp.indexOf('www');
383        map.set("buffer.indexOf() failed", index === -1);
384        let flag = temp.includes("hello");
385        map.set("buffer.indexOf() failed", flag);
386    }
387    {
388        let array = [1,2,3,4,5];
389        let temp = new FastBuffer(array);
390        for (let i = 0; i < array.length; i++) {
391            if(temp[i] != array[i]) {
392                map.set("buffer.from(array) failed", false);
393                break;
394            }
395        }
396    }
397    {
398        let str = "hello world";
399        let temp = new FastBuffer(str, "utf8");
400        for (let i = 0; i < str.length; i++) {
401            if(String.fromCharCode(temp[i]) != str[i]) {
402                map.set("buffer.from(str) failed", false);
403                break;
404            }
405        }
406    }
407    {
408        let typeArray = new Uint8Array([1,2,3,4,5]);
409        let temp = new FastBuffer(typeArray);
410        map.set("buffer.from(UInt8Array) failed", temp.buffer === typeArray.buffer);
411        for (let i = 0; i < temp.length; i++) {
412            if(temp[i] != typeArray[i]) {
413                map.set("buffer.from(UInt8Array) failed", false);
414                break;
415            }
416        }
417    }
418    {
419        let array = [114,514,1919,810];
420        let temp = new FastBuffer(array);
421        for (let i = 0; i < array.length; i++) {
422            if(temp.readInt8(i) != (array[i] & 255)) {
423                map.set("buffer.from(array) failed", false);
424                break;
425            }
426        }
427    }
428    {
429        let buf1 = new FastBuffer("abcd", "utf8");
430        let buf2 = new FastBuffer("bcde", "utf8");
431        map.set("buffer.compare(target) failed", (buf1.compare(buf2) == -1) == ("abcd" < "bcde"));
432        map.set("buffer.compare(target) failed", (buf2.compare(buf1) == 1) == ("abcd" > "bcde"));
433        let buf3 = new FastBuffer("abcde", "utf8");
434        map.set("buffer.compare(target) failed", (buf1.compare(buf3) == 1) == ("abcd" < "abcde"));
435        map.set("buffer.compare(target) failed", (buf1.compare(buf1) == 0) == ("abcd" == "abcd"));
436    }
437    {
438        const buf1 = new FastBuffer('1234', 'utf8');
439        const buf2 = new FastBuffer('0123', 'utf8');
440        map.set("buffer.compare() failed", buf1.compare(buf2) === 1);
441    }
442    {
443        let buf1 = new FastBuffer("abcd", 'utf8');
444        map.set("buffer.toJson() failed", JSON.stringify(buf1) === "{\"0\":97,\"1\":98,\"2\":99,\"3\":100}");
445    }
446
447    {
448        let buf = new FastBuffer(12);
449        let src = "hello world!";
450        let srcBase64 = "aGVsbG8gd29ybGQh";
451        buf.write(src);
452        map.set("buf.toString failed", buf.toString() === src);
453        map.set("buf.toString failed", buf.toString("base64") === srcBase64);
454    }
455
456    {
457        let buf = new FastBuffer(12);
458        let src = "hello world!";
459        let srcBase64 = "aGVsbG8gd29ybGQh";
460        buf.write(srcBase64, 0, 12, 'base64');
461        map.set("buf.toString failed", buf.toString() === src);
462    }
463
464    {
465        let array = new Uint8Array([252,11,3,67,237,118,91,177,43]);
466        let buf = new FastBuffer(array);
467        let strUrl = buf.toString("base64url");
468        let str = buf.toString("base64");
469        map.set("create buffer baes64 01 failed", strUrl === "_AsDQ-12W7Er");
470        map.set("create buffer baes64 01 failed", str === "/AsDQ+12W7Er");
471
472        array = new Uint8Array([2,192,254,253,5,132,69]);
473        buf = new FastBuffer(array);
474        strUrl = buf.toString("base64url");
475        str= buf.toString("base64");
476        map.set("create buffer baes64 02 failed", strUrl === "AsD-_QWERQ");
477        map.set("create buffer baes64 02 failed", str === "AsD+/QWERQ==");
478
479        array = new Uint8Array([215,109,211,97,72,142,167,241]);
480        buf = new FastBuffer(array);
481        strUrl = buf.toString("base64url");
482        str = buf.toString("base64");
483        map.set("create buffer baes64 03 failed", strUrl === "123TYUiOp_E");
484        map.set("create buffer baes64 03 failed", str === "123TYUiOp/E=");
485
486        array = new Uint8Array([252]);
487        buf = new FastBuffer(array);
488        strUrl = buf.toString("base64url");
489        str = buf.toString("base64");
490        map.set("create buffer baes64 04 failed", strUrl === "_A");
491        map.set("create buffer baes64 04 failed", str === "/A==");
492
493        array = new Uint8Array([252,97]);
494        buf = new FastBuffer(array);
495        strUrl = buf.toString("base64url");
496        str = buf.toString("base64");
497        map.set("create buffer baes64 05 failed", strUrl === "_GE");
498        map.set("create buffer baes64 05 failed", str === "/GE=");
499
500        array = new Uint8Array([252,97,142]);
501        buf  = new FastBuffer(array);
502        strUrl = buf.toString("base64url");
503        str = buf.toString("base64");
504        map.set("create buffer baes64 06 failed", strUrl === "_GGO");
505        map.set("create buffer baes64 06 failed", str === "/GGO");
506    }
507
508    {
509        let ab = new ArrayBuffer(100);
510        let buf = new FastBuffer(ab, 9.9, 9.9);
511        let res = buf.toString('hex');
512        map.set("create buffer not int parameter failed", res === "000000000000000000");
513    }
514
515    {
516        let buf = new FastBuffer(2);
517        buf.writeInt16BE(0x1234, 0);
518        try {
519          let ref = buf.readInt16LE(1);
520        } catch (err) {
521          map.set("buffer write out of bounds error failed", err.name === 'BusinessError');
522          map.set("buffer write out of bounds error failed", err.message === 'The value of "offset" is out of range. It must be >= 0 and <= 0. Received value is: 1');
523        }
524    }
525
526    {
527        let buf = new FastBuffer("测试特殊字符$#@!");
528        let len = buf.length;
529        map.set("buffer test chinese$#@! failed", len === 22);
530    }
531
532    {
533        let buf = new FastBuffer([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
534        let res = buf.readIntBE(0, 6).toString(16);
535        map.set("buffer.readIntBE() failed, expect: 1234567890ab, output: " + res, res === '1234567890ab');
536    }
537
538    {
539        let buf = new FastBuffer([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
540        let res = buf.readIntLE(0, 6).toString(16);
541        map.set("buffer.readIntLE() failed, expect: -546f87a9cbee, output: " + res, res === '-546f87a9cbee');
542    }
543
544    {
545        let buf = new FastBuffer([0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70,
546            0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78]);
547        let res = buf.readBigUInt64BE(0).toString();
548        map.set("buffer.readBigUInt64BE() failed, expect: 7161960797921896816, output: " + res, res === '7161960797921896816');
549
550        let buf1 = new FastBuffer(8);
551        let result = buf1.writeBigUInt64BE(BigInt(0xdecafafecacefade), 0);
552        map.set("buffer.readBigUInt64BE() failed, expect: 8, output: " + result, result === 8);
553    }
554    {
555        try{
556            let buf = new FastBuffer([undefined]);
557        } catch (e) {
558            map.set("new buffer from array failed, expect: 401, output: " + e.code, e.code === 401);
559        }
560    }
561    {
562        let buf = new FastBuffer(3).fill("$*$");
563        let str = buf.toString();
564        map.set("testFill0092, expect: $*$, output: " + str, str === "$*$");
565    }
566
567    {
568        try {
569            let buf = new FastBuffer(3).fill("$*$", -1);
570        } catch (err) {
571            map.set("testFill0093, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
572            let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 3. Received value is: -1';
573            map.set("testFill0093, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
574        }
575    }
576
577    {
578        try {
579            let buf = new FastBuffer(3).fill("$*$", 0, 5);
580        } catch (err) {
581            map.set("testFill0094, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
582            let expectMsg = 'The value of "end" is out of range. It must be >= 0 and <= 3. Received value is: 5';
583            map.set("testFill0094, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
584        }
585    }
586
587    {
588    let buf = new FastBuffer(8);
589    try {
590        let offset = buf.write("abcde", -1);
591    } catch (err) {
592        map.set("testWrite0105, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
593        let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 7. Received value is: -1';
594        map.set("testWrite0105, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
595    }
596    }
597
598    {
599    let buf = new FastBuffer(8);
600    try {
601        let offset = buf.write("abcde", 1, 9);
602    } catch (err) {
603        map.set("testWrite0106, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
604        let expectMsg = 'The value of "length" is out of range. It must be >= 0 and <= 7. Received value is: 9';
605        map.set("testWrite0106, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
606    }
607    }
608
609    {
610    let buf1 = new FastBuffer("1236");
611    let buf2 = new FastBuffer("1235");
612    let res = buf1.compare(buf2);
613    map.set("testCompare0110, expect: 1, output: " + res, res === 1);
614    }
615
616    {
617    let buf1 = new FastBuffer("1236");
618    let buf2 = new FastBuffer("1235");
619    try {
620        let res = buf1.compare(buf2, -1);
621    } catch (err) {
622        map.set("testCompare0112, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
623        let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4. Received value is: -1';
624        map.set("testCompare0112, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
625    }
626    }
627
628    {
629    let buf1 = new FastBuffer("1236");
630    let buf2 = new FastBuffer("1235");
631    let res = buf1.equals(buf2);
632    map.set("testEquals0120, expect: false, output: " + res, res === false);
633    }
634
635    {
636    let buf1 = new FastBuffer("1236测试");
637    let buf2 = new FastBuffer("1236测试");
638    let res = buf1.equals(buf2);
639    map.set("testEquals0121, expect: true, output: " + res, res === true);
640    }
641
642    {
643    let buf1 = new FastBuffer("O@O");
644    let buf2 = new FastBuffer("O^O");
645    let res = buf1.equals(buf2);
646    map.set("testEquals0122, expect: false, output: " + res, res === false);
647    }
648
649    {
650    let buf1 = new FastBuffer("1236");
651    let buf2 = new FastBuffer("1235");
652    let num = buf1.copy(buf2);
653    map.set("testCopy0140, expect: 4, output: " + num, num === 4);
654    let str = buf2.toString();
655    map.set("testCopy0140, expect: 1236, output: " + str, str === "1236");
656    }
657
658    {
659    let buf1 = new FastBuffer("abcdefg");
660    let buf2 = new FastBuffer("1235789");
661    let num = buf1.copy(buf2, 2, 1, 3);
662    map.set("testCopy0141, expect: 2, output: " + num, num === 2);
663    let str = buf2.toString();
664    map.set("testCopy0141, expect: 12bc789, output: " + str, str === "12bc789");
665    }
666
667    {
668    let buf1 = new FastBuffer("123656");
669    let buf2 = new FastBuffer("1235");
670    let num = buf1.copy(buf2);
671    map.set("testCopy0143, expect: 4, output: " + num, num === 4);
672    let str = buf2.toString();
673    map.set("testCopy0143, expect: 1236, output: " + str, str === "1236");
674    }
675
676    {
677    let buf1 = new FastBuffer("123656");
678    let buf2 = new FastBuffer("1235");
679    try {
680        let num = buf1.copy(buf2, -1);
681    } catch (err) {
682        map.set("testCopy0144, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
683        let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4294967295. Received value is: -1';
684        map.set("testCopy0144, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
685    }
686    }
687
688    {
689    let buf1 = new FastBuffer("ab$#");
690    let buf2 = new FastBuffer("123556");
691    let num = buf1.copy(buf2);
692    map.set("testCopy0146, expect: 4, output: " + num, num === 4);
693    let str = buf2.toString();
694    map.set("testCopy0146, expect: ab$#56, output: " + str, str === "ab$#56");
695    }
696
697    {
698    let buf1 = new FastBuffer("1236");
699    let str = buf1.toString();
700    map.set("testToString0150, expect: 1236, output: " + str, str === "1236");
701    }
702
703    {
704    let buf1 = new FastBuffer("张三");
705    let str = buf1.toString();
706    map.set("testToString0151, expect: 张三, output: " + str, str === "张三");
707    }
708
709    {
710    let buf1 = new FastBuffer("abc");
711    let str = buf1.toString("binary");
712    map.set("testToString0152, expect: abc, output: " + str, str === "abc");
713    }
714
715    {
716    let buf1 = new FastBuffer("abc");
717    let str = buf1.toString("ascii");
718    map.set("testToString0153, expect: abc, output: " + str, str === "abc");
719    }
720
721    {
722    let buf1 = new FastBuffer("abc");
723    let str = buf1.toString("base64");
724    map.set("testToString0154, expect: YWJj, output: " + str, str === "YWJj");
725    }
726
727    {
728    let buf1 = new FastBuffer("abc");
729    let str = buf1.toString("hex");
730    map.set("testToString0155, expect: 616263, output: " + str, str === "616263");
731    }
732
733    {
734    let buf1 = new FastBuffer("abc");
735    let str = buf1.toString("latin1");
736    map.set("testToString0156, expect: abc, output: " + str, str === "abc");
737    }
738
739    {
740    let buf1 = new FastBuffer("abc");
741    let str = buf1.toString("ucs2");
742    map.set("testToString0157, expect: 扡, output: " + str, str === "扡");
743    }
744
745    {
746    let buf1 = new FastBuffer("abc");
747    let str = buf1.toString("utf16le");
748    map.set("testToString0158, expect: 扡, output: " + str, str === "扡");
749    }
750
751    {
752    let buf1 = new FastBuffer("!@#$%^&*");
753    let str = buf1.toString();
754    map.set("testToString0159, expect: !@#$%^&*, output: " + str, str === "!@#$%^&*");
755    }
756
757    {
758    let buf1 = new FastBuffer("13236");
759    let index = buf1.indexOf("3");
760    map.set("testIndexOf0170, expect: 1, output: " + index, index === 1);
761    }
762
763    {
764    let buf1 = new FastBuffer("13236");
765    let index = buf1.indexOf("3", 2);
766    map.set("testIndexOf0171, expect: 3, output: " + index, index === 3);
767    }
768
769    {
770    let buf1 = new FastBuffer("13236235");
771    let index = buf1.indexOf("23");
772    map.set("testIndexOf0173, expect: 2, output: " + index, index === 2);
773    }
774
775    {
776    let buf1 = new FastBuffer("测试特殊字符$#@!");
777    let index = buf1.indexOf("@");
778    map.set("testIndexOf0174, expect: 20, output: " + index, index === 20);
779    }
780
781    {
782    let buf1 = new FastBuffer("13236235");
783    let index = buf1.indexOf("23", 3);
784    map.set("testIndexOf0175, expect: 5, output: " + index, index === 5);
785    }
786
787    {
788    let buf1 = new FastBuffer("13236");
789    let index = buf1.indexOf("a");
790    map.set("testIndexOf0176, expect: -1, output: " + index, index === -1);
791    }
792
793    {
794    let buf1 = new FastBuffer("13236");
795    let index = buf1.lastIndexOf("3");
796    map.set("testLastIndexOf0180, expect: 3, output: " + index, index === 3);
797    }
798
799    {
800    let buf1 = new FastBuffer("13236");
801    let index = buf1.lastIndexOf("3", 2);
802    map.set("testLastIndexOf0181, expect: 1, output: " + index, index === 1);
803    }
804
805    {
806    let buf1 = new FastBuffer("13236235");
807    let index = buf1.lastIndexOf("23");
808    map.set("testLastIndexOf0183, expect: 5, output: " + index, index === 5);
809    }
810
811    {
812    let buf1 = new FastBuffer("13236235");
813    let index = buf1.lastIndexOf("23", 3);
814    map.set("testLastIndexOf0184, expect: 2, output: " + index, index === 2);
815    }
816
817    {
818    let buf1 = new FastBuffer("13236");
819    let index = buf1.lastIndexOf("a");
820    map.set("testLastIndexOf0186, expect: -1, output: " + index, index === -1);
821    }
822
823    {
824    let buf1 = new FastBuffer("13236");
825    let flag = buf1.includes("3");
826    map.set("testIncludes0190, expect: true, output: " + flag, flag === true);
827    }
828
829    {
830    let buf1 = new FastBuffer("13236");
831    let flag = buf1.includes("3", 2);
832    map.set("testIncludes0191, expect: true, output: " + flag, flag === true);
833    }
834
835    {
836    let buf1 = new FastBuffer("13236");
837    let flag = buf1.includes("32");
838    map.set("testIncludes0193, expect: true, output: " + flag, flag === true);
839    }
840
841    {
842    let buf1 = new FastBuffer("13236");
843    let flag = buf1.includes("32", 2);
844    map.set("testIncludes0194, expect: false, output: " + flag, flag === false);
845    }
846
847    {
848    let buf1 = new FastBuffer("测试特殊字符$#@!");
849    let flag = buf1.includes("#@");
850    map.set("testIncludes0195, expect: true, output: " + flag, flag === true);
851    flag = buf1.includes("测试");
852    map.set("testIncludes0195, expect: true, output: " + flag, flag === true);
853    }
854
855    {
856    let buf1 = new FastBuffer("13236");
857    let flag = buf1.includes("abc");
858    map.set("testIncludes0196, expect: false, output: " + flag, flag === false);
859    }
860    {
861    let buf1 = new FastBuffer("1234");
862    let keys = buf1.keys();
863    let index = 0;
864    for (const key of keys) {
865        map.set("testKeys0230, expect: " + index + ", output: " + key, key === index);
866        index++;
867    }
868    }
869
870    {
871    let uarr = new Uint8Array(4);
872    uarr[0] = 0x31;
873    uarr[1] = 0x32;
874    uarr[2] = 0x33;
875    uarr[3] = 0x34;
876    let buf1 = new FastBuffer(uarr);
877    let keys = buf1.keys();
878    let index = 0;
879    for (const key of keys) {
880        map.set("testKeys0235, expect: " + index + ", output: " + key, key === index);
881        index++;
882    }
883    }
884
885    {
886    let buf1 = new FastBuffer("1234");
887    let keys = buf1.values();
888    let va = 49;
889    for (const value of keys) {
890        map.set("testValues0240, expect: " + va + ", output: " + value, value === va);
891        va++;
892    }
893    }
894
895    {
896    let uarr = new Uint8Array(4);
897    uarr[0] = 0x31;
898    uarr[1] = 0x32;
899    uarr[2] = 0x33;
900    uarr[3] = 0x34;
901    let buf1 = new FastBuffer(uarr);
902    let keys = buf1.values();
903    let va = 0x31;
904    for (const value of keys) {
905        map.set("testValues0245, expect: " + va + ", output: " + value, value === va);
906        va++;
907    }
908    }
909
910    {
911    let uarr = new Uint8Array(3);
912    uarr[0] = 0x12;
913    uarr[1] = 0x34;
914    uarr[2] = 0x56;
915    let buf = new FastBuffer(uarr);
916    let str = buf.toString("hex");
917    map.set("testfrom0260, expect: 123456, output: " + str, str === "123456");
918    }
919
920    {
921    const buf = new FastBuffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
922    let str = buf.toString("hex");
923    map.set("testfrom0261, expect: 627566666572, output: " + str, str === "627566666572");
924    }
925
926    {
927    const arr = new Uint8Array(2);
928    arr[0] = 97;
929    arr[1] = 98;
930    const buf = new FastBuffer(arr.buffer);
931    arr[0] = 99
932    buf[1] = 100
933    let str = buf.toString("hex");
934    map.set("testfrom0262, expect: 6364, output: " + str, str === "6364");
935    map.set("testfrom0262, expect: 100, output: " + arr[1], arr[1] === 100);
936    }
937    {
938    const buf1 = new FastBuffer('buffer');
939    const buf2 = new FastBuffer(buf1);
940    buf1[0] = 0x61;
941    let str = buf1.toString();
942    map.set("testfrom0264, expect: auffer, output: " + str, str === "auffer");
943    str = buf2.toString();
944    map.set("testfrom0264, expect: buffer, output: " + str, str === "buffer");
945    }
946
947    {
948    const buf1 = new FastBuffer('this is a test');
949    let str = buf1.toString();
950    map.set("testfrom0265, expect: this is a test, output: " + str, str === "this is a test");
951    }
952
953    {
954    const str = `MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/OgIQLaulKklB\npZltSaWwM3Cnzcmvh+LoqYFYjCePUxnoJRDusFqy4sjwBx9fn/XSxxJ9A0KxMtXa\nr7YFjwQo3FsIjLZ3+8wS+Kydcg==`;
955    const buf = new FastBuffer(str, 'base64');
956    let ref = buf.readInt8(buf.length - 1);
957    map.set("testfrom0269, expect: 114, output: " + ref, ref === 114);
958    }
959
960    {
961    let buf = new FastBuffer(4);
962    let ref = buf.writeInt32BE(0x12345678, 0);
963    map.set("testWriteInt32BE0310, expect: 4, output: " + ref, ref === 4);
964    }
965
966    {
967    let buf = new FastBuffer(4);
968    try {
969        let ref = buf.writeInt32BE(0x12345678, -1);
970    } catch (err) {
971        map.set("testWriteInt32BE0311, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
972        let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
973        map.set("testWriteInt32BE0311, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
974    }
975    }
976
977    {
978    let buf = new FastBuffer(4);
979    try {
980        let ref = buf.writeInt32BE(0x123456789, 0);
981    } catch (err) {
982        map.set("testWriteInt32BE0312, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
983        let expectMsg = 'The value of "value" is out of range. It must be >= -2147483648 and <= 2147483647. Received value is: 4886718345';
984        map.set("testWriteInt32BE0312, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
985    }
986    }
987
988    {
989    let buf = new FastBuffer(4);
990    try {
991        let ref = buf.writeInt32BE(0x12345678, 1);
992    } catch (err) {
993        map.set("testWriteInt32BE0313, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
994        let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 0. Received value is: 1';
995        map.set("testWriteInt32BE0313, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
996    }
997    }
998
999    {
1000    let buf = new FastBuffer(4);
1001    let ref = buf.writeInt32LE(0x12345678, 0);
1002    map.set("testWriteInt32LE0320, expect: 4, output: " + ref, ref === 4);
1003    }
1004
1005    {
1006    let buf = new FastBuffer(4);
1007    try {
1008        let ref = buf.writeInt32LE(0x12345678, -1);
1009    } catch (err) {
1010        map.set("testWriteInt32LE0321, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1011        let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
1012        map.set("testWriteInt32LE0321, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1013    }
1014    }
1015
1016    {
1017    let buf = new FastBuffer(4);
1018    try {
1019        let ref = buf.writeInt32LE(0x123456789, 0);
1020    } catch (err) {
1021        map.set("testWriteInt32LE0322, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1022        let expectMsg = 'The value of "value" is out of range. It must be >= -2147483648 and <= 2147483647. Received value is: 4886718345';
1023        map.set("testWriteInt32LE0322, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1024    }
1025    }
1026
1027    {
1028    let buf = new FastBuffer(4);
1029    try {
1030        let ref = buf.writeInt32LE(0x12345678, 1);
1031    } catch (err) {
1032        map.set("testWriteInt32LE0323, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1033        let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 0. Received value is: 1';
1034        map.set("testWriteInt32LE0323, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1035    }
1036    }
1037
1038    {
1039    let buf = new FastBuffer(2);
1040    let ref = buf.writeInt16BE(0x7bca, 0);
1041    map.set("testWriteInt16BE0330, expect: 2, output: " + ref, ref === 2);
1042    }
1043
1044    {
1045    let buf = new FastBuffer(2);
1046    try {
1047        let ref = buf.writeInt16BE(0x7bca, -1);
1048    } catch (err) {
1049        map.set("testWriteInt16BE0331, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1050        let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
1051        map.set("testWriteInt16BE0331, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1052    }
1053    }
1054
1055    {
1056    let buf = new FastBuffer(2);
1057    try {
1058        let ref = buf.writeInt16BE(0x123456, 0);
1059    } catch (err) {
1060        map.set("testWriteInt16BE0332, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1061        let expectMsg = 'The value of "value" is out of range. It must be >= -32768 and <= 32767. Received value is: 1193046';
1062        map.set("testWriteInt16BE0332, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1063    }
1064    }
1065{
1066  // 1. Create empty buffer
1067  let buf = new FastBuffer(0);
1068  map.set("testConstructorEmpty, expect: 0, output: " + buf.length, buf.length === 0);
1069
1070  // 2. Initialize with specified size
1071  buf = new FastBuffer(5);
1072  map.set("testConstructorSize, expect: 5, output: " + buf.length, buf.length === 5);
1073
1074  // 3. Initialize with UTF-8 string
1075  buf = new FastBuffer("Hello");
1076  map.set("testConstructorString, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
1077
1078  // 4. Initialize from array
1079  buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // "Hello"
1080  map.set("testConstructorArray, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
1081
1082  // 5. Initialize from ArrayBuffer
1083  let arrBuf = new ArrayBuffer(3);
1084  new Uint8Array(arrBuf).set([0x41, 0x42, 0x43]); // "ABC"
1085  buf = new FastBuffer(arrBuf);
1086  map.set("testConstructorArrayBuffer, expect: ABC, output: " + buf.toString(), buf.toString() === "ABC");
1087
1088  // 6. Initialize from another FastBuffer (copy)
1089  let bufSrc = new FastBuffer("Copy");
1090  buf = new FastBuffer(bufSrc);
1091  map.set("testConstructorFastBuffer, expect: Copy, output: " + buf.toString(), buf.toString() === "Copy");
1092}
1093{
1094  // 13. Write UInt8 value
1095  let buf = new FastBuffer(1);
1096  buf.writeUInt8(0xAB, 0);
1097  map.set("testWriteUInt8, expect: AB, output: " + buf.toString('hex'), buf.toString('hex') === "ab");
1098
1099  // 14. Read UInt8 value
1100  let val = buf.readUInt8(0);
1101  map.set("testReadUInt8, expect: 171, output: " + val, val === 0xAB);
1102
1103  // 15. Write UInt16BE (big-endian)
1104  buf = new FastBuffer(2);
1105  buf.writeUInt16BE(0xABCD, 0);
1106  map.set("testWriteUInt16BE, expect: ABCD, output: " + buf.toString('hex'), buf.toString('hex') === "abcd");
1107
1108  // 16. Read UInt16BE value
1109  val = buf.readUInt16BE(0);
1110  map.set("testReadUInt16BE, expect: 43981, output: " + val, val === 0xABCD);
1111
1112  // 17. Write UInt16LE (little-endian)
1113  buf.writeUInt16LE(0xABCD, 0);
1114  map.set("testWriteUInt16LE, expect: CDAB, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
1115
1116  // 18. Read UInt16LE value
1117  val = buf.readUInt16LE(0);
1118  map.set("testReadUInt16LE, expect: 43981, output: " + val, val === 0xABCD);
1119
1120  // 19. Write UInt32BE
1121  buf = new FastBuffer(4);
1122  buf.writeUInt32BE(0x12345678, 0);
1123  map.set("testWriteUInt32BE, expect: 12345678, output: " + buf.toString('hex'), buf.toString('hex') === "12345678");
1124
1125  // 20. Read UInt32BE value
1126  val = buf.readUInt32BE(0);
1127  map.set("testReadUInt32BE, expect: 305419896, output: " + val, val === 0x12345678);
1128
1129  // 21. Write UInt32LE
1130  buf.writeUInt32LE(0x12345678, 0);
1131  map.set("testWriteUInt32LE, expect: 78563412, output: " + buf.toString('hex'), buf.toString('hex') === "78563412");
1132
1133  // 22. Read UInt32LE value
1134  val = buf.readUInt32LE(0);
1135  map.set("testReadUInt32LE, expect: 305419896, output: " + val, val === 0x12345678);
1136
1137  // 23. Write Int8 value
1138  buf = new FastBuffer(1);
1139  buf.writeInt8(-85, 0); // -85 = 0xAB (two's complement)
1140  map.set("testWriteInt8, expect: AB, output: " + buf.toString('hex'), buf.toString('hex') === "ab");
1141
1142  // 24. Read Int8 value
1143  val = buf.readInt8(0);
1144  map.set("testReadInt8, expect: -85, output: " + val, val === -85);
1145
1146  // 25. Write Int16BE
1147  buf = new FastBuffer(2);
1148  buf.writeInt16BE(-21555, 0); // 0xABCD = -21555 (two's complement)
1149  map.set("testWriteInt16BE, expect: ABCD, output: " + buf.toString('hex'), buf.toString('hex') === "abcd");
1150
1151  // 26. Read Int16BE value
1152  val = buf.readInt16BE(0);
1153  map.set("testReadInt16BE, expect: -21555, output: " + val, val === -21555);
1154
1155  // 27. Write Int16LE
1156  buf.writeInt16LE(-21555, 0);
1157  map.set("testWriteInt16LE, expect: CDAB, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
1158
1159  // 28. Read Int16LE value
1160  val = buf.readInt16LE(0);
1161  map.set("testReadInt16LE, expect: -21555, output: " + val, val === -21555);
1162
1163  // 29. Write Int32BE
1164  buf = new FastBuffer(4);
1165  buf.writeInt32BE(-19088744, 0); // 0xFEDCBA98 = -19088744 (two's complement)
1166  map.set("testWriteInt32BE, expect: fedcba98, output: " + buf.toString('hex'), buf.toString('hex') === "fedcba98");
1167
1168  // 30. Read Int32BE value
1169  val = buf.readInt32BE(0);
1170  map.set("testReadInt32BE, expect: -19088744, output: " + val, val === -19088744);
1171
1172  // 31. Write Int32LE
1173  buf.writeInt32LE(-19088744, 0);
1174  map.set("testWriteInt32LE, expect: 98badcfe, output: " + buf.toString('hex'), buf.toString('hex') === "98badcfe");
1175
1176  // 32. Read Int32LE value
1177  val = buf.readInt32LE(0);
1178  map.set("testReadInt32LE, expect: -19088744, output: " + val, val === -19088744);
1179
1180  // 33. Write FloatBE
1181  buf = new FastBuffer(4);
1182  buf.writeFloatBE(123.456, 0);
1183  let hex = buf.toString('hex');
1184  map.set("testWriteFloatBE, expect: 42f6e979, output: " + hex, hex === "42f6e979");
1185
1186  // 34. Read FloatBE value
1187  let floatVal = buf.readFloatBE(0);
1188  map.set("testReadFloatBE, expect: 123.456, output: " + floatVal, floatVal.toFixed(3) === "123.456");
1189
1190  // 35. Write FloatLE
1191  buf.writeFloatLE(123.456, 0);
1192  hex = buf.toString('hex');
1193  map.set("testWriteFloatLE, expect: 79e9f642, output: " + hex, hex === "79e9f642");
1194
1195  // 36. Read FloatLE value
1196  floatVal = buf.readFloatLE(0);
1197  map.set("testReadFloatLE, expect: 123.456, output: " + floatVal, floatVal.toFixed(3) === "123.456");
1198
1199  // 37. Write DoubleBE
1200  buf = new FastBuffer(8);
1201  buf.writeDoubleBE(123.456, 0);
1202  hex = buf.toString('hex');
1203  map.set("testWriteDoubleBE, expect: 405edd2f1a9fbe77, output: " + hex, hex === "405edd2f1a9fbe77");
1204
1205  // 38. Read DoubleBE value
1206  let doubleVal = buf.readDoubleBE(0);
1207  map.set("testReadDoubleBE, expect: 123.456, output: " + doubleVal, doubleVal.toFixed(3) === "123.456");
1208
1209  // 39. Write DoubleLE
1210  buf.writeDoubleLE(123.456, 0);
1211  hex = buf.toString('hex');
1212  map.set("testWriteDoubleLE, expect: 77be9f1a2fdd5e40, output: " + hex, hex === "77be9f1a2fdd5e40");
1213
1214  // 40. Read DoubleLE value
1215  doubleVal = buf.readDoubleLE(0);
1216  map.set("testReadDoubleLE, expect: 123.456, output: " + doubleVal, doubleVal.toFixed(3) === "123.456");
1217}
1218{
1219  // 41. Fill entire buffer
1220  let buf = new FastBuffer(5);
1221  buf.fill("A");
1222  map.set("testFillChar, expect: AAAAA, output: " + buf.toString(), buf.toString() === "AAAAA");
1223
1224  // 42. Fill partial buffer
1225  buf.fill("B", 1, 3);
1226  map.set("testFillPartial, expect: ABBAA, output: " + buf.toString(), buf.toString() === "ABBAA");
1227
1228  // 43. Compare buffers (less than)
1229  let buf1 = new FastBuffer("ABC");
1230  let buf2 = new FastBuffer("ABD");
1231  let cmp = buf1.compare(buf2);
1232  map.set("testCompareLess, expect: -1, output: " + cmp, cmp === -1);
1233
1234  // 44. Compare buffers (equal)
1235  buf2 = new FastBuffer("ABC");
1236  cmp = buf1.compare(buf2);
1237  map.set("testCompareEqual, expect: 0, output: " + cmp, cmp === 0);
1238
1239  // 45. Compare buffers (greater than)
1240  buf1 = new FastBuffer("ABD");
1241  cmp = buf1.compare(buf2);
1242  map.set("testCompareGreater, expect: 1, output: " + cmp, cmp === 1);
1243
1244  // 46. Copy between buffers
1245  buf1 = new FastBuffer("12345");
1246  buf2 = new FastBuffer("ABCDE");
1247  buf1.copy(buf2, 1, 1, 3);
1248  map.set("testCopy, expect: A23DE, output: " + buf2.toString(), buf2.toString() === "A23DE");
1249
1250  // 48. Convert to string
1251  buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
1252  map.set("testToString, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
1253
1254  // 49. Convert to Base64
1255  buf = new FastBuffer("A");
1256  map.set("testToStringBase64, expect: QQ==, output: " + buf.toString('base64'), buf.toString('base64') === "QQ==");
1257
1258  // 50. Convert to Hex
1259  buf = new FastBuffer("A");
1260  map.set("testToStringHex, expect: 41, output: " + buf.toString('hex'), buf.toString('hex') === "41");
1261
1262  // 51. IndexOf operation
1263  buf = new FastBuffer("Hello World");
1264  let idx = buf.indexOf("World");
1265  map.set("testIndexOf, expect: 6, output: " + idx, idx === 6);
1266
1267  // 52. LastIndexOf operation
1268  buf = new FastBuffer("Hello World, World");
1269  idx = buf.lastIndexOf("World");
1270  map.set("testLastIndexOf, expect: 13, output: " + idx, idx === 13);
1271
1272  // 53. Includes check
1273  buf = new FastBuffer("Hello");
1274  let has = buf.includes("ell");
1275  map.set("testIncludes, expect: true, output: " + has, has === true);
1276
1277  // 54. Equality check
1278  buf1 = new FastBuffer("ABC");
1279  buf2 = new FastBuffer("ABC");
1280  let isEqual = buf1.equals(buf2);
1281  map.set("testEquals, expect: true, output: " + isEqual, isEqual === true);
1282
1283  // 58. Iterate keys
1284  buf = new FastBuffer("AB");
1285  let keys = Array.from(buf.keys());
1286  map.set("testKeys, expect: 0,1, output: " + keys.join(','), keys.join(',') === "0,1");
1287
1288  // 59. Iterate values
1289  let values = Array.from(buf.values());
1290  map.set("testValues, expect: 65,66, output: " + values.join(','), values.join(',') === "65,66");
1291}
1292{
1293  // 61. Read out-of-bound (UInt8)
1294  let buf = new FastBuffer(1);
1295  try {
1296    buf.readUInt8(1); // Out-of-bound access
1297  } catch (err) {
1298    map.set("testReadUInt8_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1299  }
1300
1301  // 62. Write out-of-bound (UInt8)
1302  try {
1303    buf.writeUInt8(0, 2); // Out-of-bound access
1304  } catch (err) {
1305    map.set("testWriteUInt8_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1306  }
1307
1308  // 63. Read insufficient data (UInt16BE)
1309  try {
1310    buf.readUInt16BE(0); // Buffer too small (needs 2 bytes)
1311  } catch (err) {
1312    map.set("testReadUInt16BE_Insufficient, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1313  }
1314
1315  // 64. Write out-of-bound (UInt16BE)
1316  try {
1317    buf.writeUInt16BE(0xABCD, 1); // Out-of-bound access
1318  } catch (err) {
1319    map.set("testWriteUInt16BE_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1320  }
1321}
1322
1323{
1324  // 1. Create empty FastBuffer and verify length is 0
1325  let buf = new FastBuffer(0);
1326  map.set("testConstructorEmpty, expect: 0, output: " + buf.length, buf.length === 0);
1327}
1328
1329{
1330  // 2. Initialize with size 7 and validate length
1331  let buf = new FastBuffer(7);
1332  map.set("testConstructorSize, expect: 7, output: " + buf.length, buf.length === 7);
1333}
1334
1335{
1336  // 3. Initialize with UTF-8 string "Γειά σου"
1337  let buf = new FastBuffer("Γειά σου");
1338  map.set("testConstructorString, expect: Γειά σου, output: " + buf.toString(), buf.toString() === "Γειά σου");
1339}
1340
1341{
1342  // 4. Initialize from array [0xC0, 0xFF, 0xEE]
1343  let buf = new FastBuffer([0xC0, 0xFF, 0xEE]);
1344  let hex = buf.toString('hex');
1345  map.set("testConstructorArray, expect: c0ffee, output: " + hex, hex === "c0ffee");
1346}
1347
1348{
1349  // 5. Initialize from ArrayBuffer
1350  let arrBuf = new ArrayBuffer(4);
1351  new Uint8Array(arrBuf).set([0xDE, 0xAD, 0xBE, 0xEF]);
1352  let buf = new FastBuffer(arrBuf);
1353  map.set("testConstructorArrayBuffer, expect: deadbeef, output: " + buf.toString('hex'), buf.toString('hex') === "deadbeef");
1354}
1355
1356// ===== READ/WRITE OPERATIONS =====
1357{
1358  // 9. Write UInt8 value 0xF0 at offset 0
1359  let buf = new FastBuffer(1);
1360  buf.writeUInt8(0xF0, 0);
1361  map.set("testWriteUInt8, expect: f0, output: " + buf.toString('hex'), buf.toString('hex') === "f0");
1362}
1363
1364{
1365  // 11. Write Int16LE value -32767 at offset 0
1366  let buf = new FastBuffer(2);
1367  buf.writeInt16LE(-32767, 0);
1368  map.set("testWriteInt16LE, expect: 0180, output: " + buf.toString('hex'), buf.toString('hex') === "0180");
1369}
1370
1371{
1372  // 12. Read Int32BE value 0x7FFFFFFF
1373  let buf = new FastBuffer(4);
1374  buf.writeInt32BE(0x7FFFFFFF, 0);
1375  let val = buf.readInt32BE(0);
1376  map.set("testReadInt32BE, expect: 2147483647, output: " + val, val === 2147483647);
1377}
1378
1379{
1380  // 13. Write FloatLE value -123.456
1381  let buf = new FastBuffer(4);
1382  buf.writeFloatLE(-123.456, 0);
1383  let hex = buf.toString('hex');
1384  map.set("testWriteFloatLE, expect: 79e9f6c2, output: " + hex, hex === "79e9f6c2"); // IEEE754 representation
1385}
1386
1387{
1388  // 14. Read DoubleBE value 1.7976931348623157e+308 (max double)
1389  let buf = new FastBuffer(8);
1390  buf.writeDoubleBE(1.7976931348623157e308, 0);
1391  let val = buf.readDoubleBE(0);
1392  map.set("testReadDoubleBE, expect: 1.7976931348623157e+308, output: " + val, val === 1.7976931348623157e308);
1393}
1394
1395{
1396  // 16. Compare buffers "apple" and "zebra"
1397  let buf1 = new FastBuffer("apple");
1398  let buf2 = new FastBuffer("zebra");
1399  let cmp = buf1.compare(buf2);
1400  map.set("testCompareStrings, expect: -1, output: " + cmp, cmp === -1);
1401}
1402
1403// ===== ENCODING CONVERSION =====
1404{
1405  // 19. Convert to Base64url encoding
1406  let buf = new FastBuffer("✓ test");
1407  let b64url = buf.toString('base64url');
1408  map.set("testToBase64URL, expect: 4pyTIHRlc3Q, output: " + b64url, b64url === "4pyTIHRlc3Q");
1409}
1410
1411{
1412  // 20. Convert hex string "cafebabe" to buffer
1413  let buf = new FastBuffer("cafebabe", 'hex');
1414  map.set("testFromHex, expect: cafebabe, output: " + buf.toString('hex'), buf.toString('hex') === "cafebabe");
1415}
1416
1417// ===== ITERATORS & SEARCH =====
1418{
1419  // 21. Iterate keys of buffer "XYZ"
1420  let buf = new FastBuffer("XYZ");
1421  let keys = Array.from(buf.keys());
1422  map.set("testKeysIter, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
1423}
1424
1425{
1426  // 22. Find last index of "λ" in buffer
1427  let buf = new FastBuffer("αβγδλθλ");
1428  let idx = buf.lastIndexOf("λ");
1429  map.set("testLastIndexOf, expect: 12, output: " + idx, idx === 12);
1430}
1431
1432{
1433  // 23. Write beyond buffer length (should throw)
1434  let buf = new FastBuffer(3);
1435  try {
1436    buf.writeUInt32BE(0x12345678, 0); // Requires 4 bytes
1437  } catch (err) {
1438    map.set("testWriteOOB, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1439  }
1440}
1441
1442{
1443  // 49. Write negative integer to Int32LE
1444  let buf = new FastBuffer(4);
1445  buf.writeInt32LE(-2147483648, 0); // Min int32
1446  let val = buf.readInt32LE(0);
1447  map.set("testWriteMinInt32, expect: -2147483648, output: " + val, val === -2147483648);
1448}
1449
1450{
1451  // 50. Check includes() with partial match
1452  let buf = new FastBuffer("search_term");
1453  let found = buf.includes("term");
1454  map.set("testIncludesPartial, expect: true, output: " + found, found === true);
1455}
1456
1457// Test Case 1: Fill entire buffer with pattern "AB"
1458{
1459    let buf = new FastBuffer(2).fill("AB");
1460    let str = buf.toString();
1461    map.set("testFill0500, expect: AB, output: " + str, str === "AB");
1462}
1463
1464// Test Case 2: Attempt fill with negative offset (should throw)
1465{
1466    try {
1467        let buf = new FastBuffer(4).fill("XY", -2);
1468    } catch (err) {
1469        map.set("testFill0501, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1470        let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: -2';
1471        map.set("testFill0501, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1472    }
1473}
1474
1475// Test Case 3: Attempt fill with end position exceeding buffer length
1476{
1477    try {
1478        let buf = new FastBuffer(3).fill("123", 0, 6);
1479    } catch (err) {
1480        map.set("testFill0502, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1481        let expectMsg = 'The value of "end" is out of range. It must be >= 0 and <= 3. Received value is: 6';
1482        map.set("testFill0502, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1483    }
1484}
1485
1486// Test Case 4: Attempt write with negative offset
1487{
1488    let buf = new FastBuffer(5);
1489    try {
1490        let offset = buf.write("test", -3);
1491    } catch (err) {
1492        map.set("testWrite0503, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1493        let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: -3';
1494        map.set("testWrite0503, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1495    }
1496}
1497
1498// Test Case 5: Attempt write with excessive length parameter
1499{
1500    let buf = new FastBuffer(6);
1501    try {
1502        let offset = buf.write("data", 1, 8);
1503    } catch (err) {
1504        map.set("testWrite0504, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1505        let expectMsg = 'The value of "length" is out of range. It must be >= 0 and <= 5. Received value is: 8';
1506        map.set("testWrite0504, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1507    }
1508}
1509
1510// Test Case 6: Compare buffers with different content
1511{
1512    let buf1 = new FastBuffer("apple");
1513    let buf2 = new FastBuffer("zebra");
1514    let res = buf1.compare(buf2);
1515    map.set("testCompare0505, expect: -1, output: " + res, res === -1);
1516}
1517
1518// Test Case 7: Attempt compare with invalid targetStart
1519{
1520    let buf1 = new FastBuffer("test");
1521    let buf2 = new FastBuffer("test");
1522    try {
1523        let res = buf1.compare(buf2, -5);
1524    } catch (err) {
1525        map.set("testCompare0506, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1526        let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4. Received value is: -5';
1527        map.set("testCompare0506, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1528    }
1529}
1530
1531// Test Case 8: Verify equals() with identical Greek text
1532{
1533    let buf1 = new FastBuffer("Γειά σου");
1534    let buf2 = new FastBuffer("Γειά σου");
1535    let res = buf1.equals(buf2);
1536    map.set("testEquals0507, expect: true, output: " + res, res === true);
1537}
1538
1539// Test Case 9: Verify equals() with different symbols
1540{
1541    let buf1 = new FastBuffer("@#$");
1542    let buf2 = new FastBuffer("!@#");
1543    let res = buf1.equals(buf2);
1544    map.set("testEquals0508, expect: false, output: " + res, res === false);
1545}
1546
1547// Test Case 10: Copy entire buffer content
1548{
1549    let buf1 = new FastBuffer("source");
1550    let buf2 = new FastBuffer(6);
1551    let num = buf1.copy(buf2);
1552    map.set("testCopy0509, expect: 6, output: " + num, num === 6);
1553    let str = buf2.toString();
1554    map.set("testCopy0509, expect: source, output: " + str, str === "source");
1555}
1556
1557// Test Case 11: Copy partial content with offsets
1558{
1559    let buf1 = new FastBuffer("abcdef");
1560    let buf2 = new FastBuffer("123456");
1561    let num = buf1.copy(buf2, 1, 2, 4);
1562    map.set("testCopy0510, expect: 2, output: " + num, num === 2);
1563    let str = buf2.toString();
1564    map.set("testCopy0510, expect: 1cd456, output: " + str, str === "1cd456");
1565}
1566
1567// Test Case 12: Attempt copy with invalid targetStart
1568{
1569    let buf1 = new FastBuffer("data");
1570    let buf2 = new FastBuffer("1234");
1571    try {
1572        let num = buf1.copy(buf2, -10);
1573    } catch (err) {
1574        map.set("testCopy0511, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
1575        let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4294967295. Received value is: -10';
1576        map.set("testCopy0511, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1577    }
1578}
1579
1580// Test Case 13: Convert buffer to UTF-8 string
1581{
1582    let buf = new FastBuffer("Hello 世界");
1583    let str = buf.toString();
1584    map.set("testToString0512, expect: Hello 世界, output: " + str, str === "Hello 世界");
1585}
1586
1587// Test Case 14: Convert buffer to Base64 encoding
1588{
1589    let buf = new FastBuffer("base64");
1590    let str = buf.toString("base64");
1591    map.set("testToString0513, expect: YmFzZTY0, output: " + str, str === "YmFzZTY0");
1592}
1593
1594// Test Case 15: Convert buffer to Hex encoding
1595{
1596    let buf = new FastBuffer("hex");
1597    let str = buf.toString("hex");
1598    map.set("testToString0514, expect: 686578, output: " + str, str === "686578");
1599}
1600
1601// Test Case 17: Find last index of character
1602{
1603    let buf = new FastBuffer("a,b,c,d,e");
1604    let index = buf.lastIndexOf(",");
1605    map.set("testLastIndexOf0516, expect: 7, output: " + index, index === 7);
1606}
1607
1608// Test Case 18: Check if buffer includes substring
1609{
1610    let buf = new FastBuffer("search result");
1611    let flag = buf.includes("result");
1612    map.set("testIncludes0517, expect: true, output: " + flag, flag === true);
1613}
1614
1615// Test Case 19: Iterate buffer keys
1616{
1617    let buf = new FastBuffer("ABC");
1618    let keys = Array.from(buf.keys());
1619    map.set("testKeys0518, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
1620}
1621
1622// Test Case 20: Iterate buffer values
1623{
1624    let buf = new FastBuffer("ABC");
1625    let values = Array.from(buf.values());
1626    map.set("testValues0519, expect: 65,66,67, output: " + values.join(','), values.join(',') === "65,66,67");
1627}
1628
1629// Test Case 21: Initialize from array buffer
1630{
1631    let arr = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
1632    let buf = new FastBuffer(arr.buffer);
1633    map.set("testFrom0520, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
1634}
1635
1636// Test Case 24: Write FloatLE value
1637{
1638    let buf = new FastBuffer(4);
1639    buf.writeFloatLE(-65.432, 0);
1640    let hex = buf.toString('hex');
1641    map.set("testWriteFloatLE0523, expect: 2fdd82c2, output: " + hex, hex === "2fdd82c2");
1642}
1643
1644// Test Case 25: Read FloatBE value
1645{
1646    let buf = new FastBuffer([0x42, 0x8A, 0x3D, 0x71]);
1647    let val = buf.readFloatBE(0);
1648    map.set("testReadFloatBE0524, expect: 69.12, output: " + val, val.toFixed(2) === "69.12");
1649}
1650
1651// Test Case 26: Create empty buffer
1652{
1653    let buf = new FastBuffer(0);
1654    map.set("testConstructor0525, expect: 0, output: " + buf.length, buf.length === 0);
1655}
1656
1657// Test Case 27: Initialize with specific size
1658{
1659    let buf = new FastBuffer(10);
1660    map.set("testConstructor0526, expect: 10, output: " + buf.length, buf.length === 10);
1661}
1662
1663// Test Case 28: Initialize with emoji string
1664{
1665    let buf = new FastBuffer("����");
1666    map.set("testConstructor0527, expect: ����, output: " + buf.toString(), buf.toString() === "����");
1667}
1668
1669// Test Case 29: Initialize from numeric array
1670{
1671    let buf = new FastBuffer([0x31, 0x32, 0x33]);
1672    map.set("testConstructor0528, expect: 123, output: " + buf.toString(), buf.toString() === "123");
1673}
1674
1675// Test Case 30: Copy between buffers with overlap
1676{
1677    let buf = new FastBuffer("ABCDEF");
1678    buf.copy(buf, 2, 0, 3);
1679    map.set("testCopy0529, expect: ABABCF, output: " + buf.toString(), buf.toString() === "ABABCF");
1680}
1681
1682// Test Case 31: Convert to Latin1 encoding
1683{
1684    let buf = new FastBuffer([0xC0, 0xFF, 0xEE]);
1685    let str = buf.toString("latin1");
1686    map.set("testToString0530, expect: Àÿî, output: " + str, str === "Àÿî");
1687}
1688
1689// Test Case 32: Find index with start position
1690{
1691    let buf = new FastBuffer("banana");
1692    let index = buf.indexOf("na", 3);
1693    map.set("testIndexOf0531, expect: 4, output: " + index, index === 4);
1694}
1695
1696// Test Case 33: Check includes with offset
1697{
1698    let buf = new FastBuffer("programming");
1699    let flag = buf.includes("gram", 3);
1700    map.set("testIncludes0532, expect: true, output: " + flag, flag === true);
1701}
1702
1703// Test Case 34: Write UInt16LE value
1704{
1705    let buf = new FastBuffer(2);
1706    buf.writeUInt16LE(0xABCD, 0);
1707    map.set("testWriteUInt16LE0533, expect: cdab, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
1708}
1709
1710// Test Case 35: Read Int16BE value
1711{
1712    let buf = new FastBuffer([0x12, 0x34]);
1713    let val = buf.readInt16BE(0);
1714    map.set("testReadInt16BE0534, expect: 4660, output: " + val, val === 4660);
1715}
1716
1717// Test Case 39: Create from hex string
1718{
1719    let buf = new FastBuffer("cafebabe", "hex");
1720    map.set("testFromHex0538, expect: cafebabe, output: " + buf.toString('hex'), buf.toString('hex') === "cafebabe");
1721}
1722
1723// Test Case 43: Fill buffer with numeric value
1724{
1725    let buf = new FastBuffer(3);
1726    buf.fill(65); // ASCII 'A'
1727    map.set("testFill0542, expect: AAA, output: " + buf.toString(), buf.toString() === "AAA");
1728}
1729
1730// Test Case 46: Find index of non-existent substring
1731{
1732    let buf = new FastBuffer("content");
1733    let index = buf.indexOf("xyz");
1734    map.set("testIndexOf0545, expect: -1, output: " + index, index === -1);
1735}
1736
1737// Test Case 47: Check includes with special characters
1738{
1739    let buf = new FastBuffer("100% ✓");
1740    let flag = buf.includes("% ✓");
1741    map.set("testIncludes0546, expect: true, output: " + flag, flag === true);
1742}
1743
1744// Test Case 48: Iterate buffer entries
1745{
1746    let buf = new FastBuffer("AB");
1747    let entries = Array.from(buf.entries());
1748    let entriesStr = entries.map(e => e.join(':')).join(';');
1749    map.set("testEntries0547, expect: 0:65;1:66, output: " + entriesStr, entriesStr === "0:65;1:66");
1750}
1751
1752// Test Case 49: Write DoubleLE value
1753{
1754    let buf = new FastBuffer(8);
1755    buf.writeDoubleLE(123.456, 0);
1756    let hex = buf.toString('hex');
1757    map.set("testWriteDoubleLE0548, expect: 77be9f1a2fdd5e40, output: " + hex, hex === "77be9f1a2fdd5e40");
1758}
1759
1760// Test Case 50: Read UInt32LE value
1761{
1762    let buf = new FastBuffer([0x78, 0x56, 0x34, 0x12]);
1763    let val = buf.readUInt32LE(0);
1764    map.set("testReadUInt32LE0549, expect: 305419896, output: " + val, val === 305419896);
1765}
1766
1767// ===== fill() =====
1768{
1769  // 1. Fill with Unicode characters
1770  let buf = new FastBuffer(12).fill("★");
1771  let str = buf.toString();
1772  map.set("testFill1001, expect: ★★★★, output: " + str, str === "★★★★");
1773}
1774
1775{
1776  // 2. Fill partial buffer with multi-byte character
1777  let buf = new FastBuffer(5).fill("€", 1, 4);
1778  let str = buf.toString();
1779  map.set("testFill1002, expect: \0€\0, output: " + str, str === "\0€\0");
1780}
1781
1782{
1783  // 3. Fill empty buffer (no-op)
1784  let buf = new FastBuffer(0).fill("X");
1785  map.set("testFill1003, expect: 0, output: " + buf.length, buf.length === 0);
1786}
1787
1788// ===== write() =====
1789{
1790  // 1. Write with offset exceeding buffer length
1791  let buf = new FastBuffer(5);
1792  try {
1793    buf.write("data", 6);
1794  } catch (err) {
1795    let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: 6';
1796    map.set("testWrite1004, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
1797  }
1798}
1799
1800{
1801  // 2. Write partial UTF-8 string
1802  let buf = new FastBuffer(10);
1803  buf.write("汉字测试", 2, 3);
1804  map.set("testWrite1005, expect: 汉, output: " + buf.toString(), buf.toString().includes("汉"));
1805}
1806
1807{
1808  // 3. Write exact buffer capacity
1809  let buf = new FastBuffer(5);
1810  let written = buf.write("12345");
1811  map.set("testWrite1006, expect: 5, output: " + written, written === 5);
1812}
1813
1814// ===== compare() =====
1815{
1816  // 1. Compare buffers with Unicode equality
1817  let buf1 = new FastBuffer("αβγ");
1818  let buf2 = new FastBuffer("αβγ");
1819  let res = buf1.compare(buf2);
1820  map.set("testCompare1007, expect: 0, output: " + res, res === 0);
1821}
1822
1823{
1824  // 2. Compare buffers with different lengths
1825  let buf1 = new FastBuffer("apple");
1826  let buf2 = new FastBuffer("app");
1827  let res = buf1.compare(buf2);
1828  map.set("testCompare1008, expect: 1, output: " + res, res === 1);
1829}
1830
1831{
1832  // 3. Compare buffers with target offset
1833  let buf1 = new FastBuffer("xyz");
1834  let buf2 = new FastBuffer("abcxyz");
1835  let res = buf1.compare(buf2, 3);
1836  map.set("testCompare1009, expect: 0, output: " + res, res === 0);
1837}
1838
1839// ===== equals() =====
1840{
1841  // 2. Compare different encoding representations
1842  let buf1 = new FastBuffer("café", "utf8");
1843  let buf2 = new FastBuffer("café", "latin1");
1844  let res = buf1.equals(buf2);
1845  map.set("testEquals1011, expect: false, output: " + res, res === false);
1846}
1847
1848{
1849  // 3. Compare buffers with same content but different memory
1850  let buf1 = new FastBuffer("clone");
1851  let buf2 = new FastBuffer(buf1);
1852  let res = buf1.equals(buf2);
1853  map.set("testEquals1012, expect: true, output: " + res, res === true);
1854}
1855
1856// ===== copy() =====
1857{
1858  // 1. Copy to offset position
1859  let buf1 = new FastBuffer("XYZ");
1860  let buf2 = new FastBuffer("ABCDEF");
1861  buf1.copy(buf2, 2);
1862  map.set("testCopy1013, expect: ABXYZF, output: " + buf2.toString(), buf2.toString() === "ABXYZF");
1863}
1864
1865{
1866  // 2. Copy with source range
1867  let buf1 = new FastBuffer("123456");
1868  let buf2 = new FastBuffer("ABCDEF");
1869  buf1.copy(buf2, 1, 2, 5);
1870  map.set("testCopy1014, expect: A345EF, output: " + buf2.toString(), buf2.toString() === "A345EF");
1871}
1872
1873{
1874  // 3. Copy empty buffer
1875  let buf1 = new FastBuffer("");
1876  let buf2 = new FastBuffer("test");
1877  let num = buf1.copy(buf2);
1878  map.set("testCopy1015, expect: 0, output: " + num, num === 0);
1879}
1880
1881// ===== toString() =====
1882{
1883  let buf = new FastBuffer("中文");
1884  let str = buf.toString();
1885  map.set("testToString1016, expect: 中文, output: " + str, str === "中文");
1886}
1887
1888{
1889  // 2. Convert binary data to hex
1890  let buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
1891  let str = buf.toString("hex");
1892  map.set("testToString1017, expect: 48656c6c6f, output: " + str, str === "48656c6c6f");
1893}
1894
1895{
1896  // 3. Convert to Base64URL
1897  let buf = new FastBuffer("safe<>");
1898  let str = buf.toString("base64url");
1899  map.set("testToString1018, expect: c2FmZTw-, output: " + str, str === "c2FmZTw-");
1900}
1901
1902// ===== indexOf() =====
1903{
1904  let buf = new FastBuffer("寻找汉字");
1905  let idx = buf.indexOf("汉字");
1906  map.set("testIndexOf1019, expect: 6, output: " + idx, idx === 6);
1907}
1908
1909{
1910  // 2. Search non-existent binary pattern
1911  let buf = new FastBuffer([0x01, 0x02, 0x03]);
1912  let idx = buf.indexOf("\x04");
1913  map.set("testIndexOf1020, expect: -1, output: " + idx, idx === -1);
1914}
1915
1916{
1917  // 3. Search with start position beyond buffer
1918  let buf = new FastBuffer("test");
1919  let idx = buf.indexOf("t", 5);
1920  map.set("testIndexOf1021, expect: -1, output: " + idx, idx === -1);
1921}
1922
1923// ===== lastIndexOf() =====
1924{
1925  // 1. Find last occurrence in mixed content
1926  let buf = new FastBuffer("a1b2c3d4e5");
1927  let idx = buf.lastIndexOf("3");
1928  map.set("testLastIndexOf1022, expect: 5, output: " + idx, idx === 5);
1929}
1930
1931{
1932  // 2. Multi-byte character search
1933  let buf = new FastBuffer("€10€20€30");
1934  let idx = buf.lastIndexOf("€");
1935  map.set("testLastIndexOf1023, expect: 10, output: " + idx, idx === 10);
1936}
1937
1938{
1939  // 3. Search with negative start position
1940  let buf = new FastBuffer("test");
1941  let idx = buf.lastIndexOf("t", -5);
1942  map.set("testLastIndexOf1024, expect: -1, output: " + idx, idx === -1);
1943}
1944
1945// ===== includes() =====
1946{
1947  // 2. Check empty buffer
1948  let buf = new FastBuffer("");
1949  let flag = buf.includes("data");
1950  map.set("testIncludes1026, expect: false, output: " + flag, flag === false);
1951}
1952
1953{
1954  // 3. Check partial match at boundary
1955  let buf = new FastBuffer("boundary");
1956  let flag = buf.includes("ary", 5);
1957  map.set("testIncludes1027, expect: true, output: " + flag, flag === true);
1958}
1959
1960// ===== keys() =====
1961{
1962  // 1. Iterate empty buffer keys
1963  let buf = new FastBuffer(0);
1964  let keys = Array.from(buf.keys());
1965  map.set("testKeys1028, expect: , output: " + keys.join(','), keys.join(',') === "");
1966}
1967
1968{
1969  // 2. Iterate large buffer keys
1970  let buf = new FastBuffer(1000);
1971  let keyCount = 0;
1972  for (const key of buf.keys()) keyCount++;
1973  map.set("testKeys1029, expect: 1000, output: " + keyCount, keyCount === 1000);
1974}
1975
1976{
1977  // 3. Verify key order
1978  let buf = new FastBuffer("ABC");
1979  let keys = Array.from(buf.keys());
1980  map.set("testKeys1030, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
1981}
1982
1983// ===== values() =====
1984{
1985  // 1. Iterate binary data values
1986  let buf = new FastBuffer([0x00, 0xFF, 0x7F]);
1987  let values = Array.from(buf.values());
1988  map.set("testValues1031, expect: 0,255,127, output: " + values.join(','), values.join(',') === "0,255,127");
1989}
1990
1991{
1992  // 2. Verify Unicode code points
1993  let buf = new FastBuffer("Ω");
1994  let values = Array.from(buf.values());
1995  map.set("testValues1032, expect: 206,169, output: " + values.join(','), values.join(',') === "206,169");
1996}
1997
1998{
1999  // 3. Empty buffer values
2000  let buf = new FastBuffer(0);
2001  let values = Array.from(buf.values());
2002  map.set("testValues1033, expect: , output: " + values.join(','), values.join(',') === "");
2003}
2004
2005
2006    {
2007        let size = 10;
2008        let buf = new FastBuffer(size);
2009        map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0001 failed, buffer length:" + buf.length, buf.length === 10);
2010    }
2011
2012    {
2013        try {
2014            let size = UINT32_MAX + 1;
2015            let buf = new FastBuffer(size);
2016            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0002 failed", false);
2017        } catch (e) {
2018            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0002 failed, error code:" + e.code, e.code === 10200001);
2019        }
2020    }
2021
2022    {
2023        try {
2024            let buf = new FastBuffer(null);
2025            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0003 failed", false);
2026        } catch (e) {
2027            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0003 failed, error code:" + e.code, e.code === 401);
2028        }
2029    }
2030
2031    {
2032        try {
2033            let buf = new FastBuffer(10);
2034            buf.fill(' ');
2035            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0004 failed, buffer length:" + buf.length, buf.length === 10);
2036        } catch (e) {
2037            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0004 failed, error code:" + e.code, false);
2038        }
2039    }
2040
2041    {
2042        try {
2043            let buf = new FastBuffer(10);
2044            buf.fill(null);
2045            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0005 failed, buffer length:" + buf.length, buf.length === 10);
2046        } catch (e) {
2047            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0005 failed, error code:" + e.code, false);
2048        }
2049    }
2050
2051    {
2052        try {
2053            let buf1 = new FastBuffer(10);
2054            let buf = new FastBuffer(10);
2055            buf.fill(buf1);
2056            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0006 failed, buffer length:" + buf.length, buf.length === 10);
2057        } catch (e) {
2058            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0006 failed, error code:" + e.code, false);
2059        }
2060    }
2061
2062    {
2063        try {
2064            let buf = new FastBuffer(10);
2065            buf.fill("ab$#", 0, 10, null);
2066            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0007 failed, buffer length:" + buf.length, buf.length === 10);
2067        } catch (e) {
2068            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0007 failed, error code:" + e.code, false);
2069        }
2070    }
2071
2072    {
2073        try {
2074            let buf = new FastBuffer(0);
2075            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0008 failed, buffer length:" + buf.length, buf.length === 0);
2076        } catch (e) {
2077            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0008 failed, error code:" + e.code, false);
2078        }
2079    }
2080
2081    {
2082        try {
2083            let buf1 = new FastBuffer(10);
2084            let buf = new FastBuffer(0);
2085            buf.fill(buf1);
2086            let flag = new FastBuffer(0);
2087            flag.fill(buf);
2088            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0009 failed, flag length:" + flag.length, flag.length === 0);
2089        } catch (e) {
2090            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0009 failed, error code:" + e.code, false);
2091        }
2092    }
2093
2094    {
2095        try {
2096            let buf = new FastBuffer(-5);
2097            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0010 failed", false);
2098        } catch (e) {
2099            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0010 failed, error code:" + e.code, e.code === 10200001);
2100        }
2101    }
2102
2103    {
2104        try {
2105            let buf = new FastBuffer(5.5);
2106            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0011 failed, buffer length:", buf.length === 5);
2107        } catch (e) {
2108            map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0011 failed, error code:" + e.code, false);
2109        }
2110    }
2111
2112    let flag = undefined;
2113    function elements(value, key, map) {
2114        if (!value) {
2115            if (!flag) {
2116                flag = [];
2117            }
2118            flag.push(key);
2119        }
2120    }
2121    map.forEach(elements);
2122    if (!flag) {
2123        print("Test Buffer success!!!");
2124    } else {
2125        print("Test Buffer fail: " + flag);
2126    }
2127}
2128export let bufferRes = "Test Buffer done";
2129