mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:27:17 +00:00
e7d4c48a80
Change-Id: I9a51ae6a1f8f4d018da289b6f29ab18053304c19 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132341 Commit-Queue: Erik Ernst <eernst@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
65 lines
2 KiB
Dart
65 lines
2 KiB
Dart
// 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
|
|
|
|
// 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);
|
|
}
|
|
}
|