test_unconstrained.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "osqp.h" // OSQP API
  2. #include "minunit.h" // Basic testing script header
  3. #include "unconstrained/data.h"
  4. static const char* test_unconstrained_solve()
  5. {
  6. c_int exitflag;
  7. // Problem settings
  8. OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
  9. // Structures
  10. OSQPWorkspace *work; // Workspace
  11. OSQPData *data; // Data
  12. unconstrained_sols_data *sols_data;
  13. // Populate data
  14. data = generate_problem_unconstrained();
  15. sols_data = generate_problem_unconstrained_sols_data();
  16. // Define Solver settings as default
  17. osqp_set_default_settings(settings);
  18. settings->verbose = 1;
  19. // Setup workspace
  20. exitflag = osqp_setup(&work, data, settings);
  21. // Setup correct
  22. mu_assert("Unconstrained test solve: Setup error!", exitflag == 0);
  23. // Solve Problem first time
  24. osqp_solve(work);
  25. // Compare solver statuses
  26. mu_assert("Unconstrained test solve: Error in solver status!",
  27. work->info->status_val == sols_data->status_test);
  28. // Compare primal solutions
  29. mu_assert("Unconstrained test solve: Error in primal solution!",
  30. vec_norm_inf_diff(work->solution->x, sols_data->x_test,
  31. data->n) < TESTS_TOL);
  32. // Compare objective values
  33. mu_assert("Unconstrained test solve: Error in objective value!",
  34. c_absval(work->info->obj_val - sols_data->obj_value_test) <
  35. TESTS_TOL);
  36. // Clean workspace
  37. osqp_cleanup(work);
  38. // Cleanup settings and data
  39. c_free(settings);
  40. clean_problem_unconstrained(data);
  41. clean_problem_unconstrained_sols_data(sols_data);
  42. return 0;
  43. }
  44. static const char* test_unconstrained()
  45. {
  46. mu_run_test(test_unconstrained_solve);
  47. return 0;
  48. }