mirror of
https://github.com/codedread/bitjs
synced 2025-10-03 09:39:16 +02:00
Add some tests for BitStreams
This commit is contained in:
parent
e7ef46fb78
commit
981ac156ac
2 changed files with 82 additions and 23 deletions
|
@ -53,7 +53,7 @@ bitjs.io.ByteBuffer = class {
|
|||
* @param {number} numBytes The number of bytes to write the number into.
|
||||
*/
|
||||
writeNumber(num, numBytes) {
|
||||
if (numBytes < 1) {
|
||||
if (numBytes < 1 || !numBytes) {
|
||||
throw 'Trying to write into too few bytes: ' + numBytes;
|
||||
}
|
||||
if (num < 0) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Unit tests for bitjs.io.ByteStream and bitjs.io.ByteBuffer</title>
|
||||
<title>Unit tests for bitjs.io.ByteBuffer, bitjs.io.ByteStream, and bitjs.io.BitStream</title>
|
||||
<script src="muther.js"></script>
|
||||
<script src="../io/bitstream.js"></script>
|
||||
<script src="../io/bytebuffer.js"></script>
|
||||
|
@ -9,39 +9,44 @@
|
|||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var buffer;
|
||||
let buffer;
|
||||
muther.go({
|
||||
setUp: function() {
|
||||
buffer = new bitjs.io.ByteBuffer(10);
|
||||
buffer = new bitjs.io.ByteBuffer(4);
|
||||
},
|
||||
tests: {
|
||||
testWriteNumberThenRead: function() {
|
||||
testWriteNumberThenRead() {
|
||||
buffer.writeNumber(1234, 4);
|
||||
var stream = new bitjs.io.ByteStream(buffer.data);
|
||||
const stream = new bitjs.io.ByteStream(buffer.data);
|
||||
muther.assertEquals(1234, stream.peekNumber(4));
|
||||
},
|
||||
testWriteUnsignedByteThenRead: function() {
|
||||
|
||||
testWriteUnsignedByteThenRead() {
|
||||
buffer.writeNumber(192, 1);
|
||||
var stream = new bitjs.io.ByteStream(buffer.data);
|
||||
const stream = new bitjs.io.ByteStream(buffer.data);
|
||||
muther.assertEquals(192, stream.readNumber(1));
|
||||
},
|
||||
testWriteSignedByteThenRead: function() {
|
||||
|
||||
testWriteSignedByteThenRead() {
|
||||
buffer.writeSignedNumber(-120, 1);
|
||||
var stream = new bitjs.io.ByteStream(buffer.data);
|
||||
const stream = new bitjs.io.ByteStream(buffer.data);
|
||||
muther.assertEquals(-120, stream.readSignedNumber(1));
|
||||
},
|
||||
testWriteSignedPositiveNumberThenRead: function() {
|
||||
|
||||
testWriteSignedPositiveNumberThenRead() {
|
||||
buffer.writeSignedNumber(1234, 4);
|
||||
var stream = new bitjs.io.ByteStream(buffer.data);
|
||||
const stream = new bitjs.io.ByteStream(buffer.data);
|
||||
muther.assertEquals(1234, stream.readSignedNumber(4));
|
||||
},
|
||||
testWriteSignedNegativeNumberThenRead: function() {
|
||||
|
||||
testWriteSignedNegativeNumberThenRead() {
|
||||
buffer.writeSignedNumber(-128, 1);
|
||||
var stream = new bitjs.io.ByteStream(buffer.data);
|
||||
const stream = new bitjs.io.ByteStream(buffer.data);
|
||||
muther.assertEquals(-128, stream.readSignedNumber(1));
|
||||
},
|
||||
testWriteOverflowUnsigned: function() {
|
||||
var passed = false;
|
||||
|
||||
testWriteOverflowUnsigned() {
|
||||
let passed = false;
|
||||
try {
|
||||
buffer.writeNumber(256, 1);
|
||||
} catch (e) {
|
||||
|
@ -49,8 +54,9 @@
|
|||
}
|
||||
muther.assert(passed);
|
||||
},
|
||||
testWriteOverflowSignedPositive: function() {
|
||||
var passed = false;
|
||||
|
||||
testWriteOverflowSignedPositive() {
|
||||
let passed = false;
|
||||
try {
|
||||
buffer.writeSignedNumber(128, 1);
|
||||
} catch (e) {
|
||||
|
@ -58,8 +64,9 @@
|
|||
}
|
||||
muther.assert(passed);
|
||||
},
|
||||
testWriteOverflowSignedNegative: function() {
|
||||
var passed = false;
|
||||
|
||||
testWriteOverflowSignedNegative() {
|
||||
let passed = false;
|
||||
try {
|
||||
buffer.writeSignedNumber(-129, 1);
|
||||
} catch (e) {
|
||||
|
@ -67,6 +74,58 @@
|
|||
}
|
||||
muther.assert(passed);
|
||||
},
|
||||
|
||||
testBitPeekAndRead_RTL() {
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
|
||||
const stream = new bitjs.io.BitStream(buffer.data.buffer, true /* rtl */);
|
||||
// 0110 = 2 + 4 = 6
|
||||
muther.assertEquals(6, stream.readBits(4));
|
||||
// 0101 011 = 1 + 2 + 8 + 32 = 43
|
||||
muther.assertEquals(43, stream.readBits(7));
|
||||
// 00101 01100101 01 = 1 + 4 + 16 + 128 + 256 + 1024 + 4096 = 5525
|
||||
muther.assertEquals(5525, stream.readBits(15));
|
||||
// 10010 = 2 + 16 = 18
|
||||
muther.assertEquals(18, stream.readBits(5));
|
||||
|
||||
// Only 1 bit left in the buffer, make sure it throws an error if we try to read more.
|
||||
let passed = false;
|
||||
try {
|
||||
stream.readBits(2);
|
||||
} catch (e) {
|
||||
passed = true;
|
||||
}
|
||||
muther.assert(passed, 'Did not throw');
|
||||
},
|
||||
|
||||
testBitPeekAndRead_LTR() {
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
buffer.writeNumber(Number('0b01100101'), 1);
|
||||
|
||||
const stream = new bitjs.io.BitStream(buffer.data.buffer, false /* rtl */);
|
||||
// 0101 = 2 + 4 = 6
|
||||
muther.assertEquals(5, stream.readBits(4));
|
||||
// 101 0110 = 2 + 4 + 16 + 64 = 86
|
||||
muther.assertEquals(86, stream.readBits(7));
|
||||
// 01 01100101 01100 = 4 + 8 + 32 + 128 + 1024 + 2048 + 8192 = 11436
|
||||
muther.assertEquals(11436, stream.readBits(15));
|
||||
// 11001 = 1 + 8 + 16 = 25
|
||||
muther.assertEquals(25, stream.readBits(5));
|
||||
|
||||
// Only 1 bit left in the buffer, make sure it throws an error if we try to read more.
|
||||
let passed = false;
|
||||
try {
|
||||
stream.readBits(2);
|
||||
} catch (e) {
|
||||
passed = true;
|
||||
}
|
||||
muther.assert(passed, 'Did not throw');
|
||||
},
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue