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; }