Skip to content
Snippets Groups Projects
testTypedArray.js 2.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Copyright (C) 2015 André Bargull. All rights reserved.
    // This code is governed by the BSD license found in the LICENSE file.
    
    /*---
    description: |
        Collection of functions used to assert the correctness of TypedArray objects.
    ---*/
    
    
    /**
     * Array containing every typed array constructor.
     */
    var typedArrayConstructors = [
      Float64Array,
      Float32Array,
      Int32Array,
      Int16Array,
      Int8Array,
      Uint32Array,
      Uint16Array,
      Uint8Array,
    
    Rick Waldron's avatar
    Rick Waldron committed
    var floatArrayConstructors = typedArrayConstructors.slice(0, 2);
    var intArrayConstructors = typedArrayConstructors.slice(2, 7);
    
    
    /**
     * The %TypedArray% intrinsic constructor function.
     */
    var TypedArray = Object.getPrototypeOf(Int8Array);
    
    
    /**
     * Callback for testing a typed array constructor.
     *
     * @callback typedArrayConstructorCallback
     * @param {Function} Constructor the constructor object to test with.
     */
    
    /**
     * Calls the provided function for every typed array constructor.
     *
     * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
    
     * @param {Array} selected - An optional Array with filtered typed arrays
    
    function testWithTypedArrayConstructors(f, selected) {
      var constructors = selected || typedArrayConstructors;
      for (var i = 0; i < constructors.length; ++i) {
        var constructor = constructors[i];
    
        try {
          f(constructor);
        } catch (e) {
          e.message += " (Testing with " + constructor.name + ".)";
          throw e;
        }
      }
    }
    
    
    /**
     * Helper for conversion operations on TypedArrays, the expected values
     * properties are indexed in order to match the respective value for each
     * TypedArray constructor
     * @param  {Function} fn - the function to call for each constructor and value.
     *                         will be called with the constructor, value, expected
     *                         value, and a initial value that can be used to avoid
     *                         a false positive with an equivalent expected value.
     */
    
    function testTypedArrayConversions(byteConversionValues, fn) {
      var values = byteConversionValues.values;
      var expected = byteConversionValues.expected;
    
    
      testWithTypedArrayConstructors(function(TA) {
    
        var name = TA.name.slice(0, -5);
    
    
        return values.forEach(function(value, index) {
    
          var exp = expected[name][index];
    
          var initial = 0;
          if (exp === 0) {
            initial = 1;
          }
          fn(TA, value, exp, initial);
        });
      });
    }