tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

I8MultiplyAndAddBias.js (5519B)


      1 // This file contains all the tests for int8_multiply_and_add_bias intrinsic. It depends
      2 // on the CommonTestSetup.js script which contains the common functionality
      3 // that is required for testing all the intrinsics.
      4 const COMMON_TEST_SETUP_SCRIPT = "./CommonTestSetup.js"
      5 
      6 // All tests for this intrinsic as a string
      7 const ALL_TESTS_AS_STRING =`
      8 let {int8_multiply_and_add_bias} = instance.exports;
      9 
     10 const VALID = {inputA: 0, scaleA: 1.0, zeroPointA: 0.0, inputB: ARRAY_ALIGNMENT << 2, scaleB: 1.0, zeroPointB: 0.0, inputBiasPrepared: ARRAY_ALIGNMENT << 4, unquantMultiplier: -2.0, rowsA: ROWS_A_MULTIPLIER, width: ROWS_B_MULTIPLIER, colsB: COLUMNS_B_MULTIPLIER, output: ARRAY_ALIGNMENT << 5};
     11 
     12 function testInvalidSize() {
     13  let invalidSize;
     14 
     15  // rowsA: 0
     16  invalidSize = 0;
     17  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, invalidSize, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /unreachable/);
     18 
     19  // width: 0
     20  invalidSize = 0;
     21  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, invalidSize, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /unreachable/);
     22 
     23  // width: Not an integral multiple of ROWS_B_MULTIPLIER
     24  invalidSize = ROWS_B_MULTIPLIER + 1;
     25  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, invalidSize, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /unreachable/);
     26 
     27  // colB: 0
     28  invalidSize = 0;
     29  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, invalidSize, VALID.output), WebAssembly.RuntimeError, /unreachable/);
     30 
     31  // colB: Not an integral multiple of COLUMNS_B_MULTIPLIER
     32  invalidSize = COLUMNS_B_MULTIPLIER + 1;
     33  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, invalidSize, VALID.output), WebAssembly.RuntimeError, /unreachable/);
     34 }
     35 
     36 function testInvalidAlignment() {
     37  let invalidAlignment = ARRAY_ALIGNMENT + 1;
     38 
     39  // inputA: Not an integral multiple of ARRAY_ALIGNMENT
     40  assertErrorMessage(() => int8_multiply_and_add_bias(invalidAlignment, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /index out of bounds/);
     41 
     42  // inputB: Not an integral multiple of ARRAY_ALIGNMENT
     43  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, invalidAlignment, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /index out of bounds/);
     44 }
     45 
     46 function testOutOfBounds() {
     47  let outOfBound;
     48 
     49  // inputA: Out of Bounds
     50  outOfBound = PageSizeInBytes - ARRAY_ALIGNMENT;
     51  let rowsAForOutOfBound = ROWS_A_MULTIPLIER << 1;
     52  assertErrorMessage(() => int8_multiply_and_add_bias(outOfBound, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, rowsAForOutOfBound, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /index out of bounds/);
     53 
     54  // inputB: Out of Bounds
     55  outOfBound = PageSizeInBytes - ARRAY_ALIGNMENT;
     56  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, outOfBound, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /index out of bounds/);
     57 
     58  // inputBias: Out of Bounds
     59  outOfBound = PageSizeInBytes - VALID.colsB;
     60  assertErrorMessage(() => int8_multiply_and_add_bias(outOfBound, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, outOfBound, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, VALID.output), WebAssembly.RuntimeError, /index out of bounds/);
     61 
     62  // output: Out of Bounds
     63  outOfBound = PageSizeInBytes - VALID.colsB;
     64  assertErrorMessage(() => int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, outOfBound), WebAssembly.RuntimeError, /index out of bounds/);
     65 }
     66 
     67 function testSuccessfulCall() {
     68  // We just test that with valid arguments the intrinsic executes without any error
     69  int8_multiply_and_add_bias(VALID.inputA, VALID.scaleA, VALID.zeroPointA, VALID.inputB, VALID.scaleB, VALID.zeroPointB, VALID.inputBiasPrepared, VALID.unquantMultiplier, VALID.rowsA, VALID.width, VALID.colsB, VALID.output);
     70 }
     71 
     72 testInvalidSize();
     73 testInvalidAlignment();
     74 testOutOfBounds();
     75 testSuccessfulCall();
     76 `
     77 
     78 // Run all the tests
     79 import(COMMON_TEST_SETUP_SCRIPT).then((importedModule) => {
     80  importedModule.runTest(importedModule.COMMON_TEST_SETUP_AS_STRING + ALL_TESTS_AS_STRING);
     81 });