@@ -44,24 +44,25 @@ TEST(TestOsqpInterface, BasicQp)
44
44
using autoware::common::osqp::calCSCMatrixTrapezoidal;
45
45
using autoware::common::osqp::CSC_Matrix;
46
46
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
- };
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
+ };
65
66
66
67
const Eigen::MatrixXd P = (Eigen::MatrixXd (2 , 2 ) << 4 , 1 , 1 , 2 ).finished ();
67
68
const Eigen::MatrixXd A = (Eigen::MatrixXd (4 , 2 ) << 1 , 1 , 1 , 0 , 0 , 1 , 0 , 1 ).finished ();
@@ -72,19 +73,20 @@ TEST(TestOsqpInterface, BasicQp)
72
73
{
73
74
// Define problem during optimization
74
75
autoware::common::osqp::OSQPInterface osqp;
75
- autoware::common::osqp::OSQPResult result = osqp.optimize (P, A, q, l, u);
76
+ std::tuple<std::vector<double >, std::vector<double >, int , int , int > result =
77
+ osqp.optimize (P, A, q, l, u);
76
78
check_result (result);
77
79
}
78
80
79
81
{
80
82
// Define problem during initialization
81
83
autoware::common::osqp::OSQPInterface osqp (P, A, q, l, u, 1e-6 );
82
- autoware::common::osqp::OSQPResult result = osqp.optimize ();
84
+ std::tuple<std::vector< double >, std::vector< double >, int , int , int > result = osqp.optimize ();
83
85
check_result (result);
84
86
}
85
87
86
88
{
87
- autoware::common::osqp::OSQPResult result;
89
+ std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
88
90
// Dummy initial problem
89
91
Eigen::MatrixXd P_ini = Eigen::MatrixXd::Zero (2 , 2 );
90
92
Eigen::MatrixXd A_ini = Eigen::MatrixXd::Zero (4 , 2 );
@@ -105,12 +107,12 @@ TEST(TestOsqpInterface, BasicQp)
105
107
CSC_Matrix P_csc = calCSCMatrixTrapezoidal (P);
106
108
CSC_Matrix A_csc = calCSCMatrix (A);
107
109
autoware::common::osqp::OSQPInterface osqp (P_csc, A_csc, q, l, u, 1e-6 );
108
- autoware::common::osqp::OSQPResult result = osqp.optimize ();
110
+ std::tuple<std::vector< double >, std::vector< double >, int , int , int > result = osqp.optimize ();
109
111
check_result (result);
110
112
}
111
113
112
114
{
113
- autoware::common::osqp::OSQPResult result;
115
+ std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
114
116
// Dummy initial problem with csc matrix
115
117
CSC_Matrix P_ini_csc = calCSCMatrixTrapezoidal (Eigen::MatrixXd::Zero (2 , 2 ));
116
118
CSC_Matrix A_ini_csc = calCSCMatrix (Eigen::MatrixXd::Zero (4 , 2 ));
@@ -130,7 +132,7 @@ TEST(TestOsqpInterface, BasicQp)
130
132
131
133
// add warm startup
132
134
{
133
- autoware::common::osqp::OSQPResult result;
135
+ std::tuple<std::vector< double >, std::vector< double >, int , int , int > result;
134
136
// Dummy initial problem with csc matrix
135
137
CSC_Matrix P_ini_csc = calCSCMatrixTrapezoidal (Eigen::MatrixXd::Zero (2 , 2 ));
136
138
CSC_Matrix A_ini_csc = calCSCMatrix (Eigen::MatrixXd::Zero (4 , 2 ));
@@ -148,8 +150,8 @@ TEST(TestOsqpInterface, BasicQp)
148
150
check_result (result);
149
151
150
152
osqp.updateCheckTermination (1 );
151
- const auto primal_val = result. primal_solution ;
152
- const auto dual_val = result. lagrange_multipliers ;
153
+ const auto primal_val = std::get< 0 >( result) ;
154
+ const auto dual_val = std::get< 1 >( result) ;
153
155
for (size_t i = 0 ; i < primal_val.size (); ++i) {
154
156
std::cerr << primal_val.at (i) << std::endl;
155
157
}
0 commit comments