//@ skip if $architecture == "mips"

typedArrays = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];

function assert(cond) {
    if (!cond)
        throw new Error("bad assertion!");
}

function assertThrows(thunk, error) {
    let failed = true;
    try {
        thunk();
    } catch (e) {
        if (error && e != error)
            throw new Error("bad assertion!");
        failed = false;
    }
    if (failed)
        throw new Error("bad assertion!");
}

function makeDescriptor(accessor, configurable, writable, enumerable) {
    let o = {writable, configurable, enumerable}
    if (accessor)
        o.get = () => 1;
    else
        o.value = 1;
    return o;
}

let bools = [true, false];

function test(array, a, c, error ) {
    for (w of bools) {
        for (e of bools) {
            assertThrows(() => Object.defineProperty(a, 0, makeDescriptor(a, c, w, e), error));
        }
    }
}

function foo() {
    for (constructor of typedArrays) {
        let a = new constructor(10);
        Object.defineProperty(a, 0, makeDescriptor(false, false, true, true));
        assert(a[0] === 1);
        assertThrows(() => Object.defineProperty(a, 0, makeDescriptor(false, false, true, false), "TypeError: Attempting to store non-enumerable or non-writable indexed property on a typed array."));
        assertThrows(() => Object.defineProperty(a, 0, makeDescriptor(false, false, false, false), "TypeError: Attempting to store non-enumerable or non-writable indexed property on a typed array."));
        assertThrows(() => Object.defineProperty(a, 0, makeDescriptor(false, false, false, true), "TypeError: Attempting to store non-enumerable or non-writable indexed property on a typed array."));

        test(a, false, true, "TypeError: Attempting to configure non-configurable property.");
        for (c of bools) {
            test(a, true, c, "TypeError: Attempting to store accessor indexed property on a typed array.")
        }
    }
}

for (let i = 0; i < 100; i++)
    foo();
