You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

205 lines
4.0 KiB

'use strict';
/*global describe, it*/
var assert = require('assert');
var _ = require('lodash');
var MicroBuffer = require('./');
var mb;
function cmpBuf(a, b) {
if (a.length !== b.length) {
throw new assert.AssertionError({
actual: a,
expected: b,
operator: 'compare'
});
}
for (var i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
throw new assert.AssertionError({
actual: a,
expected: b,
operator: 'compare'
});
}
}
}
describe('MicroBuffer', function () {
it('create by size', function () {
mb = new MicroBuffer(5);
assert.equal(mb.length, 5);
assert.ok(_.isTypedArray(mb.buffer));
});
it('wrap array', function () {
mb = new MicroBuffer([ 1, 2, 3, 4 ]);
cmpBuf(mb.toArray(), [ 1, 2, 3, 4 ]);
mb = new MicroBuffer([ 1, 2, 3, 4 ], 1, 2);
cmpBuf(mb.toArray(), [ 2, 3 ]);
});
it('wrap typed array', function () {
mb = new MicroBuffer(new Uint8Array([ 1, 2, 3, 4 ]));
cmpBuf(mb.toArray(), [ 1, 2, 3, 4 ]);
mb = new MicroBuffer(new Uint8Array([ 1, 2, 3, 4 ]), 1, 2);
cmpBuf(mb.toArray(), [ 2, 3 ]);
});
it('wrap MicroBuffer', function () {
mb = new MicroBuffer(new MicroBuffer([ 1, 2, 3, 4 ]));
cmpBuf(mb.toArray(), [ 1, 2, 3, 4 ]);
mb = new MicroBuffer(new MicroBuffer([ 1, 2, 3, 4 ]), 1, 2);
cmpBuf(mb.toArray(), [ 2, 3 ]);
});
it('get/set numbers', function () {
mb = new MicroBuffer(4);
mb.setUint8(0, 0xAA);
mb.setUint8(1, 0x55);
mb.setUint16(2, 0x88EE);
assert.equal(mb.getUint8(0), 0xAA);
assert.equal(mb.getUint8(1), 0x55);
assert.equal(mb.getUint8(2), 0x88);
assert.equal(mb.getUint8(3), 0xEE);
assert.equal(mb.getUint16(0), 0xAA55);
assert.equal(mb.getUint16(2), 0x88EE);
assert.equal(mb.getUint32(0), 0xAA5588EE);
mb = new MicroBuffer(4);
mb.setUint32(0, 0xAA5588EE);
assert.equal(mb.getUint32(0), 0xAA5588EE);
});
it('get/set numbers LE', function () {
mb = new MicroBuffer(4);
mb.setUint16(0, 0x88EE, true);
assert.equal(mb.getUint16(0), 0xEE88);
mb = new MicroBuffer(4);
mb.setUint32(0, 0xAA5588EE, true);
assert.equal(mb.getUint32(0), 0xEE8855AA);
});
it('write numbers', function () {
mb = new MicroBuffer(14);
mb.writeUint8(1);
assert.equal(mb.tell(), 1);
mb.writeInt8(-1);
assert.equal(mb.tell(), 2);
mb.writeUint16(0xAA55);
assert.equal(mb.tell(), 4);
mb.writeInt16(-2);
assert.equal(mb.tell(), 6);
mb.writeUint32(0xEE33AA55);
assert.equal(mb.tell(), 10);
mb.writeInt32(-3);
assert.equal(mb.tell(), 14);
cmpBuf(mb.toArray(), [
1,
0xFF,
0xAA, 0x55,
0xFF, 0xFE,
0xEE, 0x33, 0xAA, 0x55,
0xFF, 0xFF, 0xFF, 0xFD
]);
});
it('write numbers LE', function () {
mb = new MicroBuffer(4);
mb.writeUint16(0xAA55, true);
mb.writeInt16(-2, true);
cmpBuf(mb.toArray(), [
0x55, 0xAA,
0xFE, 0xFF
]);
mb = new MicroBuffer(8);
mb.writeUint32(0xEE33AA55, true);
mb.writeInt32(-3, true);
cmpBuf(mb.toArray(), [
0x55, 0xAA, 0x33, 0xEE,
0xFD, 0xFF, 0xFF, 0xFF
]);
});
it('write Uint64', function () {
mb = new MicroBuffer(8);
mb.writeUint64(0x112233445566);
cmpBuf(mb.toArray(), [
0x00, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66
]);
});
it('seek/fill', function () {
mb = new MicroBuffer(4);
mb.fill(0x99);
mb.seek(2);
mb.writeUint16(0xAA55);
assert.equal(mb.getUint32(0), 0x9999AA55);
});
it('writeBytes', function () {
mb = new MicroBuffer(4);
mb.writeBytes([ 0x00, 0xFF ]);
mb.writeBytes(new Uint8Array([ 0xAA, 0x55 ]));
assert.equal(mb.getUint32(0), 0x00FFAA55);
});
it('toString', function () {
mb = new MicroBuffer([ 0xAA, 0x55, 0x00, 0xFF ]);
var str = mb.toString();
assert.equal(str.charCodeAt(0), 0xAA);
assert.equal(str.charCodeAt(1), 0x55);
assert.equal(str.charCodeAt(2), 0x00);
assert.equal(str.charCodeAt(3), 0xFF);
});
});