summaryrefslogtreecommitdiffstats
path: root/debian/tests/test_modules/atomic-sleep/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'debian/tests/test_modules/atomic-sleep/index.js')
-rw-r--r--debian/tests/test_modules/atomic-sleep/index.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/debian/tests/test_modules/atomic-sleep/index.js b/debian/tests/test_modules/atomic-sleep/index.js
new file mode 100644
index 0000000..fbfc8b2
--- /dev/null
+++ b/debian/tests/test_modules/atomic-sleep/index.js
@@ -0,0 +1,38 @@
+'use strict'
+
+/* global SharedArrayBuffer, Atomics */
+
+if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {
+ const nil = new Int32Array(new SharedArrayBuffer(4))
+
+ function sleep (ms) {
+ // also filters out NaN, non-number types, including empty strings, but allows bigints
+ const valid = ms > 0 && ms < Infinity
+ if (valid === false) {
+ if (typeof ms !== 'number' && typeof ms !== 'bigint') {
+ throw TypeError('sleep: ms must be a number')
+ }
+ throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
+ }
+
+ Atomics.wait(nil, 0, 0, Number(ms))
+ }
+ module.exports = sleep
+} else {
+
+ function sleep (ms) {
+ // also filters out NaN, non-number types, including empty strings, but allows bigints
+ const valid = ms > 0 && ms < Infinity
+ if (valid === false) {
+ if (typeof ms !== 'number' && typeof ms !== 'bigint') {
+ throw TypeError('sleep: ms must be a number')
+ }
+ throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
+ }
+ const target = Date.now() + Number(ms)
+ while (target > Date.now()){}
+ }
+
+ module.exports = sleep
+
+}