Squashed 'third_party/osqp/' content from commit 33454b3e23
Change-Id: I056df0582ca06664e86554c341a94c47ab932001
git-subtree-dir: third_party/osqp
git-subtree-split: 33454b3e236f1f44193bfbbb6b8c8e71f8f04e9a
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/tests/unconstrained/CMakeLists.txt b/tests/unconstrained/CMakeLists.txt
new file mode 100644
index 0000000..741b2c7
--- /dev/null
+++ b/tests/unconstrained/CMakeLists.txt
@@ -0,0 +1,13 @@
+get_directory_property(headers
+ DIRECTORY ${PROJECT_SOURCE_DIR}/tests
+ DEFINITION headers)
+
+set(headers ${headers}
+${CMAKE_CURRENT_SOURCE_DIR}/test_unconstrained.h PARENT_SCOPE)
+
+get_directory_property(codegen_headers
+ DIRECTORY ${PROJECT_SOURCE_DIR}/tests
+ DEFINITION codegen_headers)
+
+set(codegen_headers ${codegen_headers}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data.h PARENT_SCOPE)
diff --git a/tests/unconstrained/__init__.py b/tests/unconstrained/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/unconstrained/__init__.py
diff --git a/tests/unconstrained/generate_problem.py b/tests/unconstrained/generate_problem.py
new file mode 100644
index 0000000..489f016
--- /dev/null
+++ b/tests/unconstrained/generate_problem.py
@@ -0,0 +1,17 @@
+import numpy as np
+from scipy import sparse
+import utils.codegen_utils as cu
+
+P = sparse.diags([0.617022, 0.92032449, 0.20011437, 0.50233257, 0.34675589], format='csc')
+q = np.array([-1.10593508, -1.65451545, -2.3634686, 1.13534535, -1.01701414])
+A = sparse.csc_matrix((0,5))
+l = np.array([])
+u = np.array([])
+
+# Generate problem solutions
+sols_data = {'x_test': np.array([1.79237542, 1.79775228, 11.81058885, -2.26014678, 2.93293975]),
+ 'obj_value_test': -19.209752026813277,
+ 'status_test': 'optimal'}
+
+# Generate problem data
+cu.generate_problem_data(P, q, A, l, u, 'unconstrained', sols_data)
\ No newline at end of file
diff --git a/tests/unconstrained/test_unconstrained.h b/tests/unconstrained/test_unconstrained.h
new file mode 100644
index 0000000..95b8de6
--- /dev/null
+++ b/tests/unconstrained/test_unconstrained.h
@@ -0,0 +1,60 @@
+#include "osqp.h" // OSQP API
+#include "osqp_tester.h" // Basic testing script header
+
+
+#include "unconstrained/data.h"
+
+
+void test_unconstrained_solve()
+{
+ c_int exitflag;
+
+ // Problem settings
+ OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
+
+ // Structures
+ OSQPWorkspace *work; // Workspace
+ OSQPData *data; // Data
+ unconstrained_sols_data *sols_data;
+
+
+ // Populate data
+ data = generate_problem_unconstrained();
+ sols_data = generate_problem_unconstrained_sols_data();
+
+
+ // Define Solver settings as default
+ osqp_set_default_settings(settings);
+ settings->verbose = 1;
+
+ // Setup workspace
+ exitflag = osqp_setup(&work, data, settings);
+
+ // Setup correct
+ mu_assert("Unconstrained test solve: Setup error!", exitflag == 0);
+
+ // Solve Problem first time
+ osqp_solve(work);
+
+ // Compare solver statuses
+ mu_assert("Unconstrained test solve: Error in solver status!",
+ work->info->status_val == sols_data->status_test);
+
+ // Compare primal solutions
+ mu_assert("Unconstrained test solve: Error in primal solution!",
+ vec_norm_inf_diff(work->solution->x, sols_data->x_test,
+ data->n) < TESTS_TOL);
+
+ // Compare objective values
+ mu_assert("Unconstrained test solve: Error in objective value!",
+ c_absval(work->info->obj_val - sols_data->obj_value_test) <
+ TESTS_TOL);
+
+ // Clean workspace
+ osqp_cleanup(work);
+
+ // Cleanup settings and data
+ c_free(settings);
+ clean_problem_unconstrained(data);
+ clean_problem_unconstrained_sols_data(sols_data);
+}
\ No newline at end of file