blob: 49b23d7a72d8027086e03c33a51a8cb2dfb33774 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// 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("..\\UnitTestFramework\\SimdJsHelpers.js");
var globTotal;
function increment(a, b, lib)
{
return lib.add(a, b);
}
function F4Test(b, lib)
{
var x, y;
var i =0;
var j = 0;
var z;
x = lib(100,101,102,103);
y = lib(0, 1,2,3);
if (b == true)
{
// swizzle
z = lib.shuffle(x, y, 0, 0, 0, 0);
equalSimd([100,100,100,100], z, lib, "Float32x4-1");
// 2 and 2
z = lib.shuffle(x, y, 5, 6, 1, 2);
equalSimd([1.0,2.0,101.0,102.0], z, lib, "Float32x4-2");
z = lib.shuffle(x, y, 5, 1, 6, 2);
equalSimd([1.0,101.0,2.0,102.0], z, lib, "Float32x4-3");
z = lib.shuffle(x, y, 1, 5, 2, 6);
equalSimd([101.0,1.0,102.0,2.0], z, lib, "Float32x4-4");
}
else
{
// 3 and 1
z = lib.shuffle(x, y, 1, 5, 6, 7);
equalSimd([101.0,1.0,2.0,3.0], z, lib, "Float32x4-5");
z = lib.shuffle(x, y, 5, 1, 6, 7);
equalSimd([1.0,101.0,2.0,3.0], z, lib, "Float32x4-6");
z = lib.shuffle(x, y, 5, 1, 3, 2);
equalSimd([1.0,101.0,103.0,102.0], z, lib, "Float32x4-7");
z = lib.shuffle(x, y, 1, 5, 0, 1);
equalSimd([101.0,1.0,100.0,101.0], z, lib, "Float32x4-8");
}
if (lib === SIMD.Float32x4)
{
return lib.swizzle(lib.abs(lib.sub(y, z)), 1, 2, 0, 3);
}
else
{
return lib.swizzle(lib.add(z, y), 3, 2, 0, 1);
}
}
function I4Test(b, lib)
{
var x, y;
var i =0;
var j = 0;
var z;
x = lib(100,101,102,103);
y = lib(0, 1,2,3);
if (b == true)
{
// swizzle
z = lib.shuffle(x, y, 0, 0, 0, 0);
equalSimd([100,100,100,100], z, lib, "Float32x4-1");
// 2 and 2
z = lib.shuffle(x, y, 5, 6, 1, 2);
equalSimd([1.0,2.0,101.0,102.0], z, lib, "Float32x4-2");
z = lib.shuffle(x, y, 5, 1, 6, 2);
equalSimd([1.0,101.0,2.0,102.0], z, lib, "Float32x4-3");
z = lib.shuffle(x, y, 1, 5, 2, 6);
equalSimd([101.0,1.0,102.0,2.0], z, lib, "Float32x4-4");
}
else
{
// 3 and 1
z = lib.shuffle(x, y, 1, 5, 6, 7);
equalSimd([101.0,1.0,2.0,3.0], z, lib, "Float32x4-5");
z = lib.shuffle(x, y, 5, 1, 6, 7);
equalSimd([1.0,101.0,2.0,3.0], z, lib, "Float32x4-6");
z = lib.shuffle(x, y, 5, 1, 3, 2);
equalSimd([1.0,101.0,103.0,102.0], z, lib, "Float32x4-7");
z = lib.shuffle(x, y, 1, 5, 0, 1);
equalSimd([101.0,1.0,100.0,101.0], z, lib, "Float32x4-8");
}
if (lib === SIMD.Float32x4)
{
return lib.swizzle(lib.abs(lib.sub(y, z)), 1, 2, 0, 3);
}
else
{
return lib.swizzle(lib.add(z, y), 3, 2, 0, 1);
}
}
var c = false;
var d = false;
var z;
var lib;
lib = SIMD.Float32x4;
z = F4Test(true, lib);
equalSimd([0, 100, 101, 1], z, lib, "F4Test-true");
z = F4Test(false, lib);
equalSimd([0, 98, 101, 98], z, lib, "F4Test-true");
z = F4Test(true, lib);
equalSimd([0, 100, 101, 1], z, lib, "F4Test-true");
z = F4Test(false, lib);
equalSimd([0, 98, 101, 98], z, lib, "F4Test-true");
// This will make the calls polymorphic, we don't inline and call helpers instead
lib = SIMD.Int32x4;
z = I4Test(true, lib);
equalSimd([5, 104, 101, 2], z, lib, "I4Test-true");
z = I4Test(false, lib);
equalSimd([104, 102, 101, 2], z, lib, "I4Test-true");
z = I4Test(true, lib);
equalSimd([5, 104, 101, 2], z, lib, "I4Test-true");
z = I4Test(false, lib);
equalSimd([104, 102, 101, 2], z, lib, "I4Test-true");
print("PASS");