| Index: ui/gfx/transform_unittest.cc
|
| diff --git a/ui/gfx/transform_unittest.cc b/ui/gfx/transform_unittest.cc
|
| index f747e48255b0981806ab801e9077ad40c34f4cce..0bf9dde73fca822170ac9c8f6c38f9875c289499 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
|
| @@ -2211,6 +2238,56 @@ 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.4f);
|
| + matrix.set(1, 3, 4.4f);
|
| + matrix.set(2, 3, 5.6f);
|
| +
|
| + EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(0));
|
| + EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
|
| +
|
| + // 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.4f);
|
| + matrix.set(1, 3, 4.4f);
|
| + matrix.set(2, 3, 5.6f);
|
| +
|
| + EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0));
|
| + EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
|
| +
|
| + // 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.4f);
|
| + matrix.set(3, 2, 4.4f);
|
| + matrix.set(2, 0, 5.6f);
|
| +
|
| + EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0));
|
| + EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(kApproxZero));
|
| +}
|
| +
|
| TEST(XFormTest, verifyIsScaleOrTranslation) {
|
| Transform A;
|
|
|
|
|