diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..825fc67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.DS_Store +npm-debug.log diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ddb6a90 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Robert Kieffer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/package.json b/package.json index 524f5a6..a57cb05 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,27 @@ { - "name" : "node-int64", - "description" : "Support for representing 64-bit integers in JavaScript", - "url" : "http://github.com/broofa/node-int64", - "keywords" : ["math", "integer", "int64"], - "author" : "Robert Kieffer ", - "contributors" : [], - "dependencies" : {}, - "lib" : ".", - "main" : "./Int64.js", - "version" : "0.3.2", - "repository": - { "type" : "git", - "url" : "https://github.com/broofa/node-int64" - } + "name": "node-int64", + "description": "Support for representing 64-bit integers in JavaScript", + "url": "http://github.com/broofa/node-int64", + "keywords": [ + "math", + "integer", + "int64" + ], + "author": "Robert Kieffer ", + "contributors": [], + "dependencies": {}, + "license": "MIT", + "lib": ".", + "main": "./Int64.js", + "version": "0.3.3", + "scripts": { + "test": "nodeunit test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/broofa/node-int64" + }, + "devDependencies": { + "nodeunit": "^0.9.0" + } } diff --git a/test.js b/test.js index a5b94fe..1187364 100644 --- a/test.js +++ b/test.js @@ -1,58 +1,83 @@ var assert = require('assert'); var Int64 = require('./Int64'); -var args = [ - [0], '0000000000000000', 0, - [1], '0000000000000001', 1, - [-1], 'ffffffffffffffff', -1, - [1e18], '0de0b6b3a7640000', 1e18, - ['0001234500654321'], '0001234500654321', 0x1234500654321, - ['0ff1234500654321'], '0ff1234500654321', 0xff1234500654300, // Imprecise! - [0xff12345, 0x654321], '0ff1234500654321', 0xff1234500654300, // Imprecise! - [0xfffaffff, 0xfffff700],'fffafffffffff700', -0x5000000000900, - [0xafffffff, 0xfffff700],'affffffffffff700', -0x5000000000000800, // Imprecise! - ['0x0000123450654321'], '0000123450654321', 0x123450654321, - ['0xFFFFFFFFFFFFFFFF'], 'ffffffffffffffff', -1 -]; - -// Test constructor argments - -for (var i = 0; i < args.length; i += 3) { - var a = args[i], octets = args[i+1], number = args[i+2]; - console.log('Testing ' + a.join(', ')); - // Create instance - var x = new Int64(); - Int64.apply(x, a); - - assert.equal(x.toOctetString(), octets, - 'Constuctor with ' + args.join(', ')); - - assert.equal(x.toNumber(true), number); -} - -// Test buffer output - -var intUnderTest = new Int64(0xfffaffff, 0xfffff700); -var expectedBuffer = new Buffer([0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00]); -console.log('Testing '+intUnderTest.toOctetString()+' as Buffer'); -assert.equal(intUnderTest.toBuffer().toString('hex'), expectedBuffer.toString('hex')); - -var targetBuffer = new Buffer(8); -intUnderTest.copy(targetBuffer); -assert.equal(targetBuffer.toString('hex'), expectedBuffer.toString('hex')); - -// Test construction from existing buffer with offset, and buffer outputs on same. - -var sourceBuffer = new Buffer(16); -sourceBuffer.writeUInt32BE(0xfffaffff, 2); -sourceBuffer.writeUInt32BE(0xfffff700, 6); -intUnderTest = new Int64(sourceBuffer, 2); -assert.equal(intUnderTest.toBuffer().toString('hex'), expectedBuffer.toString('hex')); - -targetBuffer = new Buffer(16); -intUnderTest.copy(targetBuffer, 4); -assert.equal(targetBuffer.slice(4, 12).toString('hex'), expectedBuffer.toString('hex')); - -console.log(new Int64(new Buffer([0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])).toBuffer()); - -console.log(new Int64(new Uint8Array([0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])).toBuffer()); +exports.setUp = function(done) { + done(); +}; + +exports.testBufferToString = function(test) { + var int = new Int64(0xfffaffff, 0xfffff700); + test.equal( + int.toBuffer().toString('hex'), + 'fffafffffffff700', + 'Buffer to string conversion' + ); + test.done(); +}; + +exports.testBufferCopy = function(test) { + var src = new Int64(0xfffaffff, 0xfffff700); + var dst = new Buffer(8); + + src.copy(dst); + + test.deepEqual( + dst, + new Buffer([0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00]), + 'Copy to buffer' + ); + + test.done(); +}; + +exports.testValueRepresentation = function(test) { + var args = [ + [0], '0000000000000000', 0, + [1], '0000000000000001', 1, + [-1], 'ffffffffffffffff', -1, + [1e18], '0de0b6b3a7640000', 1e18, + ['0001234500654321'], '0001234500654321', 0x1234500654321, + ['0ff1234500654321'], '0ff1234500654321', 0xff1234500654300, // Imprecise! + [0xff12345, 0x654321], '0ff1234500654321', 0xff1234500654300, // Imprecise! + [0xfffaffff, 0xfffff700],'fffafffffffff700', -0x5000000000900, + [0xafffffff, 0xfffff700],'affffffffffff700', -0x5000000000000800, // Imprecise! + ['0x0000123450654321'], '0000123450654321', 0x123450654321, + ['0xFFFFFFFFFFFFFFFF'], 'ffffffffffffffff', -1 + ]; + + // Test constructor argments + + for (var i = 0; i < args.length; i += 3) { + var a = args[i], octets = args[i+1], number = args[i+2]; + + // Create instance + var x = new Int64(); + Int64.apply(x, a); + + test.equal(x.toOctetString(), octets, 'Constuctor with ' + args.join(', ')); + test.equal(x.toNumber(true), number); + } + + test.done(); +}; + +exports.testBufferOffsets = function(test) { + var sourceBuffer = new Buffer(16); + sourceBuffer.writeUInt32BE(0xfffaffff, 2); + sourceBuffer.writeUInt32BE(0xfffff700, 6); + + var int = new Int64(sourceBuffer, 2); + assert.equal( + int.toBuffer().toString('hex'), 'fffafffffffff700', + 'Construct from offset' + ); + + var targetBuffer = new Buffer(16); + int.copy(targetBuffer, 4); + assert.equal( + targetBuffer.slice(4, 12).toString('hex'), 'fffafffffffff700', + 'Copy to offset' + ); + + test.done(); +};