Skip to content

operator== for Settings, Info, and Results has duplicate comparisons and missing fields #449

@jberg5

Description

@jberg5

Bug(s): The equality operators for Settings, Info, and Results contain copy-paste errors where some fields are compared twice while others are never compared. This causes objects with different values to incorrectly compare as equal.

e.g.

  import proxsuite

  qp1 = proxsuite.proxqp.dense.QP(1, 0, 0)
  qp2 = proxsuite.proxqp.dense.QP(1, 0, 0)

  qp2.settings.beta_bcl = qp1.settings.beta_bcl * 100

  print(qp1.settings.beta_bcl)  # 0.9
  print(qp2.settings.beta_bcl)  # 90.0
  print(qp1.settings == qp2.settings)  # True (should be False)

Specific issues:

settings1.alpha_bcl == settings2.alpha_bcl &&

    settings1.alpha_bcl == settings2.alpha_bcl &&
    settings1.alpha_bcl == settings2.alpha_bcl &&

^ alpha_bcl compared twice, should probably be beta_bcl?

settings1.mu_update_factor == settings2.mu_update_factor &&

    settings1.mu_update_factor == settings2.mu_update_factor &&
    settings1.mu_update_factor == settings2.mu_update_factor &&

probs supposed to be mu_update_inv_factor

info1.dua_res == info2.dua_res && info1.duality_gap == info2.duality_gap &&

    info1.dua_res == info2.dua_res && info1.duality_gap == info2.duality_gap &&
    info1.duality_gap == info2.duality_gap &&

^ duality gap compared twice, missing iterative_residual

bool value = results1.x == results2.x && results1.y == results2.y &&

template<typename T>
bool
operator==(const Results<T>& results1, const Results<T>& results2)
{
  bool value = results1.x == results2.x && results1.y == results2.y &&
               results1.z == results2.z && results1.info == results2.info;
  return value;
}

^ this seems to be missing se, si, and active_constraints maybe?

These should be pretty straightforward to fix; happy to raise a PR if need be.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions