byte-rw
Version:
Byte reader/writer for buffers and streams in typescript/javascript
76 lines (59 loc) • 2.74 kB
text/typescript
import { describe, it } from "mocha";
import { DataViewByteReader } from "./reader.js"
import { DataViewByteWriter } from "./writer.js"
import { assert } from "chai";
describe("DataViewByteReader", () => {
it("should read data written", () => {
const data = [5522, 12.5, 0, 100]
const buffer = new ArrayBuffer(4 * data.length)
const float32 = new Float32Array(buffer)
const reader = new DataViewByteReader(new DataView(buffer), true)
for (let i = 0; i < data.length; i++)
float32[i] = data[i]
for (let i = 0; i < data.length; i++) {
const read = reader.readFloat32()
assert.equal(read, data[i])
}
})
it("should read uint32's into twice as many uint16's (little endian)", () => {
const uint32s = [0x12345678, 0xABCD8765]
const uint16s = [0x5678, 0x1234, 0x8765, 0xABCD]
const littleEndian = true
const buffer = new ArrayBuffer(4 * uint32s.length)
const writer = new DataViewByteWriter(new DataView(buffer), littleEndian)
for (let i = 0; i < uint32s.length; i++)
writer.writeUint32(uint32s[i])
const reader = new DataViewByteReader(new DataView(buffer), littleEndian)
for (let i = 0; i < uint16s.length; i++) {
const read = reader.readUint16()
assert.equal(read, uint16s[i])
}
})
it("should read uint32's into twice as many uint16's (big endian)", () => {
const uint32s = [0x12345678, 0xABCD8765]
const uint16s = [0x1234, 0x5678, 0xABCD, 0x8765]
const littleEndian = false
const buffer = new ArrayBuffer(4 * uint32s.length)
const writer = new DataViewByteWriter(new DataView(buffer), littleEndian)
for (let i = 0; i < uint32s.length; i++)
writer.writeUint32(uint32s[i])
const reader = new DataViewByteReader(new DataView(buffer), littleEndian)
for (let i = 0; i < uint16s.length; i++) {
const read = reader.readUint16()
assert.equal(read, uint16s[i])
}
})
it("should read heterogeneous data", () => {
const dataview = new DataView(new ArrayBuffer(64))
const writer = new DataViewByteWriter(dataview)
const reader = new DataViewByteReader(dataview)
writer.writeUint16(0xABCD)
assert.equal(reader.readUint16(), 0xABCD)
writer.writeUint32(0xcc33ffff)
assert.equal(reader.readUint32(), 0xcc33ffff)
writer.writeString("Encoded string")
assert.equal(reader.readString(), "Encoded string")
writer.writeString("Another string")
assert.equal(reader.readString(), "Another string")
})
})