//-------------------------------------------------------------------------------------------------------
// 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] = 0.54;
a[5] = 10;
WScript.Echo(a[5]);
if (Object.getOwnPropertyDescriptor(a, 100000) != undefined) {
    WScript.Echo('FAIL');
}

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

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

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 Float32Array(9);
oneTest(test1);

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

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

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

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

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

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

WScript.Echo("test8");
var test8 = new Float32Array(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 Float32Array(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 Float32Array({});
oneTest(test10);
}
catch(e)
{
WScript.Echo("succeed with catching" + e); 
}

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

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


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


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


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


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

WScript.Echo("test16");
try 
{
var test16 = new Float32Array(arrayBuffer, 40, 4);
oneTest(test16);
}
catch(e)
{
WScript.Echo("succeed with catching" + e); 
}
printObj(test5);
WScript.Echo("test17");
var test17 = test5.subarray(0);
printObj(test17);

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

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

WScript.Echo("test20");
WScript.Echo(Float32Array.prototype[10]);
WScript.Echo(Float32Array.prototype[-1]); 
WScript.Echo(Float32Array.prototype[2]);
Float32Array.prototype[2] = 10;
WScript.Echo(Float32Array.prototype[2]);

WScript.Echo("test21");
testSetWithInt(-1, 2, new Float32Array(3), new Float32Array(3), new Float32Array(3));
testSetWithFloat(-1, 2, new Float32Array(3), new Float32Array(3), new Float32Array(3));
testSetWithObj(-1, 2, new Float32Array(3), new Float32Array(3), new Float32Array(3));

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

WScript.Echo("test22");
testIndexValueForSet(new Float32Array(5));
WScript.Echo("test22 JIT");
testIndexValueForSet(new Float32Array(5));