//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

WScript.LoadScriptFile("util.js");

function oneTest(a) {
    a[1] = 0x80000000;
    a[5] = 10;
    WScript.Echo(a[5]);
    if (Object.getOwnPropertyDescriptor(a, 100000) != undefined) {
        WScript.Echo('FAIL');
    }

    try {
        var pro = Int32Array.prototype;
        WScript.Echo(pro.toString());

        WScript.Echo("prototype is");
        printObj(pro);
    } catch (e) {
        WScript.Echo("constructor is");
        printObj(Int32Array);
    }

    WScript.Echo("object is");
    printObj(a);

    a[20] = 20;
    a.foo = 'bar';
    WScript.Echo("object after expando is");
    printObj(a);
    WScript.Echo("");
}

WScript.Echo("test1");
var test1 = new Int32Array(9);
oneTest(test1);

WScript.Echo("test2");
var test2 = new Int32Array(0);
oneTest(test2);

WScript.Echo("test3");
var arrayBuffer = new ArrayBuffer(32);
var test3 = new Int32Array(arrayBuffer);
oneTest(test3);

WScript.Echo("test4");
var test4 = new Int32Array(arrayBuffer, 4);
oneTest(test4);

WScript.Echo("test5");
var test5 = new Int32Array(arrayBuffer, 4, 6);
oneTest(test5);

WScript.Echo("test6");
var mybuffer = test1.buffer;
WScript.Echo(mybuffer);
var test6 = new Int32Array(mybuffer);
oneTest(test6);

WScript.Echo("test7");
var test7 = new Int32Array(test1.buffer, 4);
oneTest(test7);

WScript.Echo("test8");
var test8 = new Int32Array(test1.buffer, 4, 6);
oneTest(test8);

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

WScript.Echo("test9");
var test9 = new Int32Array(arr);
oneTest(test9);

WScript.Echo("test9.1");
printObj(test1);
test9.set(test1);
oneTest(test9);

WScript.Echo("test9.2");
test9.set(test5);
oneTest(test9);

WScript.Echo("test10");
try {
    var test10 = new Int32Array({});
    oneTest(test10);
}
catch (e) {
    WScript.Echo("succeed with catching" + e);
}

WScript.Echo("test11");
try {
    var test11 = new Int32Array('abcdefg');
    oneTest(test11);
}
catch (e) {
    WScript.Echo("succeed with catching" + e);
}

WScript.Echo("test11.1");
var test111 = new Int32Array(new String('abcdefg'));
oneTest(test111);


WScript.Echo("test12");
var test12 = new Int32Array(0);
oneTest(test12);


WScript.Echo("test13");
var test13 = new Int32Array(arrayBuffer, 0);
oneTest(test13);


WScript.Echo("test14");
try {
    var test14 = new Int32Array(arrayBuffer, 0, 0);
    oneTest(test14);
}
catch (e) {
    WScript.Echo("succeed with catching" + e);
}


WScript.Echo("test15");
try {
    var test15 = new Int32Array(arrayBuffer, 0, 40);
    oneTest(test15);
}
catch (e) {
    WScript.Echo("succeed with catching" + e);
}

WScript.Echo("test16");
try {
    var test16 = new Int32Array(arrayBuffer, 40, 4);
    oneTest(test16);
}
catch (e) {
    WScript.Echo("succeed with catching" + e);
}

WScript.Echo("test17");
var test17 = test5.subarray(0);
printObj(test17);

WScript.Echo("test18");
var test17 = test5.subarray(0, undefined);
printObj(test17);

WScript.Echo("test19");
var test18 = test5.subarray(4);
printObj(test18);

WScript.Echo("test20");
var test19 = test5.subarray(0, 3);
printObj(test19);

WScript.Echo("test21");
WScript.Echo(Int32Array.prototype[10]);
WScript.Echo(Int32Array.prototype[-1]);
WScript.Echo(Int32Array.prototype[2]);
Int32Array.prototype[2] = 10;
WScript.Echo(Int32Array.prototype[2]);

WScript.Echo("test22");
testSetWithInt(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));
testSetWithFloat(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));
testSetWithObj(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));
WScript.Echo("test22 JIT");
testSetWithInt(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));
testSetWithFloat(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));
testSetWithObj(-1, 2, new Int32Array(3), new Int32Array(3), new Int32Array(3));

WScript.Echo("test23");
testIndexValueForSet(new Int32Array(5));
WScript.Echo("test23 JIT");
testIndexValueForSet(new Int32Array(5));

WScript.Echo("test24");
var test24 = new Int32Array(arrayBuffer, 4, undefined);
oneTest(test24);
