1// Step 1.
2test(function() {
3    assert_throws_dom("TypeMismatchError", function() {
4        self.crypto.getRandomValues(new Float32Array(6))
5    }, "Float32Array")
6    assert_throws_dom("TypeMismatchError", function() {
7        self.crypto.getRandomValues(new Float64Array(6))
8    }, "Float64Array")
9
10    assert_throws_dom("TypeMismatchError", function() {
11        const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1;
12        self.crypto.getRandomValues(new Float32Array(len));
13    }, "Float32Array (too long)")
14    assert_throws_dom("TypeMismatchError", function() {
15        const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1;
16        self.crypto.getRandomValues(new Float64Array(len))
17    }, "Float64Array (too long)")
18}, "Float arrays");
19
20test(function() {
21    assert_throws_dom("TypeMismatchError", function() {
22        self.crypto.getRandomValues(new DataView(new ArrayBuffer(6)))
23    }, "DataView")
24
25    assert_throws_dom("TypeMismatchError", function() {
26        self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1)))
27    }, "DataView (too long)")
28}, "DataView");
29
30const arrays = [
31    'Int8Array',
32    'Int16Array',
33    'Int32Array',
34    'BigInt64Array',
35    'Uint8Array',
36    'Uint8ClampedArray',
37    'Uint16Array',
38    'Uint32Array',
39    'BigUint64Array',
40];
41
42for (const array of arrays) {
43    const ctor = globalThis[array];
44
45    test(function() {
46        assert_equals(self.crypto.getRandomValues(new ctor(8)).constructor,
47                      ctor, "crypto.getRandomValues(new " + array + "(8))")
48    }, "Integer array: " + array);
49
50    test(function() {
51        const maxlength = 65536 / ctor.BYTES_PER_ELEMENT;
52        assert_throws_dom("QuotaExceededError", function() {
53            self.crypto.getRandomValues(new ctor(maxlength + 1))
54        }, "crypto.getRandomValues length over 65536")
55    }, "Large length: " + array);
56
57    test(function() {
58        assert_true(self.crypto.getRandomValues(new ctor(0)).length == 0)
59    }, "Null arrays: " + array);
60}
61