"use strict";

function assert(b) {
    if (!b)
        throw new Error("Bad!");
}

function test() {
    function load(o, i) {
        return o.getUint8(i);
    }
    noInline(load);

    let ab = new ArrayBuffer(4);
    let ta = new Uint32Array(ab);
    ta[0] = 0xa070fa01;
    let dv = new DataView(ab);

    for (let i = 0; i < 1000; ++i) {
        assert(load(dv, 0) === 0x01);
    }

    transferArrayBuffer(ab);
    let e = null;
    try {
        load(dv, 0);
    } catch(err) {
        e = err;
    }
    assert(e instanceof RangeError);
}
test();


function test2() {
    function load(o, i) {
        return o.getUint8(i);
    }
    noInline(load);

    let ab = new ArrayBuffer(4);
    let ta = new Uint32Array(ab);
    ta[0] = 0xa070fa01;
    let dv = new DataView(ab);

    for (let i = 0; i < 10000; ++i) {
        assert(load(dv, 0) === 0x01);
    }

    transferArrayBuffer(ab);
    let e = null;
    try {
        load(dv, 0);
    } catch(err) {
        e = err;
    }
    assert(e instanceof RangeError);
}
test2();
