diff --git a/tests/test-encode-decode-benchmark.cpp b/tests/test-encode-decode-benchmark.cpp
index 7864f89..c689f95 100644
--- a/tests/test-encode-decode-benchmark.cpp
+++ b/tests/test-encode-decode-benchmark.cpp
@@ -8,6 +8,7 @@
 #include <iostream>
 #include <time.h>
 #include <sys/time.h>
+#include <stdexcept>
 #include <ndn-cpp/data.hpp>
 // Hack: Hook directly into non-API functions.
 #include "../src/c/encoding/binary-xml-decoder.h"
@@ -19,11 +20,11 @@
 using namespace ndn::ptr_lib;
 
 static double
-getNowMicroseconds()
+getNowSeconds()
 {
   struct timeval t;
   gettimeofday(&t, 0);
-  return t.tv_sec * 1000000.0 + t.tv_usec;
+  return t.tv_sec + t.tv_usec / 1000000.0;
 }
 
 uint8_t Data1[] = {
@@ -78,15 +79,19 @@
   double nIterations = 1000000;
   
   size_t nameSize = 0;
-  double start = getNowMicroseconds();
+  double start = getNowSeconds();
   for (int i = 0; i < nIterations; ++i) {
     Data data;
     data.wireDecode(Data1, sizeof(Data1));
     nameSize = data.getName().size();
   }
-  double finish = getNowMicroseconds();
+  double finish = getNowSeconds();
+ 
+  // Sanity check that we are actually decoding.
+  if (nameSize != 2)
+   throw runtime_error("Unexpected data packet name size");
   
-  cout << "Data decode C++: name size: " << nameSize << ", usec: " << ((finish - start) / nIterations) << endl;  
+  cout << "Data decode C++: Duration sec: " << (finish - start) << ", Hz: " << (nIterations / (finish - start)) << endl;  
 }
 
 static void 
@@ -95,7 +100,7 @@
   double nIterations = 20000000;
   
   size_t nameSize = 0;
-  double start = getNowMicroseconds();
+  double start = getNowSeconds();
   for (int i = 0; i < nIterations; ++i) {
     struct ndn_NameComponent nameComponents[100];
     struct ndn_NameComponent keyNameComponents[100];
@@ -116,16 +121,23 @@
     
     nameSize = dataStruct.name.nComponents;
   }
-  double finish = getNowMicroseconds();
+  double finish = getNowSeconds();
+ 
+  // Sanity check that we are actually decoding.
+  if (nameSize != 2)
+   throw runtime_error("Unexpected data packet name size");
   
-  cout << "Data decode C:   name size: " << nameSize << ", usec: " << ((finish - start) / nIterations) << endl;  
+  cout << "Data decode C:   Duration sec: " << (finish - start) << ", Hz: " << (nIterations / (finish - start)) << endl;  
 }
 
 int 
 main(int argc, char** argv)
 {
-  testDataDecodeCpp();
-  testDataDecodeC();
-  
+  try {
+    testDataDecodeCpp();
+    testDataDecodeC();
+  } catch (std::exception& e) {
+    cout << "exception: " << e.what() << endl;
+  }
   return 0;
 }
