8 #include <boost/test/unit_test.hpp> 
    9 #include <boost/utility/binary.hpp> 
   13 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
 
   28   const double scaling_factor = 2.;
 
   29   ConstraintRef constraint_ref(jdata.
S.matrix()), constraint_ref_shared(jdata.
S.matrix());
 
   30   ScaledConstraint scaled_constraint(constraint_ref_shared, scaling_factor);
 
   32   BOOST_CHECK(constraint_ref.nv() == scaled_constraint.nv());
 
   34   typedef typename JointModel::TangentVector_t TangentVector_t;
 
   35   TangentVector_t 
v = TangentVector_t::Random();
 
   40   BOOST_CHECK(
m.isApprox(m_ref));
 
   43     SE3 M = SE3::Random();
 
   44     typename ScaledConstraint::DenseBase 
S = 
M.act(scaled_constraint);
 
   45     typename ScaledConstraint::DenseBase S_ref = scaling_factor * 
M.act(constraint_ref);
 
   47     BOOST_CHECK(
S.isApprox(S_ref));
 
   51     typename ScaledConstraint::DenseBase 
S = scaled_constraint.matrix();
 
   52     typename ScaledConstraint::DenseBase S_ref = scaling_factor * constraint_ref.matrix();
 
   54     BOOST_CHECK(
S.isApprox(S_ref));
 
   59     typename ScaledConstraint::DenseBase 
S = 
v.cross(scaled_constraint);
 
   60     typename ScaledConstraint::DenseBase S_ref = scaling_factor * 
v.cross(constraint_ref);
 
   62     BOOST_CHECK(
S.isApprox(S_ref));
 
   67     const Eigen::DenseIndex 
dim = ScaledConstraint::MaxDim;
 
   69     Eigen::MatrixXd Fout = scaled_constraint.transpose() * Fin;
 
   70     Eigen::MatrixXd Fout_ref = scaling_factor * (constraint_ref.transpose() * Fin);
 
   71     BOOST_CHECK(Fout.isApprox(Fout_ref));
 
   73     Force force_in(Force::Random());
 
   74     Eigen::MatrixXd Stf = (scaled_constraint.transpose() * force_in);
 
   75     Eigen::MatrixXd Stf_ref = scaling_factor * (constraint_ref.transpose() * force_in);
 
   76     BOOST_CHECK(Stf_ref.isApprox(Stf));
 
   82     Eigen::MatrixXd YS = 
Y * scaled_constraint;
 
   83     Eigen::MatrixXd YS_ref = scaling_factor * (
Y * constraint_ref);
 
   85     BOOST_CHECK(YS.isApprox(YS_ref));
 
   92   template<
typename Jo
intModel>
 
  121   typedef boost::variant<
 
  129 template<
typename Jo
intModel, 
typename MimicConfigurationTransform, 
bool MimicIdentity>
 
  137   const double scaling_factor = MimicIdentity ? 1. : 2.5;
 
  138   const double offset = MimicIdentity ? 0 : 0.75;
 
  147   BOOST_CHECK(jmodel_mimic.nq() == 0);
 
  148   BOOST_CHECK(jmodel_mimic.nv() == 0);
 
  150   BOOST_CHECK(jmodel_mimic.idx_q() == jmodel.
idx_q());
 
  151   BOOST_CHECK(jmodel_mimic.idx_v() == jmodel.
idx_v());
 
  156     LieGroupType().randomConfiguration(-ConfigVectorType::Ones(), ConfigVectorType::Ones());
 
  160   jmodel.
calc(jdata, q0_mimic);
 
  161   jmodel_mimic.
calc(jdata_mimic, 
q0);
 
  163   BOOST_CHECK(((
SE3)jdata.
M).isApprox((
SE3)jdata_mimic.M()));
 
  164   BOOST_CHECK((scaling_factor * jdata.
S.matrix()).isApprox(jdata_mimic.
S.matrix()));
 
  168   q0 = LieGroupType().randomConfiguration(-ConfigVectorType::Ones(), ConfigVectorType::Ones());
 
  172   jmodel.
calc(jdata, q0_mimic, v0_mimic);
 
  173   jmodel_mimic.
calc(jdata_mimic, 
q0, 
v0);
 
  175   BOOST_CHECK(((
SE3)jdata.
M).isApprox((
SE3)jdata_mimic.M()));
 
  176   BOOST_CHECK((scaling_factor * jdata.
S.matrix()).isApprox(jdata_mimic.
S.matrix()));
 
  177   BOOST_CHECK(((
Motion)jdata.
v).isApprox((
Motion)jdata_mimic.v()));
 
  180 template<
typename MimicConfigurationTransform, 
bool MimicIdentity>
 
  184   template<
typename Jo
intModel>
 
  190     test_joint_mimic<JointModel, MimicConfigurationTransform, MimicIdentity>(jmodel);
 
  198     test_joint_mimic<JointModelRevoluteUnaligned, MimicConfigurationTransform, MimicIdentity>(
 
  207     test_joint_mimic<JointModelPrismaticUnaligned, MimicConfigurationTransform, MimicIdentity>(
 
  215   typedef boost::variant<
 
  220   typedef boost::variant<JointModelRUBX, JointModelRUBY, JointModelRUBZ> VariantUnboundedRevolute;
 
  224   boost::mpl::for_each<VariantUnboundedRevolute::types>(
 
  231   double scaling = 1., offset = 0.;
 
  236   BOOST_CHECK(
q0 == 
q1);
 
  241   BOOST_CHECK(
q1 == ConfigVectorType::Constant(offset));
 
  244   BOOST_CHECK((scaling * 
q0 + ConfigVectorType::Ones() * offset) == 
q1);
 
  250   double scaling = 1., offset = 0.;
 
  255   BOOST_CHECK(
q0.isApprox(
q1));
 
  260   const double theta = atan2(
q0[1], 
q0[0]);
 
  263     == 
ConfigVectorType(math::cos(theta * scaling + offset), math::sin(theta * scaling + offset)));
 
  272   jmodel.setIndexes(2, -1, -1, 3);
 
  274   BOOST_CHECK(jmodel.idx_q() == jmodel_ref.
idx_q());
 
  275   BOOST_CHECK(jmodel.idx_v() == jmodel_ref.
idx_v());
 
  280   BOOST_CHECK(jmodel_generic.id() == jmodel.id());
 
  282 BOOST_AUTO_TEST_SUITE_END()