diff --git a/pack.js b/pack.js deleted file mode 100644 index 5daf9de6..00000000 --- a/pack.js +++ /dev/null @@ -1,12 +0,0 @@ -(((-1 << 4) & 0x70) >>> 0).toString(16) -function pack (bits, offset, size) { - var mask = 0xffffffff - mask = mask >>> 32 - bits - mask = mask >>> bits - size - shift = bits - offset - size - mask = mask << shift >>> 0 - return '(value << ' + shift + ' & 0x' + mask.toString(16) + ') >>> 0)' -} - -console.log('object["three"] = ' + pack(16, 5, 7)) -console.log('object["three"] = ' + pack(32, 0, 2)) diff --git a/release.md b/release.md index 82e04890..a8e25273 100644 --- a/release.md +++ b/release.md @@ -1,5 +1,6 @@ ### Issue by Issue + * Convert pack sketch to a test. #319. * Convert signage sketch to a test. #318. * Convert unpack sketch to a test. #317. * Use `signage` for signed whole integers. #316. diff --git a/t/serialize/pack.t.js b/t/serialize/pack.t.js new file mode 100644 index 00000000..3fc07c9f --- /dev/null +++ b/t/serialize/pack.t.js @@ -0,0 +1,24 @@ +require('proof')(3, function (equal) { + require('../..') // satisfy coverage + + function pack (bits, offset, size) { + var mask = 0xffffffff, shift + mask = mask >>> 32 - bits + mask = mask >>> bits - size + shift = bits - offset - size + mask = mask << shift >>> 0 + if (shift) { + return '(value << ' + shift + ' & 0x' + mask.toString(16) + ') >>> 0' + } else { + return '(value & 0x' + mask.toString(16) + ') >>> 0' + } + } + + var f = new Function('value', 'return ' + pack(16, 5, 7)) + equal(f(0x7f).toString(2), '11111110000', 'short') + var f = new Function('value', 'return ' + pack(32, 0, 2)) + equal(f(0x3).toString(2), '11000000000000000000000000000000', 'short') + console.log(pack(16, 13, 3)) + var f = new Function('value', 'return ' + pack(16, 13, 3)) + equal(f(0xff).toString(2), '111', 'no left shift') +})