mirror of
https://github.com/musix-org/musix-oss
synced 2024-12-24 11:13:18 +00:00
100 lines
2.9 KiB
JavaScript
100 lines
2.9 KiB
JavaScript
|
var tape = require("tape");
|
||
|
|
||
|
var float = require("..");
|
||
|
|
||
|
tape.test("float", function(test) {
|
||
|
|
||
|
// default
|
||
|
test.test(test.name + " - typed array", function(test) {
|
||
|
runTest(float, test);
|
||
|
});
|
||
|
|
||
|
// ieee754
|
||
|
test.test(test.name + " - fallback", function(test) {
|
||
|
var F32 = global.Float32Array,
|
||
|
F64 = global.Float64Array;
|
||
|
delete global.Float32Array;
|
||
|
delete global.Float64Array;
|
||
|
runTest(float({}), test);
|
||
|
global.Float32Array = F32;
|
||
|
global.Float64Array = F64;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
function runTest(float, test) {
|
||
|
|
||
|
var common = [
|
||
|
0,
|
||
|
-0,
|
||
|
Infinity,
|
||
|
-Infinity,
|
||
|
0.125,
|
||
|
1024.5,
|
||
|
-4096.5,
|
||
|
NaN
|
||
|
];
|
||
|
|
||
|
test.test(test.name + " - using 32 bits", function(test) {
|
||
|
common.concat([
|
||
|
3.4028234663852886e+38,
|
||
|
1.1754943508222875e-38,
|
||
|
1.1754946310819804e-39
|
||
|
])
|
||
|
.forEach(function(value) {
|
||
|
var strval = value === 0 && 1 / value < 0 ? "-0" : value.toString();
|
||
|
test.ok(
|
||
|
checkValue(value, 4, float.readFloatLE, float.writeFloatLE, Buffer.prototype.writeFloatLE),
|
||
|
"should write and read back " + strval + " (32 bit LE)"
|
||
|
);
|
||
|
test.ok(
|
||
|
checkValue(value, 4, float.readFloatBE, float.writeFloatBE, Buffer.prototype.writeFloatBE),
|
||
|
"should write and read back " + strval + " (32 bit BE)"
|
||
|
);
|
||
|
});
|
||
|
test.end();
|
||
|
});
|
||
|
|
||
|
test.test(test.name + " - using 64 bits", function(test) {
|
||
|
common.concat([
|
||
|
1.7976931348623157e+308,
|
||
|
2.2250738585072014e-308,
|
||
|
2.2250738585072014e-309
|
||
|
])
|
||
|
.forEach(function(value) {
|
||
|
var strval = value === 0 && 1 / value < 0 ? "-0" : value.toString();
|
||
|
test.ok(
|
||
|
checkValue(value, 8, float.readDoubleLE, float.writeDoubleLE, Buffer.prototype.writeDoubleLE),
|
||
|
"should write and read back " + strval + " (64 bit LE)"
|
||
|
);
|
||
|
test.ok(
|
||
|
checkValue(value, 8, float.readDoubleBE, float.writeDoubleBE, Buffer.prototype.writeDoubleBE),
|
||
|
"should write and read back " + strval + " (64 bit BE)"
|
||
|
);
|
||
|
});
|
||
|
test.end();
|
||
|
});
|
||
|
|
||
|
test.end();
|
||
|
}
|
||
|
|
||
|
function checkValue(value, size, read, write, write_comp) {
|
||
|
var buffer = new Buffer(size);
|
||
|
write(value, buffer, 0);
|
||
|
var value_comp = read(buffer, 0);
|
||
|
var strval = value === 0 && 1 / value < 0 ? "-0" : value.toString();
|
||
|
if (value !== value) {
|
||
|
if (value_comp === value_comp)
|
||
|
return false;
|
||
|
} else if (value_comp !== value)
|
||
|
return false;
|
||
|
|
||
|
var buffer_comp = new Buffer(size);
|
||
|
write_comp.call(buffer_comp, value, 0);
|
||
|
for (var i = 0; i < size; ++i)
|
||
|
if (buffer[i] !== buffer_comp[i]) {
|
||
|
console.error(">", buffer, buffer_comp);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|