* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var FastBuffer = undefined;
let encodeArr = ['utf8', 'utf-8', 'ucs2', 'ucs-2', 'ascii', 'latin1', 'binary',
'utf16le', 'utf-16le', 'base64', 'base64url', 'hex'];
const UINT32_MAX = 2 ** 32 - 1;
function normalizeEncoding(enc) {
enc = enc.toLowerCase();
if (enc === 'ucs2' || enc === 'ucs-2' || enc === 'utf-16le') {
enc = 'utf16le';
}
if (enc === 'utf-8') {
enc = 'utf8';
}
return enc;
}
if (globalThis["ArkPrivate"] != undefined) {
let map = new Map();
FastBuffer = ArkPrivate.Load(ArkPrivate.FastBuffer);
{
let buf2 = new FastBuffer(10);
buf2.fill('F1刘FG', 0, 10, 'ascii');
let str = buf2.toString("hex");
map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
let buf3 = new FastBuffer(10);
buf3.fill('F1FG', 0, 10, 'base64');
str = buf3.toString("hex");
map.set("buffer.fill() failed, expect: 17514617514617514617, output: " + str, str === "17514617514617514617");
let buf4 = new FastBuffer(10);
buf4.fill('F1刘FG', 0, 10, 'binary');
str = buf4.toString("hex");
map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
let buf5 = new FastBuffer(10);
buf5.fill('F1刘FG', 0, 10, 'latin1');
str = buf5.toString("hex");
map.set("buffer.fill() failed, expect: 46311846474631184647, output: " + str, str === "46311846474631184647");
let buf6 = new FastBuffer(10);
buf6.fill('F1刘FG', 0, 10, normalizeEncoding('ucs2'));
str = buf6.toString("hex");
map.set("buffer.fill() failed, expect: 46003100185246004700, output: " + str, str === "46003100185246004700");
let buf7 = new FastBuffer(10);
buf7.fill('F1刘FG', 0, 10, 'utf8');
str = buf7.toString("hex");
map.set("buffer.fill() failed, expect: 4631e5889846474631e5, output: " + str, str === "4631e5889846474631e5");
}
{
let uint8array = new Uint8Array(10).fill(0);
let buf = new FastBuffer([1, 2, 3, 4, 5, 6, 7]);
let num = buf.copy(uint8array, 0, 3);
map.set("buffer.copy() failed, expect num: 4, output: " + num, num === 4);
let str = uint8array.toString();
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");
}
{
let latin1str = '¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ';
let strbuf = new FastBuffer(latin1str, "latin1");
let toStr = strbuf.toString("latin1");
map.set("buffer create and tostring latin1 failed, expect: " + latin1str + ", output: " + toStr, toStr === latin1str);
}
{
let buf = new FastBuffer(10);
let buf1 = new FastBuffer(10);
buf1.fill('!');
for (let i = 0; i < 10; i++) {
buf[i] = i + 97;
}
let len = buf.copy(buf1, 0, 4, 10);
let str = buf1.toString();
map.set("buffer.copy() failed, expect len: 6, output: " + len, len === 6);
map.set("buffer.copy() failed, expect str: efghij!!!!, output: " + str, str === "efghij!!!!");
}
{
let buf = new FastBuffer(10);
for (let i = 0; i < 10; i++) {
buf[i] = i + 97;
}
let len = buf.copy(buf, 2);
map.set("buffer.copy() failed, expect len: 8, output: " + len, len === 8);
let str = buf.toString();
map.set("buffer.copy() failed, expect str: ababcdefgh, output: " + str, str === "ababcdefgh");
}
{
let buf1 = new FastBuffer("123656");
let buf2 = new FastBuffer("1235");
let num = buf1.copy(buf2);
let str = buf2.toString();
map.set("buffer.copy() failed, expect num: 4, output: " + num, num === 4);
map.set("buffer.copy() failed, expect str: 1236, output: " + str, str === "1236");
}
{
let buf1 = new FastBuffer("测试一");
let buf2 = new FastBuffer("测试二");
let res = buf1.compare(buf2);
map.set("buffer.comapre() failed, expect res: -1, output: " + res, res === -1);
}
{
let buf1 = new FastBuffer("1236测试");
let buf2 = new FastBuffer("1236测试");
let res = buf1.equals(buf2);
map.set("buffer.equals() failed, expect res: true, output: " + res, res === true);
}
{
let buf1 = new FastBuffer("测试特殊字符$#@!");
let flag = buf1.includes("#@");
map.set("buffer.includes() failed, expect flag: true, output: " + flag, flag === true);
flag = buf1.includes("测试");
map.set("buffer.includes() failed, expect flag: true, output: " + flag, flag === true);
}
{
let buf1 = new FastBuffer("测试特殊字符$#@!");
let index = buf1.indexOf("@");
map.set("buffer.indexOf() failed, expect index: 20, output: " + index, index === 20);
}
{
let buf = new FastBuffer('this buffer is a buffer');
let index = buf.lastIndexOf('buffer', -4);
map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
index = buf.lastIndexOf('buffer', -5);
map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
index = buf.lastIndexOf('buffer', -7);
map.set("buffer.indexOf() failed, expect index: 5, output: " + index, index === 5);
index = buf.lastIndexOf('buffer', 1);
map.set("buffer.indexOf() failed, expect index: -1, output: " + index, index === -1);
index = buf.lastIndexOf('buffer', 9999);
map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
index = buf.lastIndexOf('buffer', -999);
map.set("buffer.indexOf() failed, expect index: -1, output: " + index, index === -1);
index = buf.lastIndexOf('buffer');
map.set("buffer.indexOf() failed, expect index: 17, output: " + index, index === 17);
}
{
let uarr = new Uint8Array(4);
uarr[0] = 0x31;
uarr[1] = 0x32;
uarr[2] = 0x33;
uarr[3] = 0x34;
let buf1 = new FastBuffer(uarr);
let keys = buf1.keys();
let index = 0;
for (const key of keys) {
map.set("buffer.keys() failed, expect index: " + key +", output: " + index, index === key);
index++;
}
}
{
let uarr = new Uint8Array(4);
uarr[0] = 0x31;
uarr[1] = 0x32;
uarr[2] = 0x33;
uarr[3] = 0x34;
let buf1 = new FastBuffer(uarr);
let values = buf1.values();
let va = 0x31;
for (const value of values) {
map.set("buffer.values() failed, expect value: " + va +", output: " + value, value === va);
va++;
}
}
{
let buf1 = new FastBuffer("1234");
let entries = buf1.entries();
let va = 49, index = 0;
for (const [key, value] of entries) {
map.set("buffer.entries() failed, expect key: " + index +", output: " + key, key === index);
map.set("buffer.entries() failed, expect value: " + va +", output: " + value, value === va);
va++;
index++;
}
}
{
let buf = new FastBuffer('this buffer is a buffer');
let res = buf.lastIndexOf('buffer', -4);
map.set("buffer.lastIndexOf() failed, expect: 17, output: " + res, res === 17);
}
{
let buf = new FastBuffer(8);
buf.writeUInt8(123);
let res = buf.readUInt8(0);
map.set("buffer.writeUInt8() failed, expect: 123, output: " + res, res === 123);
buf.writeUInt16BE(100, 0);
res = buf.readUInt16BE(0);
map.set("buffer.readUInt16BE() failed, expect: 100, output: " + res, res === 100);
buf.writeUInt16LE(100, 0);
res = buf.readUInt16LE(0);
map.set("buffer.readUInt16LE() failed, expect: 100, output: " + res, res === 100);
buf.writeUInt32BE(100, 0);
res = buf.readUInt32BE(0);
map.set("buffer.writeUInt32BE() failed, expect: 100, output: " + res, res === 100);
buf.writeUInt32LE(100, 0);
res = buf.readUInt32LE(0);
map.set("buffer.writeUInt32LE() failed, expect: 100, output: " + res, res === 100);
buf.writeUIntBE(100, 2, 6);
res = buf.readUIntBE(2, 6);
map.set("buffer.writeUIntBE() failed, expect: 100, output: " + res, res === 100);
buf.writeUIntLE(100, 2, 6);
res = buf.readUIntLE(2, 6);
map.set("buffer.writeUIntLE() failed, expect: 100, output: " + res, res === 100);
buf.writeInt8(123);
res = buf.readInt8(0);
map.set("buffer.writeInt8() failed, expect: 123, output: " + res, res === 123);
buf.writeInt16BE(100, 0);
res = buf.readInt16BE(0);
map.set("buffer.readInt16BE() failed, expect: 100, output: " + res, res === 100);
buf.writeInt16LE(100, 0);
res = buf.readInt16LE(0);
map.set("buffer.readInt16LE() failed, expect: 100, output: " + res, res === 100);
buf.writeInt32BE(100, 0);
res = buf.readInt32BE(0);
map.set("buffer.writeInt32BE() failed, expect: 100, output: " + res, res === 100);
buf.writeInt32LE(100, 0);
res = buf.readInt32LE(0);
map.set("buffer.writeInt32LE() failed, expect: 100, output: " + res, res === 100);
buf.writeIntBE(100, 2, 6);
res = buf.readIntBE(2, 6);
map.set("buffer.writeIntBE() failed, expect: 100, output: " + res, res === 100);
buf.writeIntLE(100, 2, 6);
res = buf.readIntLE(2, 6);
map.set("buffer.writeIntLE() failed, expect: 100, output: " + res, res === 100);
const eps = 1e-3;
const eeps = 1e-6;
buf.writeFloatBE(114.514, 0);
map.set("buffer.writeFloatBE() failed", Math.abs(buf.readFloatBE(0) - 114.514) < eps);
buf.writeFloatLE(114.514, 0);
map.set("buffer.writeFloatLE() failed", Math.abs(buf.readFloatLE(0) - 114.514) < eps);
buf.writeDoubleBE(114.5141919, 0);
map.set("buffer.writeDoubleBE() failed", Math.abs(buf.readDoubleBE(0) - 114.5141919) < eeps);
buf.writeDoubleLE(114.5141919, 0);
map.set("buffer.writeDoubleLE() failed", Math.abs(buf.readDoubleLE(0) - 114.5141919) < eeps);
}
{
let buf = new FastBuffer(20);
map.set("buffer.length:", buf.length == 20);
}
{
let buf = new FastBuffer(20);
buf.fill("abc");
let flag = true;
for (let i = 0; i + 3 < buf.length; i += 3) {
let str = buf.toString("utf8", i, i + 3);
if (str !== "abc") {
flag = false;
}
}
map.set("buffer.fill(string):", flag);
}
{
let buf = new FastBuffer(20);
buf.fill(123);
let flag = true;
for (let i = 0; i < buf.length; i ++) {
if (buf.readInt8(i) !== 123) {
flag = false;
}
}
map.set("buffer.fill(number):", flag);
}
{
let buf = new FastBuffer(20);
let buff = new FastBuffer(20);
buff.fill("abc");
buf.fill(buff);
let flag = true;
for (let i = 0; i + 3 < buf.length; i += 3) {
let str = buf.toString("utf8", i, i + 3);
if (str !== "abc") {
flag = false;
}
}
map.set("buffer.fill(FastBuffer):", flag);
}
{
let buf = new FastBuffer(20);
let typeArray = new Uint8Array([1,2,3,4,5]);
buf.fill(typeArray);
let flag = true;
for (let i = 0; i < buf.length; i++) {
if (buf.readInt8(i) !== typeArray[i % 5]) {
flag = false;
}
}
map.set("buffer.fill(Uint8Array):", flag);
}
{
let buf1 = new FastBuffer("hello world", 'utf8');
buf1.copy(buf1);
let buf2 = new FastBuffer(20);
buf1.copy(buf2);
map.set("buffer.copy() failed", buf1.compare(buf2, 0, 11) === 0);
}
{
let buf1 = new FastBuffer("hello world", 'utf8');
let array = new Uint8Array(11);
buf1.copy(array)
map.set("buffer.copy() failed", buf1.compare(array, 0, 11) === 0);
map.set("buffer.equals() failed", buf1.equals(array));
}
{
let buf1 = new FastBuffer("hello world", 'utf8');
map.set("buffer.includes(string) failed", buf1.includes("hello"));
let buf2 = new FastBuffer(" hello world", 'utf8');
map.set("buffer.includes(string) failed", buf2.includes("hello"));
}
{
let buf1 = new FastBuffer(10);
buf1.writeUInt8(114, 0);
buf1.writeUInt8(514 & 255, 1);
map.set("buffer.includes(number) failed", buf1.includes(114));
map.set("buffer.includes(number) failed", buf1.includes(514 & 255));
}
{
let buf1 = new FastBuffer(10);
buf1.writeUInt8(114, 0);
buf1.writeUInt8(514 & 255, 1);
let buf2 = new FastBuffer(10);
buf2.writeUInt8(114, 0);
map.set("buffer.includes(buffer) failed", !buf1.includes(buf2));
let buf3 = new FastBuffer(1);
buf3.writeUInt8(114, 0);
map.set("buffer.includes(buffer) failed", buf1.includes(buf3));
}
{
let temp = new FastBuffer(15);
temp.write("aGVsbG8gd29ybGQh", 0, 12, "base64");
let str = temp.toString('utf-8', 0, 12);
map.set("buffer.write(str, 'base64') failed", str === "hello world!");
for (const [key, value] of temp.entries()) {
if (key >= str.length) {
break;
}
if (str[key] != String.fromCharCode(value)) {
map.set("buffer.entries() failed", false);
break;
}
}
}
{
let temp = new FastBuffer("hello world hello", "utf8");
let index = temp.indexOf('hello');
map.set("buffer.indexOf() failed", index === 0);
index = temp.lastIndexOf('hello');
map.set("buffer.lastIndexOf() failed", index === 12);
index = temp.indexOf('www');
map.set("buffer.indexOf() failed", index === -1);
index = temp.indexOf('');
map.set("buffer.indexOf() failed", index === -1);
let flag = temp.includes("hello");
map.set("buffer.indexOf() failed", flag);
}
{
let array = [1,2,3,4,5];
let temp = new FastBuffer(array);
for (let i = 0; i < array.length; i++) {
if(temp[i] != array[i]) {
map.set("buffer.from(array) failed", false);
break;
}
}
}
{
let str = "hello world";
let temp = new FastBuffer(str, "utf8");
for (let i = 0; i < str.length; i++) {
if(String.fromCharCode(temp[i]) != str[i]) {
map.set("buffer.from(str) failed", false);
break;
}
}
}
{
let typeArray = new Uint8Array([1,2,3,4,5]);
let temp = new FastBuffer(typeArray);
map.set("buffer.from(UInt8Array) failed", temp.buffer === typeArray.buffer);
for (let i = 0; i < temp.length; i++) {
if(temp[i] != typeArray[i]) {
map.set("buffer.from(UInt8Array) failed", false);
break;
}
}
}
{
let array = [114,514,1919,810];
let temp = new FastBuffer(array);
for (let i = 0; i < array.length; i++) {
if(temp.readInt8(i) != (array[i] & 255)) {
map.set("buffer.from(array) failed", false);
break;
}
}
}
{
let buf1 = new FastBuffer("abcd", "utf8");
let buf2 = new FastBuffer("bcde", "utf8");
map.set("buffer.compare(target) failed", (buf1.compare(buf2) == -1) == ("abcd" < "bcde"));
map.set("buffer.compare(target) failed", (buf2.compare(buf1) == 1) == ("abcd" > "bcde"));
let buf3 = new FastBuffer("abcde", "utf8");
map.set("buffer.compare(target) failed", (buf1.compare(buf3) == 1) == ("abcd" < "abcde"));
map.set("buffer.compare(target) failed", (buf1.compare(buf1) == 0) == ("abcd" == "abcd"));
}
{
const buf1 = new FastBuffer('1234', 'utf8');
const buf2 = new FastBuffer('0123', 'utf8');
map.set("buffer.compare() failed", buf1.compare(buf2) === 1);
}
{
let buf1 = new FastBuffer("abcd", 'utf8');
map.set("buffer.toJson() failed", JSON.stringify(buf1) === "{\"0\":97,\"1\":98,\"2\":99,\"3\":100}");
}
{
let buf = new FastBuffer(12);
let src = "hello world!";
let srcBase64 = "aGVsbG8gd29ybGQh";
buf.write(src);
map.set("buf.toString failed", buf.toString() === src);
map.set("buf.toString failed", buf.toString("base64") === srcBase64);
}
{
let buf = new FastBuffer(12);
let src = "hello world!";
let srcBase64 = "aGVsbG8gd29ybGQh";
buf.write(srcBase64, 0, 12, 'base64');
map.set("buf.toString failed", buf.toString() === src);
}
{
let array = new Uint8Array([252,11,3,67,237,118,91,177,43]);
let buf = new FastBuffer(array);
let strUrl = buf.toString("base64url");
let str = buf.toString("base64");
map.set("create buffer baes64 01 failed", strUrl === "_AsDQ-12W7Er");
map.set("create buffer baes64 01 failed", str === "/AsDQ+12W7Er");
array = new Uint8Array([2,192,254,253,5,132,69]);
buf = new FastBuffer(array);
strUrl = buf.toString("base64url");
str= buf.toString("base64");
map.set("create buffer baes64 02 failed", strUrl === "AsD-_QWERQ");
map.set("create buffer baes64 02 failed", str === "AsD+/QWERQ==");
array = new Uint8Array([215,109,211,97,72,142,167,241]);
buf = new FastBuffer(array);
strUrl = buf.toString("base64url");
str = buf.toString("base64");
map.set("create buffer baes64 03 failed", strUrl === "123TYUiOp_E");
map.set("create buffer baes64 03 failed", str === "123TYUiOp/E=");
array = new Uint8Array([252]);
buf = new FastBuffer(array);
strUrl = buf.toString("base64url");
str = buf.toString("base64");
map.set("create buffer baes64 04 failed", strUrl === "_A");
map.set("create buffer baes64 04 failed", str === "/A==");
array = new Uint8Array([252,97]);
buf = new FastBuffer(array);
strUrl = buf.toString("base64url");
str = buf.toString("base64");
map.set("create buffer baes64 05 failed", strUrl === "_GE");
map.set("create buffer baes64 05 failed", str === "/GE=");
array = new Uint8Array([252,97,142]);
buf = new FastBuffer(array);
strUrl = buf.toString("base64url");
str = buf.toString("base64");
map.set("create buffer baes64 06 failed", strUrl === "_GGO");
map.set("create buffer baes64 06 failed", str === "/GGO");
}
{
let ab = new ArrayBuffer(100);
let buf = new FastBuffer(ab, 9.9, 9.9);
let res = buf.toString('hex');
map.set("create buffer not int parameter failed", res === "000000000000000000");
}
{
let buf = new FastBuffer(2);
buf.writeInt16BE(0x1234, 0);
try {
let ref = buf.readInt16LE(1);
} catch (err) {
map.set("buffer write out of bounds error failed", err.name === 'BusinessError');
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');
}
}
{
let buf = new FastBuffer("测试特殊字符$#@!");
let len = buf.length;
map.set("buffer test chinese$#@! failed", len === 22);
}
{
let buf = new FastBuffer([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
let res = buf.readIntBE(0, 6).toString(16);
map.set("buffer.readIntBE() failed, expect: 1234567890ab, output: " + res, res === '1234567890ab');
}
{
let buf = new FastBuffer([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
let res = buf.readIntLE(0, 6).toString(16);
map.set("buffer.readIntLE() failed, expect: -546f87a9cbee, output: " + res, res === '-546f87a9cbee');
}
{
let buf = new FastBuffer([0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70,
0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78]);
let res = buf.readBigUInt64BE(0).toString();
map.set("buffer.readBigUInt64BE() failed, expect: 7161960797921896816, output: " + res, res === '7161960797921896816');
let buf1 = new FastBuffer(8);
let result = buf1.writeBigUInt64BE(BigInt(0xdecafafecacefade), 0);
map.set("buffer.readBigUInt64BE() failed, expect: 8, output: " + result, result === 8);
}
{
try{
let buf = new FastBuffer([undefined]);
} catch (e) {
map.set("new buffer from array failed, expect: 401, output: " + e.code, e.code === 401);
}
}
{
let buf = new FastBuffer(3).fill("$*$");
let str = buf.toString();
map.set("testFill0092, expect: $*$, output: " + str, str === "$*$");
}
{
try {
let buf = new FastBuffer(3).fill("$*$", -1);
} catch (err) {
map.set("testFill0093, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 3. Received value is: -1';
map.set("testFill0093, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
try {
let buf = new FastBuffer(3).fill("$*$", 0, 5);
} catch (err) {
map.set("testFill0094, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "end" is out of range. It must be >= 0 and <= 3. Received value is: 5';
map.set("testFill0094, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(8);
try {
let offset = buf.write("abcde", -1);
} catch (err) {
map.set("testWrite0105, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 7. Received value is: -1';
map.set("testWrite0105, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(8);
try {
let offset = buf.write("abcde", 1, 9);
} catch (err) {
map.set("testWrite0106, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "length" is out of range. It must be >= 0 and <= 7. Received value is: 9';
map.set("testWrite0106, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf1 = new FastBuffer("1236");
let buf2 = new FastBuffer("1235");
let res = buf1.compare(buf2);
map.set("testCompare0110, expect: 1, output: " + res, res === 1);
}
{
let buf1 = new FastBuffer("1236");
let buf2 = new FastBuffer("1235");
try {
let res = buf1.compare(buf2, -1);
} catch (err) {
map.set("testCompare0112, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4. Received value is: -1';
map.set("testCompare0112, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf1 = new FastBuffer("1236");
let buf2 = new FastBuffer("1235");
let res = buf1.equals(buf2);
map.set("testEquals0120, expect: false, output: " + res, res === false);
}
{
let buf1 = new FastBuffer("1236测试");
let buf2 = new FastBuffer("1236测试");
let res = buf1.equals(buf2);
map.set("testEquals0121, expect: true, output: " + res, res === true);
}
{
let buf1 = new FastBuffer("O@O");
let buf2 = new FastBuffer("O^O");
let res = buf1.equals(buf2);
map.set("testEquals0122, expect: false, output: " + res, res === false);
}
{
let buf1 = new FastBuffer("1236");
let buf2 = new FastBuffer("1235");
let num = buf1.copy(buf2);
map.set("testCopy0140, expect: 4, output: " + num, num === 4);
let str = buf2.toString();
map.set("testCopy0140, expect: 1236, output: " + str, str === "1236");
}
{
let buf1 = new FastBuffer("abcdefg");
let buf2 = new FastBuffer("1235789");
let num = buf1.copy(buf2, 2, 1, 3);
map.set("testCopy0141, expect: 2, output: " + num, num === 2);
let str = buf2.toString();
map.set("testCopy0141, expect: 12bc789, output: " + str, str === "12bc789");
}
{
let buf1 = new FastBuffer("123656");
let buf2 = new FastBuffer("1235");
let num = buf1.copy(buf2);
map.set("testCopy0143, expect: 4, output: " + num, num === 4);
let str = buf2.toString();
map.set("testCopy0143, expect: 1236, output: " + str, str === "1236");
}
{
let buf1 = new FastBuffer("123656");
let buf2 = new FastBuffer("1235");
try {
let num = buf1.copy(buf2, -1);
} catch (err) {
map.set("testCopy0144, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4294967295. Received value is: -1';
map.set("testCopy0144, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf1 = new FastBuffer("ab$#");
let buf2 = new FastBuffer("123556");
let num = buf1.copy(buf2);
map.set("testCopy0146, expect: 4, output: " + num, num === 4);
let str = buf2.toString();
map.set("testCopy0146, expect: ab$#56, output: " + str, str === "ab$#56");
}
{
let buf1 = new FastBuffer("1236");
let str = buf1.toString();
map.set("testToString0150, expect: 1236, output: " + str, str === "1236");
}
{
let buf1 = new FastBuffer("张三");
let str = buf1.toString();
map.set("testToString0151, expect: 张三, output: " + str, str === "张三");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("binary");
map.set("testToString0152, expect: abc, output: " + str, str === "abc");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("ascii");
map.set("testToString0153, expect: abc, output: " + str, str === "abc");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("base64");
map.set("testToString0154, expect: YWJj, output: " + str, str === "YWJj");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("hex");
map.set("testToString0155, expect: 616263, output: " + str, str === "616263");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("latin1");
map.set("testToString0156, expect: abc, output: " + str, str === "abc");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("ucs2");
map.set("testToString0157, expect: 扡, output: " + str, str === "扡");
}
{
let buf1 = new FastBuffer("abc");
let str = buf1.toString("utf16le");
map.set("testToString0158, expect: 扡, output: " + str, str === "扡");
}
{
let buf1 = new FastBuffer("!@#$%^&*");
let str = buf1.toString();
map.set("testToString0159, expect: !@#$%^&*, output: " + str, str === "!@#$%^&*");
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.indexOf("3");
map.set("testIndexOf0170, expect: 1, output: " + index, index === 1);
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.indexOf("3", 2);
map.set("testIndexOf0171, expect: 3, output: " + index, index === 3);
}
{
let buf1 = new FastBuffer("13236235");
let index = buf1.indexOf("23");
map.set("testIndexOf0173, expect: 2, output: " + index, index === 2);
}
{
let buf1 = new FastBuffer("测试特殊字符$#@!");
let index = buf1.indexOf("@");
map.set("testIndexOf0174, expect: 20, output: " + index, index === 20);
}
{
let buf1 = new FastBuffer("13236235");
let index = buf1.indexOf("23", 3);
map.set("testIndexOf0175, expect: 5, output: " + index, index === 5);
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.indexOf("a");
map.set("testIndexOf0176, expect: -1, output: " + index, index === -1);
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.lastIndexOf("3");
map.set("testLastIndexOf0180, expect: 3, output: " + index, index === 3);
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.lastIndexOf("3", 2);
map.set("testLastIndexOf0181, expect: 1, output: " + index, index === 1);
}
{
let buf1 = new FastBuffer("13236235");
let index = buf1.lastIndexOf("23");
map.set("testLastIndexOf0183, expect: 5, output: " + index, index === 5);
}
{
let buf1 = new FastBuffer("13236235");
let index = buf1.lastIndexOf("23", 3);
map.set("testLastIndexOf0184, expect: 2, output: " + index, index === 2);
}
{
let buf1 = new FastBuffer("13236");
let index = buf1.lastIndexOf("a");
map.set("testLastIndexOf0186, expect: -1, output: " + index, index === -1);
}
{
let buf1 = new FastBuffer("13236");
let flag = buf1.includes("3");
map.set("testIncludes0190, expect: true, output: " + flag, flag === true);
}
{
let buf1 = new FastBuffer("13236");
let flag = buf1.includes("3", 2);
map.set("testIncludes0191, expect: true, output: " + flag, flag === true);
}
{
let buf1 = new FastBuffer("13236");
let flag = buf1.includes("32");
map.set("testIncludes0193, expect: true, output: " + flag, flag === true);
}
{
let buf1 = new FastBuffer("13236");
let flag = buf1.includes("32", 2);
map.set("testIncludes0194, expect: false, output: " + flag, flag === false);
}
{
let buf1 = new FastBuffer("测试特殊字符$#@!");
let flag = buf1.includes("#@");
map.set("testIncludes0195, expect: true, output: " + flag, flag === true);
flag = buf1.includes("测试");
map.set("testIncludes0195, expect: true, output: " + flag, flag === true);
}
{
let buf1 = new FastBuffer("13236");
let flag = buf1.includes("abc");
map.set("testIncludes0196, expect: false, output: " + flag, flag === false);
}
{
let buf1 = new FastBuffer("1234");
let keys = buf1.keys();
let index = 0;
for (const key of keys) {
map.set("testKeys0230, expect: " + index + ", output: " + key, key === index);
index++;
}
}
{
let uarr = new Uint8Array(4);
uarr[0] = 0x31;
uarr[1] = 0x32;
uarr[2] = 0x33;
uarr[3] = 0x34;
let buf1 = new FastBuffer(uarr);
let keys = buf1.keys();
let index = 0;
for (const key of keys) {
map.set("testKeys0235, expect: " + index + ", output: " + key, key === index);
index++;
}
}
{
let buf1 = new FastBuffer("1234");
let keys = buf1.values();
let va = 49;
for (const value of keys) {
map.set("testValues0240, expect: " + va + ", output: " + value, value === va);
va++;
}
}
{
let uarr = new Uint8Array(4);
uarr[0] = 0x31;
uarr[1] = 0x32;
uarr[2] = 0x33;
uarr[3] = 0x34;
let buf1 = new FastBuffer(uarr);
let keys = buf1.values();
let va = 0x31;
for (const value of keys) {
map.set("testValues0245, expect: " + va + ", output: " + value, value === va);
va++;
}
}
{
let uarr = new Uint8Array(3);
uarr[0] = 0x12;
uarr[1] = 0x34;
uarr[2] = 0x56;
let buf = new FastBuffer(uarr);
let str = buf.toString("hex");
map.set("testfrom0260, expect: 123456, output: " + str, str === "123456");
}
{
const buf = new FastBuffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
let str = buf.toString("hex");
map.set("testfrom0261, expect: 627566666572, output: " + str, str === "627566666572");
}
{
const arr = new Uint8Array(2);
arr[0] = 97;
arr[1] = 98;
const buf = new FastBuffer(arr.buffer);
arr[0] = 99
buf[1] = 100
let str = buf.toString("hex");
map.set("testfrom0262, expect: 6364, output: " + str, str === "6364");
map.set("testfrom0262, expect: 100, output: " + arr[1], arr[1] === 100);
}
{
const buf1 = new FastBuffer('buffer');
const buf2 = new FastBuffer(buf1);
buf1[0] = 0x61;
let str = buf1.toString();
map.set("testfrom0264, expect: auffer, output: " + str, str === "auffer");
str = buf2.toString();
map.set("testfrom0264, expect: buffer, output: " + str, str === "buffer");
}
{
const buf1 = new FastBuffer('this is a test');
let str = buf1.toString();
map.set("testfrom0265, expect: this is a test, output: " + str, str === "this is a test");
}
{
const str = `MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/OgIQLaulKklB\npZltSaWwM3Cnzcmvh+LoqYFYjCePUxnoJRDusFqy4sjwBx9fn/XSxxJ9A0KxMtXa\nr7YFjwQo3FsIjLZ3+8wS+Kydcg==`;
const buf = new FastBuffer(str, 'base64');
let ref = buf.readInt8(buf.length - 1);
map.set("testfrom0269, expect: 114, output: " + ref, ref === 114);
}
{
let buf = new FastBuffer(4);
let ref = buf.writeInt32BE(0x12345678, 0);
map.set("testWriteInt32BE0310, expect: 4, output: " + ref, ref === 4);
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32BE(0x12345678, -1);
} catch (err) {
map.set("testWriteInt32BE0311, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
map.set("testWriteInt32BE0311, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32BE(0x123456789, 0);
} catch (err) {
map.set("testWriteInt32BE0312, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "value" is out of range. It must be >= -2147483648 and <= 2147483647. Received value is: 4886718345';
map.set("testWriteInt32BE0312, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32BE(0x12345678, 1);
} catch (err) {
map.set("testWriteInt32BE0313, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 0. Received value is: 1';
map.set("testWriteInt32BE0313, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(4);
let ref = buf.writeInt32LE(0x12345678, 0);
map.set("testWriteInt32LE0320, expect: 4, output: " + ref, ref === 4);
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32LE(0x12345678, -1);
} catch (err) {
map.set("testWriteInt32LE0321, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
map.set("testWriteInt32LE0321, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32LE(0x123456789, 0);
} catch (err) {
map.set("testWriteInt32LE0322, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "value" is out of range. It must be >= -2147483648 and <= 2147483647. Received value is: 4886718345';
map.set("testWriteInt32LE0322, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(4);
try {
let ref = buf.writeInt32LE(0x12345678, 1);
} catch (err) {
map.set("testWriteInt32LE0323, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 0. Received value is: 1';
map.set("testWriteInt32LE0323, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(2);
let ref = buf.writeInt16BE(0x7bca, 0);
map.set("testWriteInt16BE0330, expect: 2, output: " + ref, ref === 2);
}
{
let buf = new FastBuffer(2);
try {
let ref = buf.writeInt16BE(0x7bca, -1);
} catch (err) {
map.set("testWriteInt16BE0331, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0. Received value is: -1';
map.set("testWriteInt16BE0331, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(2);
try {
let ref = buf.writeInt16BE(0x123456, 0);
} catch (err) {
map.set("testWriteInt16BE0332, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "value" is out of range. It must be >= -32768 and <= 32767. Received value is: 1193046';
map.set("testWriteInt16BE0332, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(0);
map.set("testConstructorEmpty, expect: 0, output: " + buf.length, buf.length === 0);
buf = new FastBuffer(5);
map.set("testConstructorSize, expect: 5, output: " + buf.length, buf.length === 5);
buf = new FastBuffer("Hello");
map.set("testConstructorString, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
map.set("testConstructorArray, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
let arrBuf = new ArrayBuffer(3);
new Uint8Array(arrBuf).set([0x41, 0x42, 0x43]);
buf = new FastBuffer(arrBuf);
map.set("testConstructorArrayBuffer, expect: ABC, output: " + buf.toString(), buf.toString() === "ABC");
let bufSrc = new FastBuffer("Copy");
buf = new FastBuffer(bufSrc);
map.set("testConstructorFastBuffer, expect: Copy, output: " + buf.toString(), buf.toString() === "Copy");
}
{
let buf = new FastBuffer(1);
buf.writeUInt8(0xAB, 0);
map.set("testWriteUInt8, expect: AB, output: " + buf.toString('hex'), buf.toString('hex') === "ab");
let val = buf.readUInt8(0);
map.set("testReadUInt8, expect: 171, output: " + val, val === 0xAB);
buf = new FastBuffer(2);
buf.writeUInt16BE(0xABCD, 0);
map.set("testWriteUInt16BE, expect: ABCD, output: " + buf.toString('hex'), buf.toString('hex') === "abcd");
val = buf.readUInt16BE(0);
map.set("testReadUInt16BE, expect: 43981, output: " + val, val === 0xABCD);
buf.writeUInt16LE(0xABCD, 0);
map.set("testWriteUInt16LE, expect: CDAB, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
val = buf.readUInt16LE(0);
map.set("testReadUInt16LE, expect: 43981, output: " + val, val === 0xABCD);
buf = new FastBuffer(4);
buf.writeUInt32BE(0x12345678, 0);
map.set("testWriteUInt32BE, expect: 12345678, output: " + buf.toString('hex'), buf.toString('hex') === "12345678");
val = buf.readUInt32BE(0);
map.set("testReadUInt32BE, expect: 305419896, output: " + val, val === 0x12345678);
buf.writeUInt32LE(0x12345678, 0);
map.set("testWriteUInt32LE, expect: 78563412, output: " + buf.toString('hex'), buf.toString('hex') === "78563412");
val = buf.readUInt32LE(0);
map.set("testReadUInt32LE, expect: 305419896, output: " + val, val === 0x12345678);
buf = new FastBuffer(1);
buf.writeInt8(-85, 0);
map.set("testWriteInt8, expect: AB, output: " + buf.toString('hex'), buf.toString('hex') === "ab");
val = buf.readInt8(0);
map.set("testReadInt8, expect: -85, output: " + val, val === -85);
buf = new FastBuffer(2);
buf.writeInt16BE(-21555, 0);
map.set("testWriteInt16BE, expect: ABCD, output: " + buf.toString('hex'), buf.toString('hex') === "abcd");
val = buf.readInt16BE(0);
map.set("testReadInt16BE, expect: -21555, output: " + val, val === -21555);
buf.writeInt16LE(-21555, 0);
map.set("testWriteInt16LE, expect: CDAB, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
val = buf.readInt16LE(0);
map.set("testReadInt16LE, expect: -21555, output: " + val, val === -21555);
buf = new FastBuffer(4);
buf.writeInt32BE(-19088744, 0);
map.set("testWriteInt32BE, expect: fedcba98, output: " + buf.toString('hex'), buf.toString('hex') === "fedcba98");
val = buf.readInt32BE(0);
map.set("testReadInt32BE, expect: -19088744, output: " + val, val === -19088744);
buf.writeInt32LE(-19088744, 0);
map.set("testWriteInt32LE, expect: 98badcfe, output: " + buf.toString('hex'), buf.toString('hex') === "98badcfe");
val = buf.readInt32LE(0);
map.set("testReadInt32LE, expect: -19088744, output: " + val, val === -19088744);
buf = new FastBuffer(4);
buf.writeFloatBE(123.456, 0);
let hex = buf.toString('hex');
map.set("testWriteFloatBE, expect: 42f6e979, output: " + hex, hex === "42f6e979");
let floatVal = buf.readFloatBE(0);
map.set("testReadFloatBE, expect: 123.456, output: " + floatVal, floatVal.toFixed(3) === "123.456");
buf.writeFloatLE(123.456, 0);
hex = buf.toString('hex');
map.set("testWriteFloatLE, expect: 79e9f642, output: " + hex, hex === "79e9f642");
floatVal = buf.readFloatLE(0);
map.set("testReadFloatLE, expect: 123.456, output: " + floatVal, floatVal.toFixed(3) === "123.456");
buf = new FastBuffer(8);
buf.writeDoubleBE(123.456, 0);
hex = buf.toString('hex');
map.set("testWriteDoubleBE, expect: 405edd2f1a9fbe77, output: " + hex, hex === "405edd2f1a9fbe77");
let doubleVal = buf.readDoubleBE(0);
map.set("testReadDoubleBE, expect: 123.456, output: " + doubleVal, doubleVal.toFixed(3) === "123.456");
buf.writeDoubleLE(123.456, 0);
hex = buf.toString('hex');
map.set("testWriteDoubleLE, expect: 77be9f1a2fdd5e40, output: " + hex, hex === "77be9f1a2fdd5e40");
doubleVal = buf.readDoubleLE(0);
map.set("testReadDoubleLE, expect: 123.456, output: " + doubleVal, doubleVal.toFixed(3) === "123.456");
}
{
let buf = new FastBuffer(5);
buf.fill("A");
map.set("testFillChar, expect: AAAAA, output: " + buf.toString(), buf.toString() === "AAAAA");
buf.fill("B", 1, 3);
map.set("testFillPartial, expect: ABBAA, output: " + buf.toString(), buf.toString() === "ABBAA");
let buf1 = new FastBuffer("ABC");
let buf2 = new FastBuffer("ABD");
let cmp = buf1.compare(buf2);
map.set("testCompareLess, expect: -1, output: " + cmp, cmp === -1);
buf2 = new FastBuffer("ABC");
cmp = buf1.compare(buf2);
map.set("testCompareEqual, expect: 0, output: " + cmp, cmp === 0);
buf1 = new FastBuffer("ABD");
cmp = buf1.compare(buf2);
map.set("testCompareGreater, expect: 1, output: " + cmp, cmp === 1);
buf1 = new FastBuffer("12345");
buf2 = new FastBuffer("ABCDE");
buf1.copy(buf2, 1, 1, 3);
map.set("testCopy, expect: A23DE, output: " + buf2.toString(), buf2.toString() === "A23DE");
buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
map.set("testToString, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
buf = new FastBuffer("A");
map.set("testToStringBase64, expect: QQ==, output: " + buf.toString('base64'), buf.toString('base64') === "QQ==");
buf = new FastBuffer("A");
map.set("testToStringHex, expect: 41, output: " + buf.toString('hex'), buf.toString('hex') === "41");
buf = new FastBuffer("Hello World");
let idx = buf.indexOf("World");
map.set("testIndexOf, expect: 6, output: " + idx, idx === 6);
buf = new FastBuffer("Hello World, World");
idx = buf.lastIndexOf("World");
map.set("testLastIndexOf, expect: 13, output: " + idx, idx === 13);
buf = new FastBuffer("Hello");
let has = buf.includes("ell");
map.set("testIncludes, expect: true, output: " + has, has === true);
buf1 = new FastBuffer("ABC");
buf2 = new FastBuffer("ABC");
let isEqual = buf1.equals(buf2);
map.set("testEquals, expect: true, output: " + isEqual, isEqual === true);
buf = new FastBuffer("AB");
let keys = Array.from(buf.keys());
map.set("testKeys, expect: 0,1, output: " + keys.join(','), keys.join(',') === "0,1");
let values = Array.from(buf.values());
map.set("testValues, expect: 65,66, output: " + values.join(','), values.join(',') === "65,66");
}
{
let buf = new FastBuffer(1);
try {
buf.readUInt8(1);
} catch (err) {
map.set("testReadUInt8_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
}
try {
buf.writeUInt8(0, 2);
} catch (err) {
map.set("testWriteUInt8_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
}
try {
buf.readUInt16BE(0);
} catch (err) {
map.set("testReadUInt16BE_Insufficient, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
}
try {
buf.writeUInt16BE(0xABCD, 1);
} catch (err) {
map.set("testWriteUInt16BE_OutOfRange, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
}
}
{
let buf = new FastBuffer(0);
map.set("testConstructorEmpty, expect: 0, output: " + buf.length, buf.length === 0);
}
{
let buf = new FastBuffer(7);
map.set("testConstructorSize, expect: 7, output: " + buf.length, buf.length === 7);
}
{
let buf = new FastBuffer("Γειά σου");
map.set("testConstructorString, expect: Γειά σου, output: " + buf.toString(), buf.toString() === "Γειά σου");
}
{
let buf = new FastBuffer([0xC0, 0xFF, 0xEE]);
let hex = buf.toString('hex');
map.set("testConstructorArray, expect: c0ffee, output: " + hex, hex === "c0ffee");
}
{
let arrBuf = new ArrayBuffer(4);
new Uint8Array(arrBuf).set([0xDE, 0xAD, 0xBE, 0xEF]);
let buf = new FastBuffer(arrBuf);
map.set("testConstructorArrayBuffer, expect: deadbeef, output: " + buf.toString('hex'), buf.toString('hex') === "deadbeef");
}
{
let buf = new FastBuffer(1);
buf.writeUInt8(0xF0, 0);
map.set("testWriteUInt8, expect: f0, output: " + buf.toString('hex'), buf.toString('hex') === "f0");
}
{
let buf = new FastBuffer(2);
buf.writeInt16LE(-32767, 0);
map.set("testWriteInt16LE, expect: 0180, output: " + buf.toString('hex'), buf.toString('hex') === "0180");
}
{
let buf = new FastBuffer(4);
buf.writeInt32BE(0x7FFFFFFF, 0);
let val = buf.readInt32BE(0);
map.set("testReadInt32BE, expect: 2147483647, output: " + val, val === 2147483647);
}
{
let buf = new FastBuffer(4);
buf.writeFloatLE(-123.456, 0);
let hex = buf.toString('hex');
map.set("testWriteFloatLE, expect: 79e9f6c2, output: " + hex, hex === "79e9f6c2");
}
{
let buf = new FastBuffer(8);
buf.writeDoubleBE(1.7976931348623157e308, 0);
let val = buf.readDoubleBE(0);
map.set("testReadDoubleBE, expect: 1.7976931348623157e+308, output: " + val, val === 1.7976931348623157e308);
}
{
let buf1 = new FastBuffer("apple");
let buf2 = new FastBuffer("zebra");
let cmp = buf1.compare(buf2);
map.set("testCompareStrings, expect: -1, output: " + cmp, cmp === -1);
}
{
let buf = new FastBuffer("✓ test");
let b64url = buf.toString('base64url');
map.set("testToBase64URL, expect: 4pyTIHRlc3Q, output: " + b64url, b64url === "4pyTIHRlc3Q");
}
{
let buf = new FastBuffer("cafebabe", 'hex');
map.set("testFromHex, expect: cafebabe, output: " + buf.toString('hex'), buf.toString('hex') === "cafebabe");
}
{
let buf = new FastBuffer("XYZ");
let keys = Array.from(buf.keys());
map.set("testKeysIter, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
}
{
let buf = new FastBuffer("αβγδλθλ");
let idx = buf.lastIndexOf("λ");
map.set("testLastIndexOf, expect: 12, output: " + idx, idx === 12);
}
{
let buf = new FastBuffer(3);
try {
buf.writeUInt32BE(0x12345678, 0);
} catch (err) {
map.set("testWriteOOB, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
}
}
{
let buf = new FastBuffer(4);
buf.writeInt32LE(-2147483648, 0);
let val = buf.readInt32LE(0);
map.set("testWriteMinInt32, expect: -2147483648, output: " + val, val === -2147483648);
}
{
let buf = new FastBuffer("search_term");
let found = buf.includes("term");
map.set("testIncludesPartial, expect: true, output: " + found, found === true);
}
{
let buf = new FastBuffer(2).fill("AB");
let str = buf.toString();
map.set("testFill0500, expect: AB, output: " + str, str === "AB");
}
{
try {
let buf = new FastBuffer(4).fill("XY", -2);
} catch (err) {
map.set("testFill0501, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: -2';
map.set("testFill0501, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
try {
let buf = new FastBuffer(3).fill("123", 0, 6);
} catch (err) {
map.set("testFill0502, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "end" is out of range. It must be >= 0 and <= 3. Received value is: 6';
map.set("testFill0502, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(5);
try {
let offset = buf.write("test", -3);
} catch (err) {
map.set("testWrite0503, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: -3';
map.set("testWrite0503, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(6);
try {
let offset = buf.write("data", 1, 8);
} catch (err) {
map.set("testWrite0504, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "length" is out of range. It must be >= 0 and <= 5. Received value is: 8';
map.set("testWrite0504, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf1 = new FastBuffer("apple");
let buf2 = new FastBuffer("zebra");
let res = buf1.compare(buf2);
map.set("testCompare0505, expect: -1, output: " + res, res === -1);
}
{
let buf1 = new FastBuffer("test");
let buf2 = new FastBuffer("test");
try {
let res = buf1.compare(buf2, -5);
} catch (err) {
map.set("testCompare0506, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4. Received value is: -5';
map.set("testCompare0506, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf1 = new FastBuffer("Γειά σου");
let buf2 = new FastBuffer("Γειά σου");
let res = buf1.equals(buf2);
map.set("testEquals0507, expect: true, output: " + res, res === true);
}
{
let buf1 = new FastBuffer("@#$");
let buf2 = new FastBuffer("!@#");
let res = buf1.equals(buf2);
map.set("testEquals0508, expect: false, output: " + res, res === false);
}
{
let buf1 = new FastBuffer("source");
let buf2 = new FastBuffer(6);
let num = buf1.copy(buf2);
map.set("testCopy0509, expect: 6, output: " + num, num === 6);
let str = buf2.toString();
map.set("testCopy0509, expect: source, output: " + str, str === "source");
}
{
let buf1 = new FastBuffer("abcdef");
let buf2 = new FastBuffer("123456");
let num = buf1.copy(buf2, 1, 2, 4);
map.set("testCopy0510, expect: 2, output: " + num, num === 2);
let str = buf2.toString();
map.set("testCopy0510, expect: 1cd456, output: " + str, str === "1cd456");
}
{
let buf1 = new FastBuffer("data");
let buf2 = new FastBuffer("1234");
try {
let num = buf1.copy(buf2, -10);
} catch (err) {
map.set("testCopy0511, expect: BusinessError, output: " + err.name, err.name === 'BusinessError');
let expectMsg = 'The value of "targetStart" is out of range. It must be >= 0 and <= 4294967295. Received value is: -10';
map.set("testCopy0511, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer("Hello 世界");
let str = buf.toString();
map.set("testToString0512, expect: Hello 世界, output: " + str, str === "Hello 世界");
}
{
let buf = new FastBuffer("base64");
let str = buf.toString("base64");
map.set("testToString0513, expect: YmFzZTY0, output: " + str, str === "YmFzZTY0");
}
{
let buf = new FastBuffer("hex");
let str = buf.toString("hex");
map.set("testToString0514, expect: 686578, output: " + str, str === "686578");
}
{
let buf = new FastBuffer("a,b,c,d,e");
let index = buf.lastIndexOf(",");
map.set("testLastIndexOf0516, expect: 7, output: " + index, index === 7);
}
{
let buf = new FastBuffer("search result");
let flag = buf.includes("result");
map.set("testIncludes0517, expect: true, output: " + flag, flag === true);
}
{
let buf = new FastBuffer("ABC");
let keys = Array.from(buf.keys());
map.set("testKeys0518, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
}
{
let buf = new FastBuffer("ABC");
let values = Array.from(buf.values());
map.set("testValues0519, expect: 65,66,67, output: " + values.join(','), values.join(',') === "65,66,67");
}
{
let arr = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
let buf = new FastBuffer(arr.buffer);
map.set("testFrom0520, expect: Hello, output: " + buf.toString(), buf.toString() === "Hello");
}
{
let buf = new FastBuffer(4);
buf.writeFloatLE(-65.432, 0);
let hex = buf.toString('hex');
map.set("testWriteFloatLE0523, expect: 2fdd82c2, output: " + hex, hex === "2fdd82c2");
}
{
let buf = new FastBuffer([0x42, 0x8A, 0x3D, 0x71]);
let val = buf.readFloatBE(0);
map.set("testReadFloatBE0524, expect: 69.12, output: " + val, val.toFixed(2) === "69.12");
}
{
let buf = new FastBuffer(0);
map.set("testConstructor0525, expect: 0, output: " + buf.length, buf.length === 0);
}
{
let buf = new FastBuffer(10);
map.set("testConstructor0526, expect: 10, output: " + buf.length, buf.length === 10);
}
{
let buf = new FastBuffer("🚀🌕");
map.set("testConstructor0527, expect: 🚀🌕, output: " + buf.toString(), buf.toString() === "🚀🌕");
}
{
let buf = new FastBuffer([0x31, 0x32, 0x33]);
map.set("testConstructor0528, expect: 123, output: " + buf.toString(), buf.toString() === "123");
}
{
let buf = new FastBuffer("ABCDEF");
buf.copy(buf, 2, 0, 3);
map.set("testCopy0529, expect: ABABCF, output: " + buf.toString(), buf.toString() === "ABABCF");
}
{
let buf = new FastBuffer([0xC0, 0xFF, 0xEE]);
let str = buf.toString("latin1");
map.set("testToString0530, expect: Àÿî, output: " + str, str === "Àÿî");
}
{
let buf = new FastBuffer("banana");
let index = buf.indexOf("na", 3);
map.set("testIndexOf0531, expect: 4, output: " + index, index === 4);
}
{
let buf = new FastBuffer("programming");
let flag = buf.includes("gram", 3);
map.set("testIncludes0532, expect: true, output: " + flag, flag === true);
}
{
let buf = new FastBuffer(2);
buf.writeUInt16LE(0xABCD, 0);
map.set("testWriteUInt16LE0533, expect: cdab, output: " + buf.toString('hex'), buf.toString('hex') === "cdab");
}
{
let buf = new FastBuffer([0x12, 0x34]);
let val = buf.readInt16BE(0);
map.set("testReadInt16BE0534, expect: 4660, output: " + val, val === 4660);
}
{
let buf = new FastBuffer("cafebabe", "hex");
map.set("testFromHex0538, expect: cafebabe, output: " + buf.toString('hex'), buf.toString('hex') === "cafebabe");
}
{
let buf = new FastBuffer(3);
buf.fill(65);
map.set("testFill0542, expect: AAA, output: " + buf.toString(), buf.toString() === "AAA");
}
{
let buf = new FastBuffer("content");
let index = buf.indexOf("xyz");
map.set("testIndexOf0545, expect: -1, output: " + index, index === -1);
}
{
let buf = new FastBuffer("100% ✓");
let flag = buf.includes("% ✓");
map.set("testIncludes0546, expect: true, output: " + flag, flag === true);
}
{
let buf = new FastBuffer("AB");
let entries = Array.from(buf.entries());
let entriesStr = entries.map(e => e.join(':')).join(';');
map.set("testEntries0547, expect: 0:65;1:66, output: " + entriesStr, entriesStr === "0:65;1:66");
}
{
let buf = new FastBuffer(8);
buf.writeDoubleLE(123.456, 0);
let hex = buf.toString('hex');
map.set("testWriteDoubleLE0548, expect: 77be9f1a2fdd5e40, output: " + hex, hex === "77be9f1a2fdd5e40");
}
{
let buf = new FastBuffer([0x78, 0x56, 0x34, 0x12]);
let val = buf.readUInt32LE(0);
map.set("testReadUInt32LE0549, expect: 305419896, output: " + val, val === 305419896);
}
{
let buf = new FastBuffer(12).fill("★");
let str = buf.toString();
map.set("testFill1001, expect: ★★★★, output: " + str, str === "★★★★");
}
{
let buf = new FastBuffer(5).fill("€", 1, 4);
let str = buf.toString();
map.set("testFill1002, expect: \0€\0, output: " + str, str === "\0€\0");
}
{
let buf = new FastBuffer(0).fill("X");
map.set("testFill1003, expect: 0, output: " + buf.length, buf.length === 0);
}
{
let buf = new FastBuffer(5);
try {
buf.write("data", 6);
} catch (err) {
let expectMsg = 'The value of "offset" is out of range. It must be >= 0 and <= 4. Received value is: 6';
map.set("testWrite1004, expect: " + expectMsg + ", output: " + err.message, err.message === expectMsg);
}
}
{
let buf = new FastBuffer(10);
buf.write("汉字测试", 2, 3);
map.set("testWrite1005, expect: 汉, output: " + buf.toString(), buf.toString().includes("汉"));
}
{
let buf = new FastBuffer(5);
let written = buf.write("12345");
map.set("testWrite1006, expect: 5, output: " + written, written === 5);
}
{
let buf1 = new FastBuffer("αβγ");
let buf2 = new FastBuffer("αβγ");
let res = buf1.compare(buf2);
map.set("testCompare1007, expect: 0, output: " + res, res === 0);
}
{
let buf1 = new FastBuffer("apple");
let buf2 = new FastBuffer("app");
let res = buf1.compare(buf2);
map.set("testCompare1008, expect: 1, output: " + res, res === 1);
}
{
let buf1 = new FastBuffer("xyz");
let buf2 = new FastBuffer("abcxyz");
let res = buf1.compare(buf2, 3);
map.set("testCompare1009, expect: 0, output: " + res, res === 0);
}
{
let buf1 = new FastBuffer("café", "utf8");
let buf2 = new FastBuffer("café", "latin1");
let res = buf1.equals(buf2);
map.set("testEquals1011, expect: false, output: " + res, res === false);
}
{
let buf1 = new FastBuffer("clone");
let buf2 = new FastBuffer(buf1);
let res = buf1.equals(buf2);
map.set("testEquals1012, expect: true, output: " + res, res === true);
}
{
let buf1 = new FastBuffer("XYZ");
let buf2 = new FastBuffer("ABCDEF");
buf1.copy(buf2, 2);
map.set("testCopy1013, expect: ABXYZF, output: " + buf2.toString(), buf2.toString() === "ABXYZF");
}
{
let buf1 = new FastBuffer("123456");
let buf2 = new FastBuffer("ABCDEF");
buf1.copy(buf2, 1, 2, 5);
map.set("testCopy1014, expect: A345EF, output: " + buf2.toString(), buf2.toString() === "A345EF");
}
{
let buf1 = new FastBuffer("");
let buf2 = new FastBuffer("test");
let num = buf1.copy(buf2);
map.set("testCopy1015, expect: 0, output: " + num, num === 0);
}
{
let buf = new FastBuffer("中文");
let str = buf.toString();
map.set("testToString1016, expect: 中文, output: " + str, str === "中文");
}
{
let buf = new FastBuffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
let str = buf.toString("hex");
map.set("testToString1017, expect: 48656c6c6f, output: " + str, str === "48656c6c6f");
}
{
let buf = new FastBuffer("safe<>");
let str = buf.toString("base64url");
map.set("testToString1018, expect: c2FmZTw-, output: " + str, str === "c2FmZTw-");
}
{
let buf = new FastBuffer("寻找汉字");
let idx = buf.indexOf("汉字");
map.set("testIndexOf1019, expect: 6, output: " + idx, idx === 6);
}
{
let buf = new FastBuffer([0x01, 0x02, 0x03]);
let idx = buf.indexOf("\x04");
map.set("testIndexOf1020, expect: -1, output: " + idx, idx === -1);
}
{
let buf = new FastBuffer("test");
let idx = buf.indexOf("t", 5);
map.set("testIndexOf1021, expect: -1, output: " + idx, idx === -1);
}
{
let buf = new FastBuffer("a1b2c3d4e5");
let idx = buf.lastIndexOf("3");
map.set("testLastIndexOf1022, expect: 5, output: " + idx, idx === 5);
}
{
let buf = new FastBuffer("€10€20€30");
let idx = buf.lastIndexOf("€");
map.set("testLastIndexOf1023, expect: 10, output: " + idx, idx === 10);
}
{
let buf = new FastBuffer("test");
let idx = buf.lastIndexOf("t", -5);
map.set("testLastIndexOf1024, expect: -1, output: " + idx, idx === -1);
}
{
let buf = new FastBuffer("");
let flag = buf.includes("data");
map.set("testIncludes1026, expect: false, output: " + flag, flag === false);
}
{
let buf = new FastBuffer("boundary");
let flag = buf.includes("ary", 5);
map.set("testIncludes1027, expect: true, output: " + flag, flag === true);
}
{
let buf = new FastBuffer(0);
let keys = Array.from(buf.keys());
map.set("testKeys1028, expect: , output: " + keys.join(','), keys.join(',') === "");
}
{
let buf = new FastBuffer(1000);
let keyCount = 0;
for (const key of buf.keys()) keyCount++;
map.set("testKeys1029, expect: 1000, output: " + keyCount, keyCount === 1000);
}
{
let buf = new FastBuffer("ABC");
let keys = Array.from(buf.keys());
map.set("testKeys1030, expect: 0,1,2, output: " + keys.join(','), keys.join(',') === "0,1,2");
}
{
let buf = new FastBuffer([0x00, 0xFF, 0x7F]);
let values = Array.from(buf.values());
map.set("testValues1031, expect: 0,255,127, output: " + values.join(','), values.join(',') === "0,255,127");
}
{
let buf = new FastBuffer("Ω");
let values = Array.from(buf.values());
map.set("testValues1032, expect: 206,169, output: " + values.join(','), values.join(',') === "206,169");
}
{
let buf = new FastBuffer(0);
let values = Array.from(buf.values());
map.set("testValues1033, expect: , output: " + values.join(','), values.join(',') === "");
}
{
let size = 10;
let buf = new FastBuffer(size);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0001 failed, buffer length:" + buf.length, buf.length === 10);
}
{
try {
let size = UINT32_MAX + 1;
let buf = new FastBuffer(size);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0002 failed", false);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0002 failed, error code:" + e.code, e.code === 10200001);
}
}
{
try {
let buf = new FastBuffer(null);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0003 failed", false);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0003 failed, error code:" + e.code, e.code === 401);
}
}
{
try {
let buf = new FastBuffer(10);
buf.fill(' ');
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0004 failed, buffer length:" + buf.length, buf.length === 10);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0004 failed, error code:" + e.code, false);
}
}
{
try {
let buf = new FastBuffer(10);
buf.fill(null);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0005 failed, buffer length:" + buf.length, buf.length === 10);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0005 failed, error code:" + e.code, false);
}
}
{
try {
let buf1 = new FastBuffer(10);
let buf = new FastBuffer(10);
buf.fill(buf1);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0006 failed, buffer length:" + buf.length, buf.length === 10);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0006 failed, error code:" + e.code, false);
}
}
{
try {
let buf = new FastBuffer(10);
buf.fill("ab$#", 0, 10, null);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0007 failed, buffer length:" + buf.length, buf.length === 10);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0007 failed, error code:" + e.code, false);
}
}
{
try {
let buf = new FastBuffer(0);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0008 failed, buffer length:" + buf.length, buf.length === 0);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0008 failed, error code:" + e.code, false);
}
}
{
try {
let buf1 = new FastBuffer(10);
let buf = new FastBuffer(0);
buf.fill(buf1);
let flag = new FastBuffer(0);
flag.fill(buf);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0009 failed, flag length:" + flag.length, flag.length === 0);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0009 failed, error code:" + e.code, false);
}
}
{
try {
let buf = new FastBuffer(-5);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0010 failed", false);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0010 failed, error code:" + e.code, e.code === 10200001);
}
}
{
try {
let buf = new FastBuffer(5.5);
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0011 failed, buffer length:", buf.length === 5);
} catch (e) {
map.set("SUB_COMMONLIBRARY_FASTBUFFER_BASETEST_ALLOC_0011 failed, error code:" + e.code, false);
}
}
{
var buffer1 = new FastBuffer(0x110);
var buffer2 = new FastBuffer(buffer1,0,0x40000000);
try {
for(let i = 0;i < 0x2000000;i++) {
let value = buffer2.readUIntLE(i*4,4);
if(value != 0) {
print(`offset 0x${(i*4).toString(16)} : 0x${value.toString(16)}`);
}
}
} catch (e) {
map.set("FASTBUFFER_OOB_TEST_0001 failed, error code:" + e.code, e.code === 10200001);
}
}
{
var buffer1 = new FastBuffer(0x110);
var buffer2 = new FastBuffer(buffer1,0,0x40000000);
try {
for(let i = 0;i < 0x1000000;i++) {
buffer2.writeUIntLE(0xcafebabe, i*4, 4);
}
} catch (e) {
map.set("FASTBUFFER_OOB_TEST_0002 failed, error code:" + e.code, e.code === 10200001);
}
}
{
let container_obj = new FastBuffer(0x110);
try {
container_obj.compare(0x41414141,0,1,0,1);
} catch (e) {
map.set("FASTBUFFER_OOB_TEST_0003 failed, error code:" + e.code, e.code === 401);
}
}
{
let container_obj = new FastBuffer("cdefg");
let buf = new FastBuffer("abcde");
map.set("FASTBUFFER_OOB_TEST_0004 failed", container_obj.compare(buf, 3, 2, 3, 2) === 0);
map.set("FASTBUFFER_OOB_TEST_0004 failed", container_obj.compare(buf, 0, 2, 3, 2) === -1);
map.set("FASTBUFFER_OOB_TEST_0004 failed", container_obj.compare(buf, 3, 2, 0, 2) === 1);
}
{
let container_obj = new FastBuffer("cdefg");
let buf = new FastBuffer(container_obj.buffer, 0, 114514);
map.set("FASTBUFFER_OOB_TEST_0005 failed", buf.length === 5 && buf.toString() === "cdefg");
}
{
let fast_buffer = new FastBuffer("1",0x1122);
map.set("FASTBUFFER_BAD_PARAMETER_TEST_0001 failed", fast_buffer.toString() === "1");
}
let flag = undefined;
function elements(value, key, map) {
if (!value) {
if (!flag) {
flag = [];
}
flag.push(key);
}
}
map.forEach(elements);
if (!flag) {
print("Test Buffer success!!!");
} else {
print("Test Buffer fail: " + flag);
}
}
export let bufferRes = "Test Buffer done";