1 #include "glbopts.h"
2 #include "minunit.h"
3 #include "problem_utils.h"
4 #include "scs.h"
5 #include "util.h"
6 
random_prob(void)7 static const char *random_prob(void) {
8   scs_int read_status;
9   ScsData *d;
10   ScsCone *k;
11   ScsSettings *stgs;
12   ScsSolution *sol;
13   ScsInfo info = {0};
14   scs_int exitflag;
15   scs_float perr, derr;
16   scs_int success;
17   const char *fail;
18 
19   scs_float OPT = 5.751458006385587;
20 
21   read_status = SCS(read_data)("test/problems/random_prob", &d, &k, &stgs);
22 
23   if (read_status < 0) {
24     return "Data read failure, exit.\n";
25   }
26 
27   stgs->eps_abs = 1e-6;
28   stgs->eps_rel = 1e-6;
29 
30   sol = scs_calloc(1, sizeof(ScsSolution));
31   exitflag = scs(d, k, stgs, sol, &info);
32 
33   perr = SCS(dot)(d->c, sol->x, d->n) - OPT;
34   derr = -SCS(dot)(d->b, sol->y, d->m) - OPT;
35   scs_printf("primal obj error %4e\n", perr);
36   scs_printf("dual obj error %4e\n", derr);
37 
38   success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
39 
40   mu_assert("random_prob: SCS failed to produce SCS_SOLVED", success);
41   fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
42   SCS(free_data)(d, k, stgs);
43   SCS(free_sol)(sol);
44   return fail;
45 }
46