Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Pack array of bitmasks (numbers)
(version: 1)
Comparing performance of:
Pack vs UnPack vs Pack (Optimized) vs UnPack (Optimized)
Created:
one year ago
by:
Guest
Jump to the latest result
HTML Preparation code:
<!--your preparation HTML code goes here-->
Script Preparation code:
function generateRandomBitmasks(count = 100) { const bitmasks = new Array(count); for (let i = 0; i < count; i++) { let bitLength = Math.floor(Math.random() * (32 - 5 + 1)) + 5; bitmasks[i] = Math.floor(Math.random() * (1 << bitLength)); } return bitmasks; } var bitmasks = generateRandomBitmasks(); var packed = packBitmasks(bitmasks); var packedV8 = packBitmasksV8(bitmasks); function packBitmasks(bitmasks) { let totalBits = bitmasks.length * 32; let packedSize = Math.ceil(totalBits / 8); let packed = new Uint8Array(packedSize); let bitIndex = 0; for (let i = 0; i < bitmasks.length; i++) { let value = bitmasks[i]; for (let b = 0; b < 32; b++) { if (bitIndex >= totalBits) break; let bytePos = bitIndex >> 3; let bitPos = bitIndex % 8; if (value & (1 << b)) { packed[bytePos] |= (1 << bitPos); } bitIndex++; } } return packed; } function unpackBitmasks(packed, length) { let bitmasks = new Uint32Array(length); let bitIndex = 0; for (let i = 0; i < length; i++) { let value = 0; for (let b = 0; b < 32; b++) { if (bitIndex >= packed.length * 8) break; let bytePos = bitIndex >> 3; let bitPos = bitIndex % 8; if (packed[bytePos] & (1 << bitPos)) { value |= (1 << b); } bitIndex++; } bitmasks[i] = value; } return bitmasks; } function packBitmasksV8(bitmasks) { let packed = new Uint8Array(bitmasks.length * 4); let packedView = new Uint32Array(packed.buffer); for (let i = 0, len = bitmasks.length; i < len; i++) { packedView[i] = bitmasks[i]; } return packed; } function unpackBitmasksV8(packed) { let packedView = new Uint32Array(packed.buffer); let bitmasks = new Array(packedView.length); for (let i = 0, len = packedView.length; i < len; i++) { bitmasks[i] = packedView[i]; } return bitmasks; }
Tests:
Pack
packBitmasks(bitmasks)
UnPack
unpackBitmasks(packed)
Pack (Optimized)
packBitmasksV8(bitmasks)
UnPack (Optimized)
unpackBitmasksV8(packedV8)
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (4)
Previous results
Fork
Test case name
Result
Pack
UnPack
Pack (Optimized)
UnPack (Optimized)
Fastest:
N/A
Slowest:
N/A
Latest run results:
Run details:
(Test run date:
one year ago
)
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Browser/OS:
Chrome 133 on Mac OS X 10.15.7
View result in a separate tab
Embed
Embed Benchmark Result
Test name
Executions per second
Pack
383031.8 Ops/sec
UnPack
53071896.0 Ops/sec
Pack (Optimized)
2796965.0 Ops/sec
UnPack (Optimized)
13323087.0 Ops/sec
Related benchmarks:
Spread vs Array.prototype.concat
getRandomIntInRange
getRandomNumberInRange vs getRandomValueInRange
getRandomNumberInRange vs getRandomValueInRange 5000
Set.has v.s Array.includes
yoooooo
Set.has v.s Array.includes v2
Lodash some vs JS some 1000 entries
Bool generation from uint32
Comments
Confirm delete:
Do you really want to delete benchmark?