Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: test/codegen/lib/typed_data/float32x4_test.dart

Issue 1673863002: Infra for running lib tests (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Reformat Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/codegen/lib/typed_data/float32x4_test.dart
diff --git a/test/codegen/lib/typed_data/float32x4_test.dart b/test/codegen/lib/typed_data/float32x4_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..782aca44ee23e15ad6365f6bc8eeb204b78ae544
--- /dev/null
+++ b/test/codegen/lib/typed_data/float32x4_test.dart
@@ -0,0 +1,530 @@
+// 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=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
+
+// Library tag to be able to run in html test framework.
+library float32x4_test;
+
+import 'dart:typed_data';
+import "package:expect/expect.dart";
+
+testAdd() {
+ var m = new Float32x4(-1.0, -2.0, -3.0, -4.0);
+ var n = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var o = m + n;
+ Expect.equals(0.0, o.x);
+ Expect.equals(0.0, o.y);
+ Expect.equals(0.0, o.z);
+ Expect.equals(0.0, o.w);
+}
+
+testNegate() {
+ var m = new Float32x4(1.0, 2.0, -3.0, -4.0);
+ m = -m;
+ Expect.equals(-1.0, m.x);
+ Expect.equals(-2.0, m.y);
+ Expect.equals(3.0, m.z);
+ Expect.equals(4.0, m.w);
+}
+
+testSub() {
+ var m = new Float32x4(-1.0, -2.0, -3.0, -4.0);
+ var n = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var o = m - n;
+ Expect.equals(-2.0, o.x);
+ Expect.equals(-4.0, o.y);
+ Expect.equals(-6.0, o.z);
+ Expect.equals(-8.0, o.w);
+}
+
+testMul() {
+ var m = new Float32x4(-1.0, -2.0, -3.0, -4.0);
+ var n = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var o = m * n;
+ Expect.equals(-1.0, o.x);
+ Expect.equals(-4.0, o.y);
+ Expect.equals(-9.0, o.z);
+ Expect.equals(-16.0, o.w);
+}
+
+testDiv() {
+ var m = new Float32x4(-1.0, -2.0, -3.0, -4.0);
+ var n = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var o = m / n;
+ Expect.equals(-1.0, o.x);
+ Expect.equals(-1.0, o.y);
+ Expect.equals(-1.0, o.z);
+ Expect.equals(-1.0, o.w);
+}
+
+testComparison() {
+ var m = new Float32x4(1.0, 2.0, 0.1, 0.001);
+ var n = new Float32x4(2.0, 2.0, 0.001, 0.1);
+ var cmp;
+ cmp = m.lessThan(n);
+ Expect.equals(-1, cmp.x);
+ Expect.equals(0x0, cmp.y);
+ Expect.equals(0x0, cmp.z);
+ Expect.equals(-1, cmp.w);
+
+ cmp = m.lessThanOrEqual(n);
+ Expect.equals(-1, cmp.x);
+ Expect.equals(-1, cmp.y);
+ Expect.equals(0x0, cmp.z);
+ Expect.equals(-1, cmp.w);
+
+ cmp = m.equal(n);
+ Expect.equals(0x0, cmp.x);
+ Expect.equals(-1, cmp.y);
+ Expect.equals(0x0, cmp.z);
+ Expect.equals(0x0, cmp.w);
+
+ cmp = m.notEqual(n);
+ Expect.equals(-1, cmp.x);
+ Expect.equals(0x0, cmp.y);
+ Expect.equals(-1, cmp.z);
+ Expect.equals(-1, cmp.w);
+
+ cmp = m.greaterThanOrEqual(n);
+ Expect.equals(0x0, cmp.x);
+ Expect.equals(-1, cmp.y);
+ Expect.equals(-1, cmp.z);
+ Expect.equals(0x0, cmp.w);
+
+ cmp = m.greaterThan(n);
+ Expect.equals(0x0, cmp.x);
+ Expect.equals(0x0, cmp.y);
+ Expect.equals(-1, cmp.z);
+ Expect.equals(0x0, cmp.w);
+}
+
+testAbs() {
+ var m = new Float32x4(1.0, -2.0, 3.0, -4.0);
+ m = m.abs();
+ Expect.equals(1.0, m.x);
+ Expect.equals(2.0, m.y);
+ Expect.equals(3.0, m.z);
+ Expect.equals(4.0, m.w);
+}
+
+testScale() {
+ var m = new Float32x4(1.0, -2.0, 3.0, -4.0);
+ m = m.scale(20.0);
+ Expect.equals(20.0, m.x);
+ Expect.equals(-40.0, m.y);
+ Expect.equals(60.0, m.z);
+ Expect.equals(-80.0, m.w);
+}
+
+testClamp() {
+ var m = new Float32x4(1.0, -2.0, 3.0, -4.0);
+ var lo = new Float32x4(0.0, 0.0, 0.0, 0.0);
+ var hi = new Float32x4(2.0, 2.0, 2.0, 2.0);
+ m = m.clamp(lo, hi);
+ Expect.equals(1.0, m.x);
+ Expect.equals(0.0, m.y);
+ Expect.equals(2.0, m.z);
+ Expect.equals(0.0, m.w);
+}
+
+testShuffle() {
+ var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var xxxx = m.shuffle(Float32x4.XXXX);
+ Expect.equals(1.0, xxxx.x);
+ Expect.equals(1.0, xxxx.y);
+ Expect.equals(1.0, xxxx.z);
+ Expect.equals(1.0, xxxx.w);
+ var yyyy = m.shuffle(Float32x4.YYYY);
+ Expect.equals(2.0, yyyy.x);
+ Expect.equals(2.0, yyyy.y);
+ Expect.equals(2.0, yyyy.z);
+ Expect.equals(2.0, yyyy.w);
+ var zzzz = m.shuffle(Float32x4.ZZZZ);
+ Expect.equals(3.0, zzzz.x);
+ Expect.equals(3.0, zzzz.y);
+ Expect.equals(3.0, zzzz.z);
+ Expect.equals(3.0, zzzz.w);
+ var wwww = m.shuffle(Float32x4.WWWW);
+ Expect.equals(4.0, wwww.x);
+ Expect.equals(4.0, wwww.y);
+ Expect.equals(4.0, wwww.z);
+ Expect.equals(4.0, wwww.w);
+ var wzyx = m.shuffle(Float32x4.WZYX);
+ Expect.equals(4.0, wzyx.x);
+ Expect.equals(3.0, wzyx.y);
+ Expect.equals(2.0, wzyx.z);
+ Expect.equals(1.0, wzyx.w);
+ var wwzz = m.shuffle(Float32x4.WWZZ);
+ Expect.equals(4.0, wwzz.x);
+ Expect.equals(4.0, wwzz.y);
+ Expect.equals(3.0, wwzz.z);
+ Expect.equals(3.0, wwzz.w);
+ var xxyy = m.shuffle(Float32x4.XXYY);
+ Expect.equals(1.0, xxyy.x);
+ Expect.equals(1.0, xxyy.y);
+ Expect.equals(2.0, xxyy.z);
+ Expect.equals(2.0, xxyy.w);
+ var yyww = m.shuffle(Float32x4.YYWW);
+ Expect.equals(2.0, yyww.x);
+ Expect.equals(2.0, yyww.y);
+ Expect.equals(4.0, yyww.z);
+ Expect.equals(4.0, yyww.w);
+}
+
+testMin() {
+ var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var n = new Float32x4(1.0, 0.0, 2.5, 5.0);
+ m = m.min(n);
+ Expect.equals(1.0, m.x);
+ Expect.equals(0.0, m.y);
+ Expect.equals(2.5, m.z);
+ Expect.equals(4.0, m.w);
+}
+
+testMax() {
+ var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var n = new Float32x4(1.0, 0.0, 2.5, 5.0);
+ m = m.max(n);
+ Expect.equals(1.0, m.x);
+ Expect.equals(2.0, m.y);
+ Expect.equals(3.0, m.z);
+ Expect.equals(5.0, m.w);
+}
+
+testSqrt() {
+ var m = new Float32x4(1.0, 4.0, 9.0, 16.0);
+ m = m.sqrt();
+ Expect.equals(1.0, m.x);
+ Expect.equals(2.0, m.y);
+ Expect.equals(3.0, m.z);
+ Expect.equals(4.0, m.w);
+}
+
+testReciprocal() {
+ var m = new Float32x4(1.0, 4.0, 9.0, 16.0);
+ m = m.reciprocal();
+ Expect.approxEquals(1.0, m.x, 0.001);
+ Expect.approxEquals(0.25, m.y, 0.001);
+ Expect.approxEquals(0.1111111, m.z, 0.001);
+ Expect.approxEquals(0.0625, m.w, 0.001);
+}
+
+testReciprocalSqrt() {
+ var m = new Float32x4(1.0, 0.25, 0.111111, 0.0625);
+ m = m.reciprocalSqrt();
+ Expect.approxEquals(1.0, m.x, 0.001);
+ Expect.approxEquals(2.0, m.y, 0.001);
+ Expect.approxEquals(3.0, m.z, 0.001);
+ Expect.approxEquals(4.0, m.w, 0.001);
+}
+
+testSelect() {
+ var m = new Int32x4.bool(true, true, false, false);
+ var t = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ var f = new Float32x4(5.0, 6.0, 7.0, 8.0);
+ var s = m.select(t, f);
+ Expect.equals(1.0, s.x);
+ Expect.equals(2.0, s.y);
+ Expect.equals(7.0, s.z);
+ Expect.equals(8.0, s.w);
+}
+
+testConversions() {
+ var m = new Int32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
+ var n = new Float32x4.fromInt32x4Bits(m);
+ Expect.equals(1.0, n.x);
+ Expect.equals(2.0, n.y);
+ Expect.equals(3.0, n.z);
+ Expect.equals(4.0, n.w);
+ n = new Float32x4(5.0, 6.0, 7.0, 8.0);
+ m = new Int32x4.fromFloat32x4Bits(n);
+ Expect.equals(0x40A00000, m.x);
+ Expect.equals(0x40C00000, m.y);
+ Expect.equals(0x40E00000, m.z);
+ Expect.equals(0x41000000, m.w);
+ // Flip sign using bit-wise operators.
+ n = new Float32x4(9.0, 10.0, 11.0, 12.0);
+ m = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+ var nMask = new Int32x4.fromFloat32x4Bits(n);
+ nMask = nMask ^ m; // flip sign.
+ n = new Float32x4.fromInt32x4Bits(nMask);
+ Expect.equals(-9.0, n.x);
+ Expect.equals(-10.0, n.y);
+ Expect.equals(-11.0, n.z);
+ Expect.equals(-12.0, n.w);
+ nMask = new Int32x4.fromFloat32x4Bits(n);
+ nMask = nMask ^ m; // flip sign.
+ n = new Float32x4.fromInt32x4Bits(nMask);
+ Expect.equals(9.0, n.x);
+ Expect.equals(10.0, n.y);
+ Expect.equals(11.0, n.z);
+ Expect.equals(12.0, n.w);
+}
+
+
+testBitOperators() {
+ var m = new Int32x4(0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA);
+ var n = new Int32x4(0x5555555, 0x5555555, 0x5555555, 0x5555555);
+ Expect.equals(0xAAAAAAA, m.x);
+ Expect.equals(0xAAAAAAA, m.y);
+ Expect.equals(0xAAAAAAA, m.z);
+ Expect.equals(0xAAAAAAA, m.w);
+ Expect.equals(0x5555555, n.x);
+ Expect.equals(0x5555555, n.y);
+ Expect.equals(0x5555555, n.z);
+ Expect.equals(0x5555555, n.w);
+ Expect.equals(true, n.flagX);
+ Expect.equals(true, n.flagY);
+ Expect.equals(true, n.flagZ);
+ Expect.equals(true, n.flagW);
+ var o = m|n; // or
+ Expect.equals(0xFFFFFFF, o.x);
+ Expect.equals(0xFFFFFFF, o.y);
+ Expect.equals(0xFFFFFFF, o.z);
+ Expect.equals(0xFFFFFFF, o.w);
+ Expect.equals(true, o.flagX);
+ Expect.equals(true, o.flagY);
+ Expect.equals(true, o.flagZ);
+ Expect.equals(true, o.flagW);
+ o = m&n; // and
+ Expect.equals(0x0, o.x);
+ Expect.equals(0x0, o.y);
+ Expect.equals(0x0, o.z);
+ Expect.equals(0x0, o.w);
+ n = n.withX(0xAAAAAAA);
+ n = n.withY(0xAAAAAAA);
+ n = n.withZ(0xAAAAAAA);
+ n = n.withW(0xAAAAAAA);
+ Expect.equals(0xAAAAAAA, n.x);
+ Expect.equals(0xAAAAAAA, n.y);
+ Expect.equals(0xAAAAAAA, n.z);
+ Expect.equals(0xAAAAAAA, n.w);
+ o = m^n; // xor
+ Expect.equals(0x0, o.x);
+ Expect.equals(0x0, o.y);
+ Expect.equals(0x0, o.z);
+ Expect.equals(0x0, o.w);
+ Expect.equals(false, o.flagX);
+ Expect.equals(false, o.flagY);
+ Expect.equals(false, o.flagZ);
+ Expect.equals(false, o.flagW);
+}
+
+testSetters() {
+ var f = new Float32x4.zero();
+ Expect.equals(0.0, f.x);
+ Expect.equals(0.0, f.y);
+ Expect.equals(0.0, f.z);
+ Expect.equals(0.0, f.w);
+ f = f.withX(4.0);
+ Expect.equals(4.0, f.x);
+ f = f.withY(3.0);
+ Expect.equals(3.0, f.y);
+ f = f.withZ(2.0);
+ Expect.equals(2.0, f.z);
+ f = f.withW(1.0);
+ Expect.equals(1.0, f.w);
+ f = new Float32x4.zero();
+ f = f.withX(4.0).withZ(2.0).withW(1.0).withY(3.0);
+ Expect.equals(4.0, f.x);
+ Expect.equals(3.0, f.y);
+ Expect.equals(2.0, f.z);
+ Expect.equals(1.0, f.w);
+ var m = new Int32x4.bool(false, false, false, false);
+ Expect.equals(false, m.flagX);
+ Expect.equals(false, m.flagY);
+ Expect.equals(false, m.flagZ);
+ Expect.equals(false, m.flagW);
+ m = m.withFlagX(true);
+ Expect.equals(true, m.flagX);
+ Expect.equals(false, m.flagY);
+ Expect.equals(false, m.flagZ);
+ Expect.equals(false, m.flagW);
+ m = m.withFlagY(true);
+ Expect.equals(true, m.flagX);
+ Expect.equals(true, m.flagY);
+ Expect.equals(false, m.flagZ);
+ Expect.equals(false, m.flagW);
+ m = m.withFlagZ(true);
+ Expect.equals(true, m.flagX);
+ Expect.equals(true, m.flagY);
+ Expect.equals(true, m.flagZ);
+ Expect.equals(false, m.flagW);
+ m = m.withFlagW(true);
+ Expect.equals(true, m.flagX);
+ Expect.equals(true, m.flagY);
+ Expect.equals(true, m.flagZ);
+ Expect.equals(true, m.flagW);
+}
+
+testGetters() {
+ var f = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ Expect.equals(1.0, f.x);
+ Expect.equals(2.0, f.y);
+ Expect.equals(3.0, f.z);
+ Expect.equals(4.0, f.w);
+ var m = new Int32x4.bool(false, true, true, false);
+ Expect.equals(false, m.flagX);
+ Expect.equals(true, m.flagY);
+ Expect.equals(true, m.flagZ);
+ Expect.equals(false, m.flagW);
+}
+
+void testSplat() {
+ var f = new Float32x4.splat(2.0);
+ Expect.equals(2.0, f.x);
+ Expect.equals(2.0, f.y);
+ Expect.equals(2.0, f.z);
+ Expect.equals(2.0, f.w);
+}
+
+void testZero() {
+ var f = new Float32x4.zero();
+ Expect.equals(0.0, f.x);
+ Expect.equals(0.0, f.y);
+ Expect.equals(0.0, f.z);
+ Expect.equals(0.0, f.w);
+}
+
+void testConstructor() {
+ var f = new Float32x4(1.0, 2.0, 3.0, 4.0);
+ Expect.equals(1.0, f.x);
+ Expect.equals(2.0, f.y);
+ Expect.equals(3.0, f.z);
+ Expect.equals(4.0, f.w);
+}
+
+void testBadArguments() {
+ Expect.throws(() => new Float32x4(null, 2.0, 3.0, 4.0),
+ (e) => e is ArgumentError);
+ Expect.throws(() => new Float32x4(1.0, null, 3.0, 4.0),
+ (e) => e is ArgumentError);
+ Expect.throws(() => new Float32x4(1.0, 2.0, null, 4.0),
+ (e) => e is ArgumentError);
+ Expect.throws(() => new Float32x4(1.0, 2.0, 3.0, null),
+ (e) => e is ArgumentError);
+ // Use local variable typed as "var" to avoid static warnings.
+ var str = "foo";
+ Expect.throws(() => new Float32x4(str, 2.0, 3.0, 4.0),
+ (e) => e is ArgumentError || e is TypeError);
+ Expect.throws(() => new Float32x4(1.0, str, 3.0, 4.0),
+ (e) => e is ArgumentError || e is TypeError);
+ Expect.throws(() => new Float32x4(1.0, 2.0, str, 4.0),
+ (e) => e is ArgumentError || e is TypeError);
+ Expect.throws(() => new Float32x4(1.0, 2.0, 3.0, str),
+ (e) => e is ArgumentError || e is TypeError);
+}
+
+void testSpecialValues() {
+
+ /// Same as Expect.identical, but also works with NaNs and -0.0 for dart2js.
+ void checkEquals(expected, actual) {
+ if (expected.isNaN) {
+ Expect.isTrue(actual.isNaN);
+ } else if (expected == 0.0 && expected.isNegative) {
+ Expect.isTrue(actual == 0.0 && actual.isNegative);
+ } else {
+ Expect.equals(expected, actual);
+ }
+ }
+
+ var pairs = [
+ [0.0, 0.0],
+ [5e-324, 0.0],
+ [2.225073858507201e-308, 0.0],
+ [2.2250738585072014e-308, 0.0],
+ [0.9999999999999999, 1.0],
+ [1.0, 1.0],
+ [1.0000000000000002, 1.0],
+ [4294967295.0, 4294967296.0],
+ [4294967296.0, 4294967296.0],
+ [4503599627370495.5, 4503599627370496.0],
+ [9007199254740992.0, 9007199254740992.0],
+ [1.7976931348623157e+308, double.INFINITY],
+ [0.49999999999999994, 0.5],
+ [4503599627370497.0, 4503599627370496.0],
+ [9007199254740991.0, 9007199254740992.0],
+ [double.INFINITY, double.INFINITY],
+ [double.NAN, double.NAN],
+ ];
+
+ var conserved = [
+ 1.401298464324817e-45,
+ 1.1754942106924411e-38,
+ 1.1754943508222875e-38,
+ 0.9999999403953552,
+ 1.0000001192092896,
+ 8388607.5,
+ 8388608.0,
+ 3.4028234663852886e+38,
+ 8388609.0,
+ 16777215.0,
+ ];
+
+ var minusPairs = pairs.map((pair) {
+ return [-pair[0], -pair[1]];
+ });
+ var conservedPairs = conserved.map((value) => [value, value]);
+
+ var allTests = [pairs, minusPairs, conservedPairs].expand((x) => x);
+
+ for (var pair in allTests) {
+ var input = pair[0];
+ var expected = pair[1];
+ var f;
+ f = new Float32x4(input, 2.0, 3.0, 4.0);
+ checkEquals(expected, f.x);
+ Expect.equals(2.0, f.y);
+ Expect.equals(3.0, f.z);
+ Expect.equals(4.0, f.w);
+
+ f = new Float32x4(1.0, input, 3.0, 4.0);
+ Expect.equals(1.0, f.x);
+ checkEquals(expected, f.y);
+ Expect.equals(3.0, f.z);
+ Expect.equals(4.0, f.w);
+
+ f = new Float32x4(1.0, 2.0, input, 4.0);
+ Expect.equals(1.0, f.x);
+ Expect.equals(2.0, f.y);
+ checkEquals(expected, f.z);
+ Expect.equals(4.0, f.w);
+
+ f = new Float32x4(1.0, 2.0, 3.0, input);
+ Expect.equals(1.0, f.x);
+ Expect.equals(2.0, f.y);
+ Expect.equals(3.0, f.z);
+ checkEquals(expected, f.w);
+ }
+}
+
+main() {
+ for (int i = 0; i < 20; i++) {
+ testConstructor();
+ testSplat();
+ testZero();
+ testAdd();
+ testGetters();
+ testSetters();
+ testBitOperators();
+ testConversions();
+ testSelect();
+ testShuffle();
+ testSub();
+ testNegate();
+ testMul();
+ testDiv();
+ testComparison();
+ testScale();
+ testClamp();
+ testAbs();
+ testMin();
+ testMax();
+ testSqrt();
+ testReciprocal();
+ testReciprocalSqrt();
+ testBadArguments();
+ testSpecialValues();
+ }
+}
« no previous file with comments | « test/codegen/lib/typed_data/float32x4_sign_mask_test.dart ('k') | test/codegen/lib/typed_data/float32x4_transpose_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698