#include <cstdio>
#include "HCheckConfig.h"
#include "Highs.h"
#include "catch.hpp"
#include "lp_data/HighsLpUtils.h"
#include "util/HighsUtils.h"
const bool dev_run = false;
const double kOptimalQap04 = 32;
TEST_CASE("icrash-qap04", "[highs_presolve]") {
std::string filename = std::string(HIGHS_DIR) + "/check/instances/qap04.mps";
Highs highs;
highs.setOptionValue("output_flag", dev_run);
HighsStatus highs_status = highs.readModel(filename);
REQUIRE(highs_status == HighsStatus::kOk);
HighsOptions options;
options.icrash = true;
options.icrash_starting_weight = 10;
options.icrash_approx_iter = 100;
options.simplex_strategy = kSimplexStrategyPrimal;
options.output_flag = dev_run;
highs_status = highs.passOptions(options);
REQUIRE(highs_status == HighsStatus::kOk);
HighsStatus run_status = highs.run();
REQUIRE(run_status == HighsStatus::kOk);
ICrashInfo info = highs.getICrashInfo();
REQUIRE(std::fabs(info.final_lp_objective - kOptimalQap04) < 0.18);
REQUIRE(info.final_residual_norm_2 >= -1e08);
REQUIRE(info.final_residual_norm_2 < 1e08);
highs.resetGlobalScheduler(true);
}