'use strict'; require('../common'); const assert = require('assert'); function arrayOfNumbers(length) { return Array.from({ length }, (_, i) => i); } const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom'); // Methods that are either internal or do not make sense to be generic. const ignoredMethods = [ 'constructor', 'asciiSlice', 'base64Slice', 'base64urlSlice', 'latin1Slice', 'hexSlice', 'ucs2Slice', 'utf8Slice', 'asciiWrite', 'base64Write', 'base64urlWrite', 'latin1Write', 'hexWrite', 'ucs2Write', 'utf8Write', 'inspect', ]; // Tested methods const testedMethods = [ 'compare', 'copy', 'equals', 'fill', 'includes', 'indexOf', 'lastIndexOf', 'readBigInt64BE', 'readBigInt64LE', 'readBigUInt64BE', 'readBigUInt64LE', 'readDoubleBE', 'readDoubleLE', 'readFloatBE', 'readFloatLE', 'readInt8', 'readInt16BE', 'readInt16LE', 'readInt32BE', 'readInt32LE', 'readIntBE', 'readIntLE', 'readUInt8', 'readUInt16BE', 'readUInt16LE', 'readUInt32BE', 'readUInt32LE', 'readUIntBE', 'readUIntLE', 'subarray', 'slice', 'swap16', 'swap32', 'swap64', 'toJSON', 'toString', 'toLocaleString', 'write', 'writeBigInt64BE', 'writeBigInt64LE', 'writeBigUInt64BE', 'writeBigUInt64LE', 'writeDoubleBE', 'writeDoubleLE', 'writeFloatBE', 'writeFloatLE', 'writeInt8', 'writeInt16BE', 'writeInt16LE', 'writeInt32BE', 'writeInt32LE', 'writeIntBE', 'writeIntLE', 'writeUInt8', 'writeUInt16BE', 'writeUInt16LE', 'writeUInt32BE', 'writeUInt32LE', 'writeUIntBE', 'writeUIntLE', customInspectSymbol, ]; const expectedMethods = [ ...ignoredMethods, ...testedMethods, ]; const isMethod = (method) => typeof Buffer.prototype[method] === 'function'; const addUnique = (names, newName) => { const nameMatches = (name) => name.toLowerCase() === newName.toLowerCase(); if (!names.some(nameMatches)) names.push(newName); return names; }; const actualMethods = [ // The readXInt methods are provided as both upper & lower case names; reducing to only consider each once. ...Object.getOwnPropertyNames(Buffer.prototype).filter(isMethod).reduce(addUnique, []), ...Object.getOwnPropertySymbols(Buffer.prototype).filter(isMethod), ]; // These methods are not accounted for in the generic tests. assert.deepStrictEqual(actualMethods.filter((v) => !expectedMethods.includes(v)), []); // These methods have been removed, please update the table in this file. assert.deepStrictEqual(expectedMethods.filter((v) => !actualMethods.includes(v)), []); const { compare, copy, equals, fill, includes, indexOf, lastIndexOf, readBigInt64BE, readBigInt64LE, readBigUInt64BE, readBigUInt64LE, readDoubleBE, readDoubleLE, readFloatBE, readFloatLE, readInt8, readInt16BE, readInt16LE, readInt32BE, readInt32LE, readIntBE, readIntLE, readUInt8, readUInt16BE, readUInt16LE, readUInt32BE, readUInt32LE, readUIntBE, readUIntLE, subarray, slice, swap16, swap32, swap64, toJSON, toString, write, writeBigInt64BE, writeBigInt64LE, writeBigUInt64BE, writeBigUInt64LE, writeDoubleBE, writeDoubleLE, writeFloatBE, writeFloatLE, writeInt8, writeInt16BE, writeInt16LE, writeInt32BE, writeInt32LE, writeIntBE, writeIntLE, writeUInt8, writeUInt16BE, writeUInt16LE, writeUInt32BE, writeUInt32LE, writeUIntBE, writeUIntLE, [customInspectSymbol]: customInspect, } = Buffer.prototype; /** * Assert the Uint8Array is not converted to a Buffer * in the process of calling a Buffer method on it. */ function assertContentEqual(actualUint8Array, expectedBuffer) { assert.ok(!Buffer.isBuffer(actualUint8Array)); assert.ok(Buffer.isBuffer(expectedBuffer)); assert.strictEqual(actualUint8Array.length, expectedBuffer.length); for (let i = 0; i < actualUint8Array.length; i++) { assert.strictEqual(actualUint8Array[i], expectedBuffer[i], `Uint8Array and Buffer differ at ${i}`); } } // Buffer Methods: { // buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]]) const buf = Uint8Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); const target = Uint8Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); assert.strictEqual(compare.call(buf, target, 0, 4, 0, 4), 0); assert.strictEqual(compare.call(buf, target, 0, 4, 1, 5), 1); assert.strictEqual(compare.call(buf, target, 1, 5, 0, 4), -1); } { // buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]]) const sourceUint8Array = Uint8Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); const destination = new Uint8Array(4); copy.call(sourceUint8Array, destination, 1, 7, 10); assertContentEqual(destination, Buffer.of(0, 7, 8, 9)); } { // buf.equals(otherBufferLike) const emptyUint8Array = new Uint8Array(0); const emptyBuffer = Buffer.alloc(0); assert.ok(equals.call(emptyUint8Array, emptyBuffer)); assert.ok(equals.call(emptyUint8Array, emptyUint8Array)); assert.ok(equals.call(emptyUint8Array, new Uint8Array(0))); const largeUint8Array = new Uint8Array(arrayOfNumbers(9000)); const largeBuffer = Buffer.from(arrayOfNumbers(9000)); assert.ok(equals.call(largeUint8Array, largeBuffer)); assert.ok(equals.call(largeUint8Array, largeUint8Array)); assert.ok(equals.call(largeUint8Array, new Uint8Array(arrayOfNumbers(9000)))); } { // buf.fill(value[, byteOffset][, encoding]) const uint8array = new Uint8Array(10); const buffer = Buffer.alloc(10); assertContentEqual( fill.call(uint8array, '\u03a3', 0, 'utf16le'), buffer.fill('\u03a3', 0, 'utf16le') ); } { // buf.includes(value[, byteOffset][, encoding]) const uint8array = Uint8Array.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); const buffer = Buffer.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); assert.strictEqual( includes.call(uint8array, '\u03a3', 0, 'utf16le'), buffer.includes('\u03a3', 0, 'utf16le') ); } { // buf.indexOf(value[, byteOffset][, encoding]) const uint8array = Uint8Array.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); const buffer = Buffer.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); assert.strictEqual( indexOf.call(uint8array, '\u03a3', 0, 'utf16le'), buffer.indexOf('\u03a3', 0, 'utf16le') ); } { // buf.lastIndexOf(value[, byteOffset][, encoding]) const uint8array = Uint8Array.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); const buffer = Buffer.of(154, 3, 145, 3, 163, 3, 163, 3, 149, 3); assert.strictEqual( lastIndexOf.call(uint8array, '\u03a3', -5, 'utf16le'), buffer.lastIndexOf('\u03a3', -5, 'utf16le') ); } { // buf.readBigInt64BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readBigInt64BE.call(uint8array, 0), buffer.readBigInt64BE(0) ); } { // buf.readBigInt64LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readBigInt64LE.call(uint8array, 0), buffer.readBigInt64LE(0) ); } { // buf.readBigUInt64BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readBigUInt64BE.call(uint8array, 0), buffer.readBigUInt64BE(0) ); } { // buf.readBigUInt64LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readBigUInt64LE.call(uint8array, 0), buffer.readBigUInt64LE(0) ); } { // buf.readDoubleBE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readDoubleBE.call(uint8array, 0), buffer.readDoubleBE(0) ); } { // buf.readDoubleLE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0, 0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0, 0, 0, 1, 0); assert.strictEqual( readDoubleLE.call(uint8array, 0), buffer.readDoubleLE(0) ); } { // buf.readFloatBE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readFloatBE.call(uint8array, 0), buffer.readFloatBE(0) ); } { // buf.readFloatLE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readFloatLE.call(uint8array, 0), buffer.readFloatLE(0) ); } { // buf.readInt8([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readInt8.call(uint8array, 2), buffer.readInt8(2) ); } { // buf.readInt16BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readInt16BE.call(uint8array, 2), buffer.readInt16BE(2) ); } { // buf.readInt16LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readInt16LE.call(uint8array, 2), buffer.readInt16LE(2) ); } { // buf.readInt32BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readInt32BE.call(uint8array, 0), buffer.readInt32BE(0) ); } { // buf.readInt32LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readInt32LE.call(uint8array, 0), buffer.readInt32LE(0) ); } { // buf.readIntBE(offset, byteLength) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readIntBE.call(uint8array, 2, 2), buffer.readIntBE(2, 2) ); } { // buf.readIntLE(offset, byteLength) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readIntLE.call(uint8array, 2, 2), buffer.readIntLE(2, 2) ); } { // buf.readUInt8([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUInt8.call(uint8array, 2), buffer.readUInt8(2) ); } { // buf.readUInt16BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUInt16BE.call(uint8array, 2), buffer.readUInt16BE(2) ); } { // buf.readUInt16LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUInt16LE.call(uint8array, 2), buffer.readUInt16LE(2) ); } { // buf.readUInt32BE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUInt32BE.call(uint8array, 0), buffer.readUInt32BE(0) ); } { // buf.readUInt32LE([offset]) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUInt32LE.call(uint8array, 0), buffer.readUInt32LE(0) ); } { // buf.readUIntBE(offset, byteLength) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUIntBE.call(uint8array, 2, 2), buffer.readUIntBE(2, 2) ); } { // buf.readUIntLE(offset, byteLength) const uint8array = Uint8Array.of(0, 0, 1, 0); const buffer = Buffer.of(0, 0, 1, 0); assert.strictEqual( readUIntLE.call(uint8array, 2, 2), buffer.readUIntLE(2, 2) ); } { // buf.subarray() const uint8array = new Uint8Array(arrayOfNumbers(8)); const buffer = Buffer.from(arrayOfNumbers(8)); const array = subarray.call(uint8array, 2, 5); assert.ok(Buffer.isBuffer(array)); // Does convert the output type because it makes a new FastBuffer assert.deepStrictEqual( array, buffer.subarray(2, 5) ); } { // buf.slice() const uint8array = new Uint8Array(arrayOfNumbers(8)); const buffer = Buffer.from(arrayOfNumbers(8)); assertContentEqual( slice.call(uint8array, 2, 5), // Does not convert the output type because it uses "this.subarray" internally buffer.slice(2, 5) ); } { // buf.swap16() const smallUint8array = new Uint8Array(arrayOfNumbers(2)); const smallBuffer = Buffer.from(arrayOfNumbers(2)); assertContentEqual( swap16.call(smallUint8array), smallBuffer.swap16() ); const largeUint8array = new Uint8Array(arrayOfNumbers(2 * 500)); const largeBuffer = Buffer.from(arrayOfNumbers(2 * 500)); assertContentEqual( swap16.call(largeUint8array), largeBuffer.swap16() ); } { // buf.swap32() const smallUint8array = new Uint8Array(arrayOfNumbers(4)); const smallBuffer = Buffer.from(arrayOfNumbers(4)); assertContentEqual( swap32.call(smallUint8array), smallBuffer.swap32() ); const largeUint8array = new Uint8Array(arrayOfNumbers(4 * 500)); const largeBuffer = Buffer.from(arrayOfNumbers(4 * 500)); assertContentEqual( swap32.call(largeUint8array), largeBuffer.swap32() ); } { // buf.swap64() const smallUint8array = new Uint8Array(arrayOfNumbers(8)); const smallBuffer = Buffer.from(arrayOfNumbers(8)); assertContentEqual( swap64.call(smallUint8array), smallBuffer.swap64() ); const largeUint8array = new Uint8Array(arrayOfNumbers(8 * 500)); const largeBuffer = Buffer.from(arrayOfNumbers(8 * 500)); assertContentEqual( swap64.call(largeUint8array), largeBuffer.swap64() ); } { // buf.toJSON() const uint8array = Uint8Array.of(1, 2, 3, 4); const buffer = Buffer.of(1, 2, 3, 4); assert.deepStrictEqual( toJSON.call(uint8array), buffer.toJSON() ); } { // buf.toString([encoding[, start[, end]]]) assert.strictEqual(Buffer.prototype.toLocaleString, toString); const uint8array = Uint8Array.of(1, 2, 3, 4); const buffer = Buffer.of(1, 2, 3, 4); assert.deepStrictEqual( toString.call(uint8array), buffer.toString() ); assert.deepStrictEqual( toString.call(uint8array, 'utf8'), buffer.toString('utf8') ); assert.deepStrictEqual( toString.call(uint8array, 'utf16le'), buffer.toString('utf16le') ); assert.deepStrictEqual( toString.call(uint8array, 'latin1'), buffer.toString('latin1') ); assert.deepStrictEqual( toString.call(uint8array, 'base64'), buffer.toString('base64') ); assert.deepStrictEqual( toString.call(uint8array, 'base64url'), buffer.toString('base64url') ); assert.deepStrictEqual( toString.call(uint8array, 'hex'), buffer.toString('hex') ); assert.deepStrictEqual( toString.call(uint8array, 'ascii'), buffer.toString('ascii') ); assert.deepStrictEqual( toString.call(uint8array, 'binary'), buffer.toString('binary') ); assert.deepStrictEqual( toString.call(uint8array, 'ucs2'), buffer.toString('ucs2') ); } { // buf.write(string[, offset[, length]][, encoding]) const bufferSize = 16; // UTF-8 encoding { const testString = 'Hello, world!'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'utf8'); const expectedReturnValue = buffer.write(testString, 0, 'utf8'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Hex encoding { const testString = 'a1b2c3d4e5'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'hex'); const expectedReturnValue = buffer.write(testString, 0, 'hex'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Base64 encoding { const testString = 'SGVsbG8gd29ybGQ='; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'base64'); const expectedReturnValue = buffer.write(testString, 0, 'base64'); assertContentEqual(uint8array, buffer); assert.strictEqual(returnValue, expectedReturnValue); } // Latin1 encoding { const testString = '¡Hola!'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'latin1'); const expectedReturnValue = buffer.write(testString, 0, 'latin1'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Utf16le encoding { const testString = '\uD835\uDC9C\uD835\uDCB7\uD835\uDCB8'; // Unicode string const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'utf16le'); const expectedReturnValue = buffer.write(testString, 0, 'utf16le'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Binary encoding { const testString = '\x00\x01\x02\x03'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'binary'); const expectedReturnValue = buffer.write(testString, 0, 'binary'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Base64url encoding { const testString = 'SGVsbG9fV29ybGQ'; // Valid base64url string const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'base64url'); const expectedReturnValue = buffer.write(testString, 0, 'base64url'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Ascii encoding { const testString = 'ASCII!'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'ascii'); const expectedReturnValue = buffer.write(testString, 0, 'ascii'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } // Ucs2 encoding { const testString = 'A\uD83D\uDC96B'; const uint8array = new Uint8Array(bufferSize); const buffer = Buffer.alloc(bufferSize); const returnValue = write.call(uint8array, testString, 0, 'ucs2'); const expectedReturnValue = buffer.write(testString, 0, 'ucs2'); assert.strictEqual(returnValue, expectedReturnValue); assertContentEqual(uint8array, buffer); } } { // buf.writeBigInt64BE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeBigInt64BE.call(uint8array, 1234567890123456789n, 0); buffer.writeBigInt64BE(1234567890123456789n, 0); assertContentEqual(uint8array, buffer); } { // buf.writeBigInt64LE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeBigInt64LE.call(uint8array, 1234567890123456789n, 0); buffer.writeBigInt64LE(1234567890123456789n, 0); assertContentEqual(uint8array, buffer); } { // buf.writeBigUInt64BE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeBigUInt64BE.call(uint8array, 12345678901234567890n, 0); buffer.writeBigUInt64BE(12345678901234567890n, 0); assertContentEqual(uint8array, buffer); } { // buf.writeBigUInt64LE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeBigUInt64LE.call(uint8array, 12345678901234567890n, 0); buffer.writeBigUInt64LE(12345678901234567890n, 0); assertContentEqual(uint8array, buffer); } { // buf.writeDoubleBE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeDoubleBE.call(uint8array, 12345.6789, 0); buffer.writeDoubleBE(12345.6789, 0); assertContentEqual(uint8array, buffer); } { // buf.writeDoubleLE(value[, offset]) const uint8array = new Uint8Array(8); const buffer = Buffer.alloc(8); writeDoubleLE.call(uint8array, 12345.6789, 0); buffer.writeDoubleLE(12345.6789, 0); assertContentEqual(uint8array, buffer); } { // buf.writeFloatBE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeFloatBE.call(uint8array, 12345.67, 0); buffer.writeFloatBE(12345.67, 0); assertContentEqual(uint8array, buffer); } { // buf.writeFloatLE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeFloatLE.call(uint8array, 12345.67, 0); buffer.writeFloatLE(12345.67, 0); assertContentEqual(uint8array, buffer); } { // buf.writeInt8(value[, offset]) const uint8array = new Uint8Array(1); const buffer = Buffer.alloc(1); writeInt8.call(uint8array, -123, 0); buffer.writeInt8(-123, 0); assertContentEqual(uint8array, buffer); } { // buf.writeInt16BE(value[, offset]) const uint8array = new Uint8Array(2); const buffer = Buffer.alloc(2); writeInt16BE.call(uint8array, -12345, 0); buffer.writeInt16BE(-12345, 0); assertContentEqual(uint8array, buffer); } { // buf.writeInt16LE(value[, offset]) const uint8array = new Uint8Array(2); const buffer = Buffer.alloc(2); writeInt16LE.call(uint8array, -12345, 0); buffer.writeInt16LE(-12345, 0); assertContentEqual(uint8array, buffer); } { // buf.writeInt32BE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeInt32BE.call(uint8array, -123456789, 0); buffer.writeInt32BE(-123456789, 0); assertContentEqual(uint8array, buffer); } { // buf.writeInt32LE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeInt32LE.call(uint8array, -123456789, 0); buffer.writeInt32LE(-123456789, 0); assertContentEqual(uint8array, buffer); } { // buf.writeIntBE(value, offset, byteLength) const uint8array = new Uint8Array(3); const buffer = Buffer.alloc(3); writeIntBE.call(uint8array, -1234567, 0, 3); buffer.writeIntBE(-1234567, 0, 3); assertContentEqual(uint8array, buffer); } { // buf.writeIntLE(value, offset, byteLength) const uint8array = new Uint8Array(3); const buffer = Buffer.alloc(3); writeIntLE.call(uint8array, -1234567, 0, 3); buffer.writeIntLE(-1234567, 0, 3); assertContentEqual(uint8array, buffer); } { // buf.writeUInt8(value[, offset]) const uint8array = new Uint8Array(1); const buffer = Buffer.alloc(1); writeUInt8.call(uint8array, 255, 0); buffer.writeUInt8(255, 0); assertContentEqual(uint8array, buffer); } { // buf.writeUInt16BE(value[, offset]) const uint8array = new Uint8Array(2); const buffer = Buffer.alloc(2); writeUInt16BE.call(uint8array, 65535, 0); buffer.writeUInt16BE(65535, 0); assertContentEqual(uint8array, buffer); } { // buf.writeUInt16LE(value[, offset]) const uint8array = new Uint8Array(2); const buffer = Buffer.alloc(2); writeUInt16LE.call(uint8array, 65535, 0); buffer.writeUInt16LE(65535, 0); assertContentEqual(uint8array, buffer); } { // buf.writeUInt32BE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeUInt32BE.call(uint8array, 4294967295, 0); buffer.writeUInt32BE(4294967295, 0); assertContentEqual(uint8array, buffer); } { // buf.writeUInt32LE(value[, offset]) const uint8array = new Uint8Array(4); const buffer = Buffer.alloc(4); writeUInt32LE.call(uint8array, 4294967295, 0); buffer.writeUInt32LE(4294967295, 0); assertContentEqual(uint8array, buffer); } { // buf.writeUIntBE(value, offset, byteLength) const uint8array = new Uint8Array(3); const buffer = Buffer.alloc(3); writeUIntBE.call(uint8array, 1234567, 0, 3); buffer.writeUIntBE(1234567, 0, 3); assertContentEqual(uint8array, buffer); } { // buf.writeUIntLE(value, offset, byteLength) const uint8array = new Uint8Array(3); const buffer = Buffer.alloc(3); writeUIntLE.call(uint8array, 1234567, 0, 3); buffer.writeUIntLE(1234567, 0, 3); assertContentEqual(uint8array, buffer); } { // buf[Symbol.for('nodejs.util.inspect.custom')]() assert.strictEqual(Buffer.prototype.inspect, customInspect); // Ensure these methods are exactly the same. const emptyUint8Array = new Uint8Array(0); const emptyBuffer = Buffer.alloc(0); assert.strictEqual( customInspect.call(emptyUint8Array), emptyBuffer[customInspectSymbol]().replace('Buffer', 'Uint8Array') ); const smallUint8Array = Uint8Array.of(1, 2, 3, 4, 5, 6, 7, 8); const smallBuffer = Buffer.of(1, 2, 3, 4, 5, 6, 7, 8); assert.strictEqual( customInspect.call(smallUint8Array), smallBuffer[customInspectSymbol]().replace('Buffer', 'Uint8Array') ); const largeUint8Array = new Uint8Array(arrayOfNumbers(9000)); const largeBuffer = Buffer.from(arrayOfNumbers(9000)); assert.strictEqual( customInspect.call(largeUint8Array), largeBuffer[customInspectSymbol]().replace('Buffer', 'Uint8Array') ); }