#include "formula_profile.h"

// Example matcher for smoke tests. Real matcher packages should replace this
// with a conservative structural boundary for their target solver.
LYMPHOSAT_MATCHER {
    if (profile.num_vars == 0 || profile.clauses_seen == 0 || profile.parse_error ||
        profile.empty_clause_present || profile.conflicting_units_present) {
        return false;
    }

    const bool integer_programming_core =
        profile.num_vars >= 90000 &&
        profile.clauses_seen >= 300000 &&
        profile.dominant_clause_len == 3 &&
        profile.dominant_clause_len_fraction >= 0.39 &&
        profile.dominant_clause_len_fraction <= 0.80 &&
        profile.positive_block_candidate_len == 3 &&
        profile.positive_block_clause_fraction <= 0.001 &&
        profile.exactly_one_intra_pair_coverage <= 1e-12 &&
        profile.binary_clause_fraction >= 0.18 &&
        profile.binary_clause_fraction <= 0.33 &&
        profile.ternary_clause_fraction >= 0.30 &&
        profile.all_positive_clause_fraction <= 0.0004 &&
        profile.all_negative_clause_fraction >= 0.08 &&
        profile.all_negative_clause_fraction <= 0.13 &&
        profile.mixed_clause_fraction >= 0.87 &&
        profile.horn_clause_fraction >= 0.52 &&
        profile.horn_clause_fraction <= 0.62 &&
        profile.dual_horn_clause_fraction >= 0.61 &&
        profile.normalized_clause_span_mean <= 0.008 &&
        profile.binary_vars_touched_fraction >= 0.80;

    return integer_programming_core;
}
