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

Unified Diff: cc/base/math_util_unittest.cc

Issue 1321503002: cc: Do not create separate tilings for almost equal scale factors. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moved roundto function to ideal scales. Created 5 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
Index: cc/base/math_util_unittest.cc
diff --git a/cc/base/math_util_unittest.cc b/cc/base/math_util_unittest.cc
index 9d44fba8ac034b9a7637bff7e0f70408fef11ca4..d0532ae7b8f81b8308f7d9e2f23a46e259dd8340 100644
--- a/cc/base/math_util_unittest.cc
+++ b/cc/base/math_util_unittest.cc
@@ -384,5 +384,55 @@ TEST(MathUtilTest, RoundDownUnderflow) {
EXPECT_TRUE(MathUtil::VerifyRoundDown<int16_t>(-123, 50));
}
+TEST(MathUtilTest, AlmostEqualFloats) {
+ // Two almost equal floats.
+ float value1 = 7.33907556533813f;
+ float value2 = 7.33907508850098f;
+
+ EXPECT_TRUE(value1 != value2);
+
+ int max_precision = std::numeric_limits<float>::digits10 - 1;
+
+ // Check with all possible precisions, the almost equal floats (differing
+ // by small magnitude of epsilon) are same.
+ for (int i = 0; i <= max_precision; ++i) {
+ float value1_rounded_to_same_precision =
+ MathUtil::RoundToFixedPrecision(value1, i);
+ float value2_rounded_to_same_precision =
+ MathUtil::RoundToFixedPrecision(value2, i);
+ EXPECT_TRUE(value1_rounded_to_same_precision ==
+ value2_rounded_to_same_precision);
+ }
+
+ // Check the same float with different precisions. Different values should
+ // be returned.
+ for (int i = 0; i <= max_precision; ++i) {
+ for (int j = i + 1; j <= max_precision; ++j) {
+ float value1_rounded_to_precision_i =
+ MathUtil::RoundToFixedPrecision(value1, i);
+ float value1_rounded_to_precision_j =
+ MathUtil::RoundToFixedPrecision(value1, j);
+ EXPECT_FALSE(value1_rounded_to_precision_i ==
+ value1_rounded_to_precision_j);
+ }
+ }
+
+ // Different floats created by differing some magnitude of epsilon.
+ float value3 = value1 + (10 * std::numeric_limits<float>::epsilon());
+ EXPECT_TRUE(value1 != value3);
+ EXPECT_TRUE(MathUtil::RoundToFixedPrecision(value1, 2) ==
+ MathUtil::RoundToFixedPrecision(value3, 2));
+
+ // Check different floats.
+ float value4 = 7.3f;
+ float value5 = 7.4f;
+ // Rounded to precision 0, should be equal.
+ EXPECT_TRUE(MathUtil::RoundToFixedPrecision(value4, 0) ==
+ MathUtil::RoundToFixedPrecision(value5, 0));
+ // Rounded to precision 1, should not be equal.
+ EXPECT_FALSE(MathUtil::RoundToFixedPrecision(value4, 1) ==
+ MathUtil::RoundToFixedPrecision(value5, 1));
+}
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698