HTML Preparation code:
AخA
 
1
<!--your preparation HTML code goes here-->
Script Preparation code:
x
 
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>

Previous results

Experimental features:

  • Test case name Result
    Pack
    UnPack
    Pack (Optimized)
    UnPack (Optimized)

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 18 days ago)
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
Chrome 133 on Mac OS X 10.15.7
View result in a separate tab
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