@@ -44,25 +44,24 @@ TEST(TestOsqpInterface, BasicQp)
44
44
using autoware::common::osqp::calCSCMatrixTrapezoidal;
45
45
using autoware::common::osqp::CSC_Matrix;
46
46
47
- auto check_result =
48
- [](const std::tuple<std::vector<double >, std::vector<double >, int , int , int > & result) {
49
- EXPECT_EQ (std::get<2 >(result), 1 ); // polish succeeded
50
- EXPECT_EQ (std::get<3 >(result), 1 ); // solution succeeded
51
-
52
- static const auto ep = 1.0e-8 ;
53
-
54
- const auto prime_val = std::get<0 >(result);
55
- ASSERT_EQ (prime_val.size (), size_t (2 ));
56
- EXPECT_NEAR (prime_val[0 ], 0.3 , ep);
57
- EXPECT_NEAR (prime_val[1 ], 0.7 , ep);
58
-
59
- const auto dual_val = std::get<1 >(result);
60
- ASSERT_EQ (dual_val.size (), size_t (4 ));
61
- EXPECT_NEAR (dual_val[0 ], -2.9 , ep);
62
- EXPECT_NEAR (dual_val[1 ], 0.0 , ep);
63
- EXPECT_NEAR (dual_val[2 ], 0.2 , ep);
64
- EXPECT_NEAR (dual_val[3 ], 0.0 , ep);
65
- };
47
+ auto check_result = [](const autoware::common::osqp::OSQPResult & result) {
48
+ EXPECT_EQ (result.polish_status , 1 ); // polish succeeded
49
+ EXPECT_EQ (result.solution_status , 1 ); // solution succeeded
50
+
51
+ static const auto ep = 1.0e-8 ;
52
+
53
+ const auto prime_val = result.primal_solution ;
54
+ ASSERT_EQ (prime_val.size (), size_t (2 ));
55
+ EXPECT_NEAR (prime_val[0 ], 0.3 , ep);
56
+ EXPECT_NEAR (prime_val[1 ], 0.7 , ep);
57
+
58
+ const auto dual_val = result.lagrange_multipliers ;
59
+ ASSERT_EQ (dual_val.size (), size_t (4 ));
60
+ EXPECT_NEAR (dual_val[0 ], -2.9 , ep);
61
+ EXPECT_NEAR (dual_val[1 ], 0.0 , ep);
62
+ EXPECT_NEAR (dual_val[2 ], 0.2 , ep);
63
+ EXPECT_NEAR (dual_val[3 ], 0.0 , ep);
64
+ };
66
65
67
66
const Eigen::MatrixXd P = (Eigen::MatrixXd (2 , 2 ) << 4 , 1 , 1 , 2 ).finished ();
68
67
const Eigen::MatrixXd A = (Eigen::MatrixXd (4 , 2 ) << 1 , 1 , 1 , 0 , 0 , 1 , 0 , 1 ).finished ();
@@ -73,20 +72,19 @@ TEST(TestOsqpInterface, BasicQp)
73
72
{
74
73
// Define problem during optimization
75
74
autoware::common::osqp::OSQPInterface osqp;
76
- std::tuple<std::vector<double >, std::vector<double >, int , int , int > result =
77
- osqp.optimize (P, A, q, l, u);
75
+ autoware::common::osqp::OSQPResult result = osqp.optimize (P, A, q, l, u);
78
76
check_result (result);
79
77
}
80
78
81
79
{
82
80
// Define problem during initialization
83
81
autoware::common::osqp::OSQPInterface osqp (P, A, q, l, u, 1e-6 );
84
- std::tuple<std::vector< double >, std::vector< double >, int , int , int > result = osqp.optimize ();
82
+ autoware::common::osqp::OSQPResult result = osqp.optimize ();
85
83
check_result (result);
86
84
}
87
85
88
86
{
89
- std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
87
+ autoware::common::osqp::OSQPResult result;
90
88
// Dummy initial problem
91
89
Eigen::MatrixXd P_ini = Eigen::MatrixXd::Zero (2 , 2 );
92
90
Eigen::MatrixXd A_ini = Eigen::MatrixXd::Zero (4 , 2 );
@@ -107,12 +105,12 @@ TEST(TestOsqpInterface, BasicQp)
107
105
CSC_Matrix P_csc = calCSCMatrixTrapezoidal (P);
108
106
CSC_Matrix A_csc = calCSCMatrix (A);
109
107
autoware::common::osqp::OSQPInterface osqp (P_csc, A_csc, q, l, u, 1e-6 );
110
- std::tuple<std::vector< double >, std::vector< double >, int , int , int > result = osqp.optimize ();
108
+ autoware::common::osqp::OSQPResult result = osqp.optimize ();
111
109
check_result (result);
112
110
}
113
111
114
112
{
115
- std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
113
+ autoware::common::osqp::OSQPResult result;
116
114
// Dummy initial problem with csc matrix
117
115
CSC_Matrix P_ini_csc = calCSCMatrixTrapezoidal (Eigen::MatrixXd::Zero (2 , 2 ));
118
116
CSC_Matrix A_ini_csc = calCSCMatrix (Eigen::MatrixXd::Zero (4 , 2 ));
@@ -132,7 +130,7 @@ TEST(TestOsqpInterface, BasicQp)
132
130
133
131
// add warm startup
134
132
{
135
- std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
133
+ autoware::common::osqp::OSQPResult result;
136
134
// Dummy initial problem with csc matrix
137
135
CSC_Matrix P_ini_csc = calCSCMatrixTrapezoidal (Eigen::MatrixXd::Zero (2 , 2 ));
138
136
CSC_Matrix A_ini_csc = calCSCMatrix (Eigen::MatrixXd::Zero (4 , 2 ));
@@ -150,8 +148,8 @@ TEST(TestOsqpInterface, BasicQp)
150
148
check_result (result);
151
149
152
150
osqp.updateCheckTermination (1 );
153
- const auto primal_val = std::get< 0 >( result) ;
154
- const auto dual_val = std::get< 1 >( result) ;
151
+ const auto primal_val = result. primal_solution ;
152
+ const auto dual_val = result. lagrange_multipliers ;
155
153
for (size_t i = 0 ; i < primal_val.size (); ++i) {
156
154
std::cerr << primal_val.at (i) << std::endl;
157
155
}
0 commit comments