1 #include "glbopts.h"
2 #include "linalg.h"
3 #include "minunit.h"
4 #include "scs.h"
5 #include "scs_matrix.h"
6 #include "util.h"
7 
infeasible_tiny_qp(void)8 static const char *infeasible_tiny_qp(void) {
9   ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
10   ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
11   ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
12   ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
13   ScsInfo info = {0};
14   scs_int exitflag;
15   const char *fail;
16 
17   /* data */
18   scs_float Ax[] = {
19       4.51689976e-01,  3.06592046e-03,  5.17304192e-01,  -3.03038477e+00,
20       -1.40509892e+00, 7.94277342e-04,  2.39454841e+00,  -7.60957360e-01,
21       -1.18946302e+00, 3.98797701e-01,  1.01386914e+00,  -2.53921734e+00,
22       -3.21202445e-01, 9.25735134e-01,  -2.54046934e-01, 1.28211442e-01,
23       -1.65155072e-01, -4.53308401e-01, -4.66709068e-01, -2.24298562e-01,
24       -4.92029627e-01, 8.05750411e-01,  -1.72920210e+00, -1.45633836e-01,
25       6.39086786e-01,  1.20509649e-01,  4.19672104e-01,  -2.29274817e-01,
26       3.30125838e-01,  4.12874191e-01,  1.05357823e+00,  2.10587878e+00,
27       5.54934230e-01,  2.42617608e+00,  -8.33596918e-01, -6.83444334e-01,
28       8.23856780e-01,  -4.14240741e-01, -7.24051659e-01, 1.06144329e-01,
29       6.92857027e-01,  1.64822980e+00,  1.94603528e-01,  -7.58318366e-01,
30       1.42948833e+00,  -2.49039902e-01, 2.15319490e-01,  -1.52651434e+00,
31       -3.94761305e-01, -5.24305949e-01};
32   scs_int Ai[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6,
33                   7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
34                   4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
35   scs_int Ap[] = {0, 10, 20, 30, 40, 50};
36 
37   scs_float Px[] = {0.40113649, 0.15897142, 0.37369516,  -0.05899464,
38                     0.0772996,  0.37333677, -0.02994108, 0.04870077,
39                     0.32221413, 0.28665235, -0.27383424, 0.04842465,
40                     0.07832219, 0.0660133,  0.49993284};
41   scs_int Pi[] = {0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 4};
42   scs_int Pp[] = {0, 1, 3, 6, 10, 15};
43 
44   scs_float b[] = {-0.057279,   0.10451534, -0.10459346, -0.18452294,
45                    0.18609658,  0.15795524, -0.00562746, -0.85852899,
46                    -0.48271335, 0.61951655};
47   scs_float c[] = {-0.16566256, -1.33116808, -0.1767858, -1.0940148,
48                    1.15348983};
49 
50   scs_int m = 10;
51   scs_int n = 5;
52 
53   scs_int l = m;
54 
55   /* end data */
56 
57   d->m = m;
58   d->n = n;
59   d->b = b;
60   d->c = c;
61 
62   d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
63   d->P = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
64 
65   d->A->m = m;
66   d->A->n = n;
67 
68   d->A->x = Ax;
69   d->A->i = Ai;
70   d->A->p = Ap;
71 
72   d->P->m = n;
73   d->P->n = n;
74 
75   d->P->x = Px;
76   d->P->i = Pi;
77   d->P->p = Pp;
78 
79   k->l = l;
80 
81   SCS(set_default_settings)(stgs);
82   stgs->eps_abs = 1e-6;
83   stgs->eps_rel = 1e-6;
84   stgs->eps_infeas = 1e-9;
85 
86   exitflag = scs(d, k, stgs, sol, &info);
87 
88   mu_assert(
89       "infeasible_tiny_qp: SCS failed to produce outputflag SCS_INFEASIBLE",
90       exitflag == SCS_INFEASIBLE);
91   fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
92 
93   SCS(free_sol)(sol);
94   scs_free(d->A);
95   scs_free(d->P);
96   scs_free(k);
97   scs_free(stgs);
98   scs_free(d);
99   return fail;
100 }
101