diff --git a/tests/InfRectTest.cpp b/tests/InfRectTest.cpp
index 1dc6ca7..f1b2677 100644
--- a/tests/InfRectTest.cpp
+++ b/tests/InfRectTest.cpp
@@ -6,6 +6,7 @@
  * found in the LICENSE file.
  */
 #include "Test.h"
+#include "SkRandom.h"
 #include "SkRect.h"
 
 #ifdef SK_SCALAR_IS_FLOAT
@@ -14,6 +15,37 @@
 }
 #endif
 
+static void test_center(skiatest::Reporter* reporter) {
+    static const struct {
+        SkIRect  fRect;
+        SkIPoint fCenter;
+    } data[] = {
+        { { 0, 0, 0, 0 }, { 0, 0 } },
+        { { 0, 0, 1, 1 }, { 0, 0 } },
+        { { -1, -1, 0, 0 }, { -1, -1 } },
+        { { 0, 0, 10, 7 }, { 5, 3 } },
+        { { 0, 0, 11, 6 }, { 5, 3 } },
+    };
+    for (size_t index = 0; index < SK_ARRAY_COUNT(data); ++index) {
+        REPORTER_ASSERT(reporter,
+                        data[index].fRect.centerX() == data[index].fCenter.x());
+        REPORTER_ASSERT(reporter,
+                        data[index].fRect.centerY() == data[index].fCenter.y());
+    }
+
+    SkRandom rand;
+    for (int i = 0; i < 10000; ++i) {
+        SkIRect r;
+        
+        r.set(rand.nextS() >> 2, rand.nextS() >> 2,
+              rand.nextS() >> 2, rand.nextS() >> 2);
+        int cx = r.centerX();
+        int cy = r.centerY();
+        REPORTER_ASSERT(reporter, (r.left() + r.right() >> 1) == cx);
+        REPORTER_ASSERT(reporter, (r.top() + r.bottom() >> 1) == cy);
+    }
+}
+
 static void check_invalid(skiatest::Reporter* reporter,
                           SkScalar l, SkScalar t, SkScalar r, SkScalar b) {
     SkRect rect;
@@ -47,6 +79,8 @@
         check_invalid(reporter, small, invalid[i], big, big);
         check_invalid(reporter, invalid[i], small, big, big);
     }
+    
+    test_center(reporter);
 }
 
 // need tests for SkStrSearch
