2018-04-19 16:11:50 +02:00
// Copyright (C) 2018 Amal Hussein. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/ * - - -
esid : sec - atomics . wait
description : >
True timeout arg should result in an + 0 timeout
info : |
Atomics . wait ( typedArray , index , value , timeout )
4. Let q be ? ToNumber ( timeout ) .
Boolean - > If argument is true , return 1. If argument is false , return + 0.
2018-05-21 20:23:15 +02:00
includes : [ atomicsHelper . js ]
2018-04-19 16:11:50 +02:00
features : [ Atomics , SharedArrayBuffer , TypedArray ]
-- - * /
2018-05-21 20:23:15 +02:00
$262 . agent . start ( `
const valueOf = {
valueOf : function ( ) {
return true ;
}
} ;
const toPrimitive = {
[ Symbol . toPrimitive ] : function ( ) {
return true ;
}
} ;
$262 . agent . receiveBroadcast ( function ( sab ) {
const i32a = new Int32Array ( sab ) ;
const start = $262 . agent . monotonicNow ( ) ;
$262 . agent . report ( Atomics . wait ( i32a , 0 , 0 , true ) ) ;
$262 . agent . report ( Atomics . wait ( i32a , 0 , 0 , valueOf ) ) ;
$262 . agent . report ( Atomics . wait ( i32a , 0 , 0 , toPrimitive ) ) ;
$262 . agent . report ( $262 . agent . monotonicNow ( ) - start ) ;
$262 . agent . leaving ( ) ;
} ) ;
2018-04-19 16:11:50 +02:00
` );
2018-05-21 20:23:15 +02:00
const i32a = new Int32Array (
2018-06-25 21:17:45 +02:00
new SharedArrayBuffer ( Int32Array . BYTES _PER _ELEMENT * 4 )
2018-05-21 20:23:15 +02:00
) ;
2018-04-19 16:11:50 +02:00
2018-04-25 23:29:53 +02:00
$262 . agent . broadcast ( i32a . buffer ) ;
2018-04-19 16:11:50 +02:00
$262 . agent . sleep ( 150 ) ;
2018-06-27 18:58:02 +02:00
assert . sameValue (
$262 . agent . getReport ( ) ,
'timed-out' ,
'$262.agent.getReport() returns "timed-out"'
) ;
assert . sameValue (
$262 . agent . getReport ( ) ,
'timed-out' ,
'$262.agent.getReport() returns "timed-out"'
) ;
assert . sameValue (
$262 . agent . getReport ( ) ,
'timed-out' ,
'$262.agent.getReport() returns "timed-out"'
) ;
2018-04-19 16:11:50 +02:00
2018-06-27 17:13:23 +02:00
const lapse = $262 . agent . getReport ( ) ;
2018-04-19 16:11:50 +02:00
2018-06-27 18:58:02 +02:00
assert ( lapse >= 0 , 'The result of `(lapse >= 0)` is true (The result of `(lapse >= 0)` is true (timeout should be a min of 0ms))' ) ;
2018-04-19 16:11:50 +02:00
2018-06-27 18:58:02 +02:00
assert ( lapse <= $262 . agent . MAX _TIME _EPSILON , 'The result of `(lapse <= $262.agent.MAX_TIME_EPSILON)` is true (The result of `(lapse <= $262.agent.MAX_TIME_EPSILON)` is true (timeout should be a max of $$262.agent.MAX_TIME_EPSILON))' ) ;
2018-04-19 16:11:50 +02:00
2018-06-27 18:58:02 +02:00
assert . sameValue ( Atomics . wake ( i32a , 0 ) , 0 , 'Atomics.wake(i32a, 0) returns 0' ) ;
2018-04-19 16:11:50 +02:00