mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-30 19:24:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright (C) 2017 Mozilla Corporation.  All rights reserved.
 | |
| // This code is governed by the BSD license found in the LICENSE file.
 | |
| 
 | |
| /*---
 | |
| esid: sec-atomics.xor
 | |
| description: Test Atomics.xor on arrays that allow atomic operations
 | |
| includes: [testAtomics.js, testTypedArray.js]
 | |
| features: [ArrayBuffer, Atomics, DataView, SharedArrayBuffer, Symbol, TypedArray]
 | |
| ---*/
 | |
| 
 | |
| var sab = new SharedArrayBuffer(1024);
 | |
| var ab = new ArrayBuffer(16);
 | |
| var views = nonClampedIntArrayConstructors.slice();
 | |
| 
 | |
| testWithTypedArrayConstructors(function(TA) {
 | |
|   // Make it interesting - use non-zero byteOffsets and non-zero indexes.
 | |
| 
 | |
|   var view = new TA(sab, 32, 20);
 | |
|   var control = new TA(ab, 0, 2);
 | |
| 
 | |
|   view[8] = 0x33333333;
 | |
|   control[0] = 0x33333333;
 | |
|   assert.sameValue(Atomics.xor(view, 8, 0x55555555), control[0],
 | |
|     'Atomics.xor(view, 8, 0x55555555) returns the value of `control[0]` (0x33333333)');
 | |
| 
 | |
|   control[0] = 0x66666666;
 | |
|   assert.sameValue(
 | |
|     view[8],
 | |
|     control[0],
 | |
|     'The value of view[8] equals the value of `control[0]` (0x66666666)'
 | |
|   );
 | |
|   assert.sameValue(Atomics.xor(view, 8, 0xF0F0F0F0), control[0],
 | |
|     'Atomics.xor(view, 8, 0xF0F0F0F0) returns the value of `control[0]` (0x66666666)');
 | |
| 
 | |
|   control[0] = 0x96969696;
 | |
|   assert.sameValue(
 | |
|     view[8],
 | |
|     control[0],
 | |
|     'The value of view[8] equals the value of `control[0]` (0x96969696)'
 | |
|   );
 | |
| 
 | |
|   view[3] = -5;
 | |
|   control[0] = -5;
 | |
|   assert.sameValue(Atomics.xor(view, 3, 0), control[0],
 | |
|     'Atomics.xor(view, 3, 0) returns the value of `control[0]` (-5)');
 | |
|   assert.sameValue(
 | |
|     view[3],
 | |
|     control[0],
 | |
|     'The value of view[3] equals the value of `control[0]` (-5)'
 | |
|   );
 | |
| 
 | |
|   control[0] = 12345;
 | |
|   view[3] = 12345;
 | |
|   assert.sameValue(Atomics.xor(view, 3, 0), control[0],
 | |
|     'Atomics.xor(view, 3, 0) returns the value of `control[0]` (12345)');
 | |
|   assert.sameValue(
 | |
|     view[3],
 | |
|     control[0],
 | |
|     'The value of view[3] equals the value of `control[0]` (12345)'
 | |
|   );
 | |
| 
 | |
|   // And again
 | |
|   control[0] = 123456789;
 | |
|   view[3] = 123456789;
 | |
|   assert.sameValue(Atomics.xor(view, 3, 0), control[0],
 | |
|     'Atomics.xor(view, 3, 0) returns the value of `control[0]` (123456789)');
 | |
|   assert.sameValue(
 | |
|     view[3],
 | |
|     control[0],
 | |
|     'The value of view[3] equals the value of `control[0]` (123456789)'
 | |
|   );
 | |
| 
 | |
|   // In-bounds boundary cases for indexing
 | |
|   testWithAtomicsInBoundsIndices(function(IdxGen) {
 | |
|     let Idx = IdxGen(view);
 | |
|     view.fill(0);
 | |
|     // Atomics.store() computes an index from Idx in the same way as other
 | |
|     // Atomics operations, not quite like view[Idx].
 | |
|     Atomics.store(view, Idx, 37);
 | |
|     assert.sameValue(Atomics.xor(view, Idx, 0), 37, 'Atomics.xor(view, Idx, 0) returns 37');
 | |
|   });
 | |
| }, views);
 |