blob: d82711ef9d959dc037367e6e27b0863d3204bace [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// VMOptions=--optimization-counter-threshold=10 --no-background-compilation
// @dart = 2.9
// Library tag to be able to run in html test framework.
library float32x4_transpose_test;
import 'dart:typed_data';
import 'package:expect/expect.dart';
void transpose(Float32x4List m) {
Expect.equals(4, m.length);
var m0 = m[0];
var m1 = m[1];
var m2 = m[2];
var m3 = m[3];
var t0 = m0.shuffleMix(m1, Float32x4.xyxy);
var t1 = m2.shuffleMix(m3, Float32x4.xyxy);
m[0] = t0.shuffleMix(t1, Float32x4.xzxz);
m[1] = t0.shuffleMix(t1, Float32x4.ywyw);
var t2 = m0.shuffleMix(m1, Float32x4.zwzw);
var t3 = m2.shuffleMix(m3, Float32x4.zwzw);
m[2] = t2.shuffleMix(t3, Float32x4.xzxz);
m[3] = t2.shuffleMix(t3, Float32x4.ywyw);
}
void testTranspose(Float32x4List m, Float32x4List r) {
transpose(m); // In place transpose.
for (int i = 0; i < 4; i++) {
var a = m[i];
var b = r[i];
Expect.equals(b.x, a.x);
Expect.equals(b.y, a.y);
Expect.equals(b.z, a.z);
Expect.equals(b.w, a.w);
}
}
main() {
var A = new Float32x4List(4);
A[0] = new Float32x4(1.0, 2.0, 3.0, 4.0);
A[1] = new Float32x4(5.0, 6.0, 7.0, 8.0);
A[2] = new Float32x4(9.0, 10.0, 11.0, 12.0);
A[3] = new Float32x4(13.0, 14.0, 15.0, 16.0);
var B = new Float32x4List(4);
B[0] = new Float32x4(1.0, 5.0, 9.0, 13.0);
B[1] = new Float32x4(2.0, 6.0, 10.0, 14.0);
B[2] = new Float32x4(3.0, 7.0, 11.0, 15.0);
B[3] = new Float32x4(4.0, 8.0, 12.0, 16.0);
var I = new Float32x4List(4);
I[0] = new Float32x4(1.0, 0.0, 0.0, 0.0);
I[1] = new Float32x4(0.0, 1.0, 0.0, 0.0);
I[2] = new Float32x4(0.0, 0.0, 1.0, 0.0);
I[3] = new Float32x4(0.0, 0.0, 0.0, 1.0);
for (int i = 0; i < 20; i++) {
var m = new Float32x4List.fromList(I);
testTranspose(m, I);
m = new Float32x4List.fromList(A);
testTranspose(m, B);
}
}