mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	Verify that every test file which references a harness file using the "includes" directive also contains at least one reference to a value defined in the harness file. To support this check, extend each harness file with a list of values which it defines.
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Copyright (C) 2017 Mozilla Corporation. 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 SharedArrayBuffer objects.
 | 
						|
defines:
 | 
						|
  - testWithAtomicsOutOfBoundsIndices
 | 
						|
  - testWithAtomicsInBoundsIndices
 | 
						|
  - testWithAtomicsNonViewValues
 | 
						|
---*/
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Calls the provided function for a each bad index that should throw a
 | 
						|
 * RangeError when passed to an Atomics method on a SAB-backed view where
 | 
						|
 * index 125 is out of range.
 | 
						|
 *
 | 
						|
 * @param f - the function to call for each bad index.
 | 
						|
 */
 | 
						|
function testWithAtomicsOutOfBoundsIndices(f) {
 | 
						|
  var bad_indices = [
 | 
						|
    function(view) { return -1; },
 | 
						|
    function(view) { return view.length; },
 | 
						|
    function(view) { return view.length * 2; },
 | 
						|
    function(view) { return Number.POSITIVE_INFINITY; },
 | 
						|
    function(view) { return Number.NEGATIVE_INFINITY; },
 | 
						|
    function(view) { return { valueOf: function() { return 125; } }; },
 | 
						|
    function(view) { return { toString: function() { return '125'; }, valueOf: false }; }, // non-callable valueOf triggers invocation of toString
 | 
						|
  ];
 | 
						|
 | 
						|
  for (var i = 0; i < bad_indices.length; ++i) {
 | 
						|
    var IdxGen = bad_indices[i];
 | 
						|
    try {
 | 
						|
      f(IdxGen);
 | 
						|
    } catch (e) {
 | 
						|
      e.message += ' (Testing with index gen ' + IdxGen + '.)';
 | 
						|
      throw e;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Calls the provided function for each good index that should not throw when
 | 
						|
 * passed to an Atomics method on a SAB-backed view.
 | 
						|
 *
 | 
						|
 * The view must have length greater than zero.
 | 
						|
 *
 | 
						|
 * @param f - the function to call for each good index.
 | 
						|
 */
 | 
						|
function testWithAtomicsInBoundsIndices(f) {
 | 
						|
  // Most of these are eventually coerced to +0 by ToIndex.
 | 
						|
  var good_indices = [
 | 
						|
    function(view) { return 0/-1; },
 | 
						|
    function(view) { return '-0'; },
 | 
						|
    function(view) { return undefined; },
 | 
						|
    function(view) { return NaN; },
 | 
						|
    function(view) { return 0.5; },
 | 
						|
    function(view) { return '0.5'; },
 | 
						|
    function(view) { return -0.9; },
 | 
						|
    function(view) { return { password: 'qumquat' }; },
 | 
						|
    function(view) { return view.length - 1; },
 | 
						|
    function(view) { return { valueOf: function() { return 0; } }; },
 | 
						|
    function(view) { return { toString: function() { return '0'; }, valueOf: false }; }, // non-callable valueOf triggers invocation of toString
 | 
						|
  ];
 | 
						|
 | 
						|
  for (var i = 0; i < good_indices.length; ++i) {
 | 
						|
    var IdxGen = good_indices[i];
 | 
						|
    try {
 | 
						|
      f(IdxGen);
 | 
						|
    } catch (e) {
 | 
						|
      e.message += ' (Testing with index gen ' + IdxGen + '.)';
 | 
						|
      throw e;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Calls the provided function for each value that should throw a TypeError
 | 
						|
 * when passed to an Atomics method as a view.
 | 
						|
 *
 | 
						|
 * @param f - the function to call for each non-view value.
 | 
						|
 */
 | 
						|
 | 
						|
function testWithAtomicsNonViewValues(f) {
 | 
						|
  var values = [
 | 
						|
    null,
 | 
						|
    undefined,
 | 
						|
    true,
 | 
						|
    false,
 | 
						|
    new Boolean(true),
 | 
						|
    10,
 | 
						|
    3.14,
 | 
						|
    new Number(4),
 | 
						|
    'Hi there',
 | 
						|
    new Date,
 | 
						|
    /a*utomaton/g,
 | 
						|
    { password: 'qumquat' },
 | 
						|
    new DataView(new ArrayBuffer(10)),
 | 
						|
    new ArrayBuffer(128),
 | 
						|
    new SharedArrayBuffer(128),
 | 
						|
    new Error('Ouch'),
 | 
						|
    [1,1,2,3,5,8],
 | 
						|
    function(x) { return -x; },
 | 
						|
    Symbol('halleluja'),
 | 
						|
    // TODO: Proxy?
 | 
						|
    Object,
 | 
						|
    Int32Array,
 | 
						|
    Date,
 | 
						|
    Math,
 | 
						|
    Atomics
 | 
						|
  ];
 | 
						|
 | 
						|
  for (var i = 0; i < values.length; ++i) {
 | 
						|
    var nonView = values[i];
 | 
						|
    try {
 | 
						|
      f(nonView);
 | 
						|
    } catch (e) {
 | 
						|
      e.message += ' (Testing with non-view value ' + nonView + '.)';
 | 
						|
      throw e;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 |