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

Unified Diff: ui/gfx/transform_unittest.cc

Issue 27223008: Provide approximate type functions for SkMatrix44. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move code to gfx::Transform class. Created 7 years, 2 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
« ui/gfx/transform.cc ('K') | « ui/gfx/transform.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/transform_unittest.cc
diff --git a/ui/gfx/transform_unittest.cc b/ui/gfx/transform_unittest.cc
index 8d71e7b4d3603c3e467d8a34e67ee8663a4187ad..78fd44bf538e0ba4e637a123dc321ad6ae80fbe5 100644
--- a/ui/gfx/transform_unittest.cc
+++ b/ui/gfx/transform_unittest.cc
@@ -141,6 +141,33 @@ void InitializeTestMatrix2(Transform* transform) {
EXPECT_ROW4_EQ(33.0f, 37.0f, 41.0f, 45.0f, (*transform));
}
+const SkMScalar kApproxZero =
+ SkFloatToMScalar(std::numeric_limits<float>::epsilon());
+const SkMScalar kApproxOne = 1 - kApproxZero;
+
+void InitializeApproxIdentityMatrix(Transform* transform) {
+ SkMatrix44& matrix = transform->matrix();
+ matrix.set(0, 0, kApproxOne);
+ matrix.set(0, 1, kApproxZero);
+ matrix.set(0, 2, kApproxZero);
+ matrix.set(0, 3, kApproxZero);
+
+ matrix.set(1, 0, kApproxZero);
+ matrix.set(1, 1, kApproxOne);
+ matrix.set(1, 2, kApproxZero);
+ matrix.set(1, 3, kApproxZero);
+
+ matrix.set(2, 0, kApproxZero);
+ matrix.set(2, 1, kApproxZero);
+ matrix.set(2, 2, kApproxOne);
+ matrix.set(2, 3, kApproxZero);
+
+ matrix.set(3, 0, kApproxZero);
+ matrix.set(3, 1, kApproxZero);
+ matrix.set(3, 2, kApproxZero);
+ matrix.set(3, 3, kApproxOne);
+}
+
#ifdef SK_MSCALAR_IS_DOUBLE
#define ERROR_THRESHOLD 1e-14
#else
@@ -2194,6 +2221,58 @@ TEST(XFormTest, verifyIsIdentityOrTranslation) {
EXPECT_FALSE(A.IsIdentityOrTranslation());
}
+TEST(XFormTest, verifyIsApproximatelyIdentityOrTranslation) {
+ Transform A;
+ SkMatrix44& matrix = A.matrix();
+
+ // Exact pure translation.
+ A.MakeIdentity();
+
+ // Set translate values to values other than 0 or 1.
+ matrix.set(0, 3, 3.4);
+ matrix.set(1, 3, 4.4);
+ matrix.set(2, 3, 5.6);
+
+ EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(0));
+ EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
+
danakj 2013/10/17 17:43:18 1 blank line only
+
+ // Approximately pure translation.
+ InitializeApproxIdentityMatrix(&A);
+
+ // Some values must be exact.
+ matrix.set(3, 0, 0);
+ matrix.set(3, 1, 0);
+ matrix.set(3, 2, 0);
+ matrix.set(3, 3, 1);
+
+ // Set translate values to values other than 0 or 1.
+ matrix.set(0, 3, 3.4);
+ matrix.set(1, 3, 4.4);
+ matrix.set(2, 3, 5.6);
+
+ EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0));
+ EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
+
danakj 2013/10/17 17:43:18 1 blank line only
+
+ // Not approximately pure translation.
+ InitializeApproxIdentityMatrix(&A);
+
+ // Some values must be exact.
+ matrix.set(3, 0, 0);
+ matrix.set(3, 1, 0);
+ matrix.set(3, 2, 0);
+ matrix.set(3, 3, 1);
+
+ // Set some values (not translate values) to values other than 0 or 1.
+ matrix.set(0, 1, 3.4);
+ matrix.set(3, 2, 4.4);
+ matrix.set(2, 0, 5.6);
+
+ EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0));
+ EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
+}
+
TEST(XFormTest, verifyIsScaleOrTranslation) {
Transform A;
« ui/gfx/transform.cc ('K') | « ui/gfx/transform.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698