li_constraints

function check_double(except, f, val, name)
  actual = true;
  proper = false;
  try
    f(val);
  catch
    actual = false;
    proper = strcmp(lasterr, ["Expected a ", name , " value. (SWIG_ValueError)"]) == 1;
  end
  if (actual)
    if (!except)
      error(["function '", name, "' with ", num2str(val), " should perform an exception"]);
    end
  else
    if (except)
      error(["function '", name, "' with ", num2str(val), " should not perform an exception"]);
    elseif (!proper)
      error(["function '", name, "' with ", num2str(val), " should perform a proper exception"]);
    end
  end
end

function nonnegative(x);global li_constraints;li_constraints.test_nonnegative(x);end
check_double(true, @nonnegative, 10, "non-negative");
check_double(true, @nonnegative, 0, "non-negative");
check_double(false, @nonnegative, -10, "non-negative");

function nonpositive(x);global li_constraints;li_constraints.test_nonpositive(x);end
check_double(false, @nonpositive, 10, "non-positive");
check_double(true, @nonpositive, 0, "non-positive");
check_double(true, @nonpositive, -10, "non-positive");

function positive(x);global li_constraints;li_constraints.test_positive(x);end
check_double(true, @positive, 10, "positive");
check_double(false, @positive, 0, "positive");
check_double(false, @positive, -10, "positive");

function negative(x);global li_constraints;li_constraints.test_negative(x);end
check_double(false, @negative, 10, "negative");
check_double(false, @negative, 0, "negative");
check_double(true, @negative, -10, "negative");

function nonzero(x);global li_constraints;li_constraints.test_nonzero(x);end
check_double(true, @nonzero, 10, "nonzero");
check_double(false, @nonzero, 0, "nonzero");
check_double(true, @nonzero, -10, "nonzero");

have_exception = false;
try
  # Empty matrix translate to null pointer
  li_constraints.test_nonnull([]);
catch
  have_exception = strcmp("Received a NULL pointer. (SWIG_ValueError)", lasterr) == 1;
end
if (!have_exception)
    error("test_nonnull should perform exception with 'null' value");
end

nonnull = li_constraints.get_nonnull();
li_constraints.test_nonnull(nonnull);
