mirror of
https://github.com/protobufjs/protobuf.js.git
synced 2025-12-08 20:58:55 +00:00
71 lines
4.1 KiB
JavaScript
71 lines
4.1 KiB
JavaScript
var tape = require("tape");
|
|
|
|
var protobuf = require("..");
|
|
var LongBits = protobuf.util.LongBits;
|
|
var Long = protobuf.util.Long;
|
|
|
|
tape.test("longbits", function(test) {
|
|
|
|
test.test("zero", function(test) {
|
|
var zero = LongBits.zero;
|
|
test.equal(zero.lo, 0, "should have low bits of 0");
|
|
test.equal(zero.hi, 0, "should have high bits of 0");
|
|
test.equal(zero.toNumber(), 0, "should convert to number 0 (signed)");
|
|
test.equal(zero.toNumber(true), 0, "should convert to number 0 (unsigned)");
|
|
test.equal(zero.zzEncode(), zero, "should return itself when zig-zag encoded");
|
|
test.equal(zero.length(), 1, "should return a byte length of 1");
|
|
test.equal(LongBits.fromNumber(0), zero, "should be returned by fromNumber(0)");
|
|
test.equal(LongBits.from(0), zero, "should be returned by from(0)");
|
|
test.equal(LongBits.from(Long.ZERO), zero, "should be returned by from(Long.ZERO)");
|
|
test.same(zero.toLong(), Long.ZERO, "should equal Long.ZERO (signed)");
|
|
test.same(zero.toLong(true), Long.UZERO, "should equal Long.UZERO (unsigned)");
|
|
test.equal(zero.toHash(), "\0\0\0\0\0\0\0\0", "should convert to a binary hash of 8x0");
|
|
test.equal(LongBits.fromHash("\0\0\0\0\0\0\0\0"), zero, "should be returned for a binary hash of 8x0");
|
|
test.end();
|
|
});
|
|
|
|
[
|
|
{ low: 0, high: 0, unsigned: false, length: 1 },
|
|
{ low: 0, high: 0, unsigned: true, length: 1 },
|
|
{ low: (1 << 7) - 1, high: 0, unsigned: false, length: 1 },
|
|
{ low: (1 << 7) - 1, high: 0, unsigned: true, length: 1 },
|
|
{ low: (1 << 14) - 1, high: 0, unsigned: false, length: 2 },
|
|
{ low: (1 << 14) - 1, high: 0, unsigned: true, length: 2 },
|
|
{ low: (1 << 21) - 1, high: 0, unsigned: false, length: 3 },
|
|
{ low: (1 << 21) - 1, high: 0, unsigned: true, length: 3 },
|
|
{ low: (1 << 28) - 1, high: 0, unsigned: false, length: 4 },
|
|
{ low: (1 << 28) - 1, high: 0, unsigned: true, length: 4 },
|
|
{ low: -1, high: (1 << 3) - 1, unsigned: false, length: 5 },
|
|
{ low: -1, high: (1 << 3) - 1, unsigned: true, length: 5 },
|
|
{ low: -1, high: (1 << 10) - 1, unsigned: false, length: 6 },
|
|
{ low: -1, high: (1 << 10) - 1, unsigned: true, length: 6 },
|
|
{ low: -1, high: (1 << 17) - 1, unsigned: false, length: 7 },
|
|
{ low: -1, high: (1 << 17) - 1, unsigned: true, length: 7 },
|
|
{ low: -1, high: (1 << 24) - 1, unsigned: false, length: 8 },
|
|
{ low: -1, high: (1 << 24) - 1, unsigned: true, length: 8 },
|
|
{ low: -1, high: (1 << 31) - 1 | 0, unsigned: false, length: 9 },
|
|
{ low: -1, high: (1 << 31) - 1 | 0, unsigned: true, length: 9 },
|
|
{ low: -1, high: -1, unsigned: false, length: 10 },
|
|
{ low: -1, high: -1, unsigned: true, length: 10 },
|
|
{ low: 0, high: 1 << 31, unsigned: false, length: 10 },
|
|
{ low: 0, high: 1 << 31, unsigned: true, length: 10 }
|
|
]
|
|
.forEach(function(value) {
|
|
var long = Long.fromValue(value);
|
|
test.equal(long.unsigned, value.unsigned, long + " should be signed/unsigned");
|
|
var bits = LongBits.from(value);
|
|
test.equal(bits.lo, long.low >>> 0, long + " should have equal low bits");
|
|
test.equal(bits.hi, long.high >>> 0, long + " should have equal high bits");
|
|
test.equal(bits.length(), value.length, long + " should return an equal length");
|
|
test.equal(bits.toNumber(value.unsigned), long.toNumber(), long + " should convert to an equal number");
|
|
var number = long.toNumber(value.unsigned);
|
|
if (number <= 9007199254740991 && number >= -9007199254740991)
|
|
test.same(LongBits.fromNumber(number), bits, long + " should convert hence and forth equally (where safe)");
|
|
test.same(bits.toLong(value.unsigned), long, long + " should convert to an equal Long");
|
|
var comp = String.fromCharCode.apply(String, long.toBytesLE());
|
|
test.equal(bits.toHash(), comp, long + " should convert to an equal hash");
|
|
test.same(bits, LongBits.fromHash(comp), long + " should convert back to an equal value");
|
|
});
|
|
|
|
test.end();
|
|
}); |