Skip to content

Commit e01c633

Browse files
committed
[unittest] [eiquadprog-fast] More unfeasible tests
1 parent 6e65e52 commit e01c633

File tree

1 file changed

+124
-1
lines changed

1 file changed

+124
-1
lines changed

unittest/eiquadprog-fast.cpp

Lines changed: 124 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ BOOST_AUTO_TEST_CASE ( test_unfeasible_equalities )
272272
Eigen::MatrixXd Aeq(2,2);
273273
Aeq.setZero();
274274
Aeq(0,0) = 1.;
275-
Aeq(0,1) = 1.;
275+
Aeq(1,0) = 1.;
276276

277277
Eigen::VectorXd Beq(2);
278278
Beq(0) = -1.;
@@ -291,5 +291,128 @@ BOOST_AUTO_TEST_CASE ( test_unfeasible_equalities )
291291
BOOST_CHECK(status==expected);
292292
}
293293

294+
// min ||x||^2
295+
// s.t.
296+
// x[0] >= 1
297+
// x[0] <= -1
298+
//
299+
// correctly fails, but returns wrong error code
300+
301+
BOOST_AUTO_TEST_CASE ( test_unfeasible_inequalities )
302+
{
303+
EiquadprogFast qp;
304+
qp.reset(2,0,2);
305+
306+
Eigen::MatrixXd Q(2,2);
307+
Q.setZero();
308+
Q(0,0) = 1.0;
309+
Q(1,1) = 1.0;
310+
311+
Eigen::VectorXd C(2);
312+
C.setZero();
313+
314+
Eigen::MatrixXd Aeq(0,2);
315+
316+
Eigen::VectorXd Beq(0);
317+
318+
Eigen::MatrixXd Aineq(2,2);
319+
Aineq.setZero();
320+
Aineq(0,0) = 1.;
321+
Aineq(1,0) = -1.;
322+
323+
Eigen::VectorXd Bineq(2);
324+
Bineq(0) = -1;
325+
Bineq(1) = -1;
326+
327+
Eigen::VectorXd x(2);
328+
329+
EiquadprogFast_status expected = EIQUADPROG_FAST_INFEASIBLE;
330+
331+
EiquadprogFast_status status = qp.solve_quadprog(Q, C, Aeq, Beq, Aineq, Bineq, x);
332+
333+
BOOST_WARN(status==expected);
334+
BOOST_CHECK(status!=EIQUADPROG_FAST_OPTIMAL);
335+
}
336+
337+
// min ||x-x_0||^2, x_0 = (1 1)^T
338+
// s.t.
339+
// x[1] = 1 - x[0]
340+
// x[0] <= 0
341+
// x[1] <= 0
342+
//
343+
// correctly fails, but returns wrong error code
344+
345+
BOOST_AUTO_TEST_CASE ( test_unfeasible_constraints )
346+
{
347+
EiquadprogFast qp;
348+
qp.reset(2,1,2);
349+
350+
Eigen::MatrixXd Q(2,2);
351+
Q.setZero();
352+
Q(0,0) = 1.0;
353+
Q(1,1) = 1.0;
354+
355+
Eigen::VectorXd C(2);
356+
C(0) = -1.;
357+
C(1) = -1.;
358+
359+
Eigen::MatrixXd Aeq(1,2);
360+
Aeq(0,0) = 1.;
361+
Aeq(0,1) = 1.;
362+
363+
Eigen::VectorXd Beq(1);
364+
Beq(0) = -1.;
365+
366+
Eigen::MatrixXd Aineq(2,2);
367+
Aineq.setZero();
368+
Aineq(0,0) = -1.;
369+
Aineq(1,1) = -1.;
370+
371+
Eigen::VectorXd Bineq(2);
372+
Bineq.setZero();
373+
374+
Eigen::VectorXd x(2);
375+
376+
EiquadprogFast_status expected = EIQUADPROG_FAST_INFEASIBLE;
377+
378+
EiquadprogFast_status status = qp.solve_quadprog(Q, C, Aeq, Beq, Aineq, Bineq, x);
379+
380+
BOOST_WARN(status==expected);
381+
BOOST_CHECK(status!=EIQUADPROG_FAST_OPTIMAL);
382+
}
383+
384+
// min -||x||^2
385+
// DOES NOT WORK!
386+
387+
BOOST_AUTO_TEST_CASE ( test_unbounded )
388+
{
389+
EiquadprogFast qp;
390+
qp.reset(2,0,0);
391+
392+
Eigen::MatrixXd Q(2,2);
393+
Q.setZero();
394+
Q(0,0) = -1.0;
395+
Q(1,1) = -1.0;
396+
397+
Eigen::VectorXd C(2);
398+
C.setZero();
399+
400+
Eigen::MatrixXd Aeq(0,2);
401+
402+
Eigen::VectorXd Beq(0);
403+
404+
Eigen::MatrixXd Aineq(0,2);
405+
406+
Eigen::VectorXd Bineq(0);
407+
408+
Eigen::VectorXd x(2);
409+
410+
EiquadprogFast_status expected = EIQUADPROG_FAST_UNBOUNDED;
411+
412+
EiquadprogFast_status status = qp.solve_quadprog(Q, C, Aeq, Beq, Aineq, Bineq, x);
413+
414+
BOOST_WARN(status==expected);
415+
}
416+
294417
BOOST_AUTO_TEST_SUITE_END ()
295418

0 commit comments

Comments
 (0)