GCC Code Coverage Report


Directory: ./
File: unittest/factory/impulse.cpp
Date: 2025-06-03 08:14:12
Exec Total Coverage
Lines: 0 80 0.0%
Functions: 0 5 0.0%
Branches: 0 65 0.0%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, University of Edinburgh, LAAS-CNRS,
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #include "impulse.hpp"
11
12 #include "crocoddyl/multibody/impulses/impulse-3d.hpp"
13 #include "crocoddyl/multibody/impulses/impulse-6d.hpp"
14
15 namespace crocoddyl {
16 namespace unittest {
17
18 const std::vector<ImpulseModelTypes::Type> ImpulseModelTypes::all(
19 ImpulseModelTypes::init_all());
20
21 std::ostream& operator<<(std::ostream& os,
22 const ImpulseModelTypes::Type& type) {
23 switch (type) {
24 case ImpulseModelTypes::ImpulseModel3D_LOCAL:
25 os << "ImpulseModel3D_LOCAL";
26 break;
27 case ImpulseModelTypes::ImpulseModel3D_WORLD:
28 os << "ImpulseModel3D_WORLD";
29 break;
30 case ImpulseModelTypes::ImpulseModel3D_LWA:
31 os << "ImpulseModel3D_LWA";
32 break;
33 case ImpulseModelTypes::ImpulseModel6D_LOCAL:
34 os << "ImpulseModel6D_LOCAL";
35 break;
36 case ImpulseModelTypes::ImpulseModel6D_WORLD:
37 os << "ImpulseModel6D_WORLD";
38 break;
39 case ImpulseModelTypes::ImpulseModel6D_LWA:
40 os << "ImpulseModel6D_LWA";
41 break;
42 case ImpulseModelTypes::NbImpulseModelTypes:
43 os << "NbImpulseModelTypes";
44 break;
45 default:
46 os << "Unknown type";
47 break;
48 }
49 return os;
50 }
51
52 ImpulseModelFactory::ImpulseModelFactory() {}
53 ImpulseModelFactory::~ImpulseModelFactory() {}
54
55 std::shared_ptr<crocoddyl::ImpulseModelAbstract> ImpulseModelFactory::create(
56 ImpulseModelTypes::Type impulse_type, PinocchioModelTypes::Type model_type,
57 const std::string frame_name) const {
58 std::shared_ptr<crocoddyl::ImpulseModelAbstract> impulse;
59 PinocchioModelFactory model_factory(model_type);
60 std::shared_ptr<crocoddyl::StateMultibody> state =
61 std::make_shared<crocoddyl::StateMultibody>(model_factory.create());
62 std::shared_ptr<crocoddyl::ContactModelAbstract> contact;
63 std::size_t frame_id = 0;
64 if (frame_name == "") {
65 frame_id = model_factory.get_frame_ids()[0];
66 } else {
67 frame_id = state->get_pinocchio()->getFrameId(frame_name);
68 }
69 switch (impulse_type) {
70 case ImpulseModelTypes::ImpulseModel3D_LOCAL:
71 impulse = std::make_shared<crocoddyl::ImpulseModel3D>(
72 state, frame_id, pinocchio::ReferenceFrame::LOCAL);
73 break;
74 case ImpulseModelTypes::ImpulseModel3D_WORLD:
75 impulse = std::make_shared<crocoddyl::ImpulseModel3D>(
76 state, frame_id, pinocchio::ReferenceFrame::WORLD);
77 break;
78 case ImpulseModelTypes::ImpulseModel3D_LWA:
79 impulse = std::make_shared<crocoddyl::ImpulseModel3D>(
80 state, frame_id, pinocchio::ReferenceFrame::LOCAL_WORLD_ALIGNED);
81 break;
82 case ImpulseModelTypes::ImpulseModel6D_LOCAL:
83 impulse = std::make_shared<crocoddyl::ImpulseModel6D>(
84 state, frame_id, pinocchio::ReferenceFrame::LOCAL);
85 break;
86 case ImpulseModelTypes::ImpulseModel6D_WORLD:
87 impulse = std::make_shared<crocoddyl::ImpulseModel6D>(
88 state, frame_id, pinocchio::ReferenceFrame::WORLD);
89 break;
90 case ImpulseModelTypes::ImpulseModel6D_LWA:
91 impulse = std::make_shared<crocoddyl::ImpulseModel6D>(
92 state, frame_id, pinocchio::ReferenceFrame::LOCAL_WORLD_ALIGNED);
93 break;
94 default:
95 throw_pretty(__FILE__ ": Wrong ImpulseModelTypes::Type given");
96 break;
97 }
98 return impulse;
99 }
100
101 std::shared_ptr<crocoddyl::ImpulseModelAbstract> create_random_impulse() {
102 static bool once = true;
103 if (once) {
104 srand((unsigned)time(NULL));
105 once = false;
106 }
107 std::shared_ptr<crocoddyl::ImpulseModelAbstract> impulse;
108 ImpulseModelFactory factory;
109 if (rand() % 2 == 0) {
110 impulse = factory.create(ImpulseModelTypes::ImpulseModel3D_LOCAL,
111 PinocchioModelTypes::RandomHumanoid);
112 } else {
113 impulse = factory.create(ImpulseModelTypes::ImpulseModel6D_LOCAL,
114 PinocchioModelTypes::RandomHumanoid);
115 }
116 return impulse;
117 }
118
119 } // namespace unittest
120 } // namespace crocoddyl
121