113 lines
4.1 KiB
JavaScript
113 lines
4.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
make.typed = {
|
|
byte: function (limit = null) {
|
|
// [-128, 127]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(129)
|
|
value = random.chance(10) ? -value : value
|
|
return 'new Uint8Array([' + value + '])[0]'
|
|
},
|
|
octet: function (limit = null) {
|
|
// [0, 255]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(256)
|
|
return 'new Int8Array([' + value + '])[0]'
|
|
},
|
|
short: function (limit = null) {
|
|
// [-32768, 32767]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(32769)
|
|
value = random.chance(10) ? -value : value
|
|
return 'new Int16Array([' + value + '])[0]'
|
|
},
|
|
unsignedShort: function (limit = null) {
|
|
// [0, 65535]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(65535)
|
|
return 'new Uint16Array([' + value + '])[0]'
|
|
},
|
|
long: function (limit = null) {
|
|
// [-2147483648, 2147483647]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(2147483649)
|
|
value = random.chance(10) ? -value : value
|
|
return 'new Int32Array([' + value + '])[0]'
|
|
},
|
|
unsignedLong: function (limit = null) {
|
|
// [0, 4294967295]
|
|
let value = (limit !== null) ? random.number(limit) : random.number(4294967296)
|
|
return 'new Uint32Array([' + value + '])[0]'
|
|
},
|
|
// ToDo: Add support for longlong and ulonglong
|
|
/*
|
|
longLong: function () {},
|
|
unsignedLongLong: function () {},
|
|
*/
|
|
float: function (limit = null) {
|
|
let base = (limit !== null) ? random.number(limit) : random.number()
|
|
let value = random.chance(10) ? -(base + random.float()) : (base + random.float())
|
|
return 'new Float32Array([' + value + '])[0]'
|
|
},
|
|
unrestrictedFloat: function (limit = null) {
|
|
if (random.chance(100)) {
|
|
return random.pick([NaN, +Infinity, -Infinity])
|
|
} else {
|
|
let base = (limit !== null) ? random.number(limit) : random.number()
|
|
return 'new Float32Array([' + (base + random.float()) + '])[0]'
|
|
}
|
|
},
|
|
double: function (limit = null) {
|
|
let base = (limit !== null) ? random.number(limit) : random.number()
|
|
let value = random.chance(10) ? -(base + random.float()) : (base + random.float())
|
|
return 'new Float64Array([' + value + '])[0]'
|
|
},
|
|
unrestrictedDouble: function (limit = null) {
|
|
if (random.chance(100)) {
|
|
return random.pick([NaN, +Infinity, -Infinity])
|
|
} else {
|
|
let base = (limit !== null) ? random.number(limit) : random.number()
|
|
let value = random.chance(10) ? -(base + random.float()) : (base + random.float())
|
|
return 'new Float64Array([' + value + '])[0]'
|
|
}
|
|
},
|
|
any: function () {
|
|
return random.choose([
|
|
[1, [this.byte, this.octet]],
|
|
[1, [this.short, this.unsignedShort]],
|
|
[1, [this.long, this.unsignedLong]],
|
|
[1, [this.float, this.unrestrictedFloat]],
|
|
[1, [this.double, this.unrestrictedDouble]],
|
|
[1, [make.number.range, make.number.tiny]]
|
|
])
|
|
},
|
|
arrayBuffer: function (byteLength = null) {
|
|
let length = (byteLength !== null) ? byteLength : this.unsignedShort()
|
|
return 'new ArrayBuffer(' + length + ')'
|
|
},
|
|
dataView: function (byteLength = null) {
|
|
let length = (byteLength !== null) ? byteLength : this.unsignedShort()
|
|
return 'new DataView(' + this.arrayBuffer(length) + ')'
|
|
},
|
|
typedArray: function (byteLength = null) {
|
|
let length = (byteLength !== null) ? byteLength : this.unsignedShort()
|
|
let arrType = random.item([
|
|
'Int8', 'Uint8', 'Uint8Clamped',
|
|
'Int16', 'Uint16',
|
|
'Int32', 'Uint32',
|
|
'Float32', 'Float64'
|
|
])
|
|
let method = 'new ' + arrType + 'Array'
|
|
switch (random.number(16)) {
|
|
case 0:
|
|
return method + '()'
|
|
case 1:
|
|
return method + '(' + this.typedArray() + ')'
|
|
default:
|
|
return method + '(' + length + ')'
|
|
}
|
|
},
|
|
bufferSource: function () {
|
|
return random.choose([
|
|
[1, [this.arrayBuffer, this.dataView]],
|
|
[1, [this.typedArray]]
|
|
])
|
|
}
|
|
}
|