Add a basic test of the thresholding code

This in preparation for adding a new implementation.

Change-Id: I8ef7a25607b48a1649cb2c30e121a72a600eb1e6
diff --git a/aos/vision/blob/range_image.cc b/aos/vision/blob/range_image.cc
index c01a919..613d2ca 100644
--- a/aos/vision/blob/range_image.cc
+++ b/aos/vision/blob/range_image.cc
@@ -88,6 +88,10 @@
   }
 }
 
+void PrintTo(const ImageRange &range, std::ostream *os) {
+  *os << "{" << range.st << ", " << range.ed << "}";
+}
+
 void RangeImage::Flip(int image_width, int image_height) {
   std::reverse(ranges_.begin(), ranges_.end());
   for (std::vector<ImageRange> &range : ranges_) {
@@ -102,6 +106,31 @@
   min_y_ = image_height - static_cast<int>(ranges_.size()) - min_y_;
 }
 
+void PrintTo(const RangeImage &range, std::ostream *os) {
+  *os << "{min_y=" << range.min_y()
+      << ", ranges={";
+  bool first_row = true;
+  for (const auto &row : range) {
+    if (first_row) {
+      first_row = false;
+    } else {
+      *os << ", ";
+    }
+    *os << "{";
+    bool first_value = true;
+    for (const auto &value : row) {
+      if (first_value) {
+        first_value = false;
+      } else {
+        *os << ", ";
+      }
+      *os << "{" << value.st << ", " << value.ed << "}";
+    }
+    *os << "}";
+  }
+  *os << "}}";
+}
+
 int RangeImage::npixels() {
   if (npixelsc_ > 0) {
     return npixelsc_;