From b62ca5d338ab208257cf87d90773edd5fd81ae09 Mon Sep 17 00:00:00 2001
From: Mansard <nmansard@laas.fr>
Date: Fri, 12 Sep 2014 13:15:55 +0200
Subject: [PATCH] IVIGIT: added unittest/timings.

---
 CMakeLists.txt       |  4 +++
 unittest/timings.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 76 insertions(+)
 create mode 100644 unittest/timings.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 39f7a5c03..d6e5ff92f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,6 +104,10 @@ ADD_EXECUTABLE(crba EXCLUDE_FROM_ALL unittest/crba.cpp)
 PKG_CONFIG_USE_DEPENDENCY(crba eigenpy)
 PKG_CONFIG_USE_DEPENDENCY(crba urdfdom)
 
+ADD_EXECUTABLE(timings EXCLUDE_FROM_ALL unittest/timings.cpp)
+PKG_CONFIG_USE_DEPENDENCY(timings eigenpy)
+PKG_CONFIG_USE_DEPENDENCY(timings urdfdom)
+
 ADD_EXECUTABLE(jacobian EXCLUDE_FROM_ALL unittest/jacobian.cpp)
 PKG_CONFIG_USE_DEPENDENCY(jacobian eigenpy)
 
diff --git a/unittest/timings.cpp b/unittest/timings.cpp
new file mode 100644
index 000000000..a4a3291f3
--- /dev/null
+++ b/unittest/timings.cpp
@@ -0,0 +1,72 @@
+#include "pinocchio/spatial/fwd.hpp"
+#include "pinocchio/spatial/se3.hpp"
+#include "pinocchio/multibody/joint.hpp"
+#include "pinocchio/multibody/visitor.hpp"
+#include "pinocchio/multibody/model.hpp"
+#include "pinocchio/algorithm/crba.hpp"
+#include "pinocchio/algorithm/rnea.hpp"
+#include "pinocchio/algorithm/cholesky.hpp"
+#include "pinocchio/algorithm/jacobian.hpp"
+#include "pinocchio/multibody/parser/urdf.hpp"
+#include "pinocchio/multibody/parser/sample-models.hpp"
+
+#include <iostream>
+
+#include "pinocchio/tools/timer.hpp"
+
+
+int main(int argc, const char ** argv)
+{
+  using namespace Eigen;
+  using namespace se3;
+
+  StackTicToc timer(StackTicToc::US);
+  const int NBT = 1000*100;
+  se3::Model model;
+
+  std::string filename = "../models/simple_humanoid.urdf";
+  if(argc>1) filename = argv[1];
+  if( filename == "HS") 
+    se3::buildModels::humanoidSimple(model,true);
+  else if( filename == "H2" )
+    se3::buildModels::humanoid2d(model);
+  else
+    model = se3::buildModel(filename,true);
+  std::cout << "nq = " << model.nq << std::endl;
+
+  se3::Data data(model);
+  VectorXd q = VectorXd::Random(model.nq);
+  VectorXd qdot = VectorXd::Random(model.nv);
+  VectorXd qddot = VectorXd::Random(model.nv);
+ 
+  timer.tic();
+  SMOOTH(NBT)
+    {
+      rnea(model,data,q,qdot,qddot);
+    }
+  std::cout << "RNEA = \t\t"; timer.toc(std::cout,NBT);
+ 
+  timer.tic();
+  SMOOTH(NBT)
+    {
+      crba(model,data,q);
+    }
+  std::cout << "CRBA = \t\t"; timer.toc(std::cout,NBT);
+ 
+  timer.tic();
+  SMOOTH(NBT)
+    {
+      cholesky::decompose(model,data);
+    }
+  std::cout << "Cholesky = \t"; timer.toc(std::cout,NBT);
+ 
+  timer.tic();
+  SMOOTH(NBT)
+    {
+      computeJacobian(model,data,q);
+    }
+  std::cout << "Jacobian = \t"; timer.toc(std::cout,NBT);
+
+  std::cout << "--" << std::endl;
+  return 0;
+}
-- 
GitLab