Skip to content

Commit 299ac14

Browse files
committed
fix discrepancies with previous version for tests
1 parent c536e3f commit 299ac14

File tree

3 files changed

+44
-49
lines changed

3 files changed

+44
-49
lines changed

ortools/constraint_solver/constraint_solver.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5959,6 +5959,7 @@ IntExpr* Solver::MakeDifference(IntExpr* left, IntExpr* right) {
59595959
IntExpr* Solver::MakeDifference(int64_t value, IntExpr* expr) {
59605960
CHECK_EQ(this, expr->solver());
59615961
if (expr->Bound()) {
5962+
DCHECK(!SubOverflows(value, expr->Min()));
59625963
return MakeIntConst(value - expr->Min());
59635964
}
59645965
if (value == 0) {
@@ -5989,7 +5990,7 @@ IntExpr* Solver::MakeOpposite(IntExpr* expr) {
59895990
Cache()->FindExprExpression(expr, ModelCache::EXPR_OPPOSITE);
59905991
if (result == nullptr) {
59915992
if (expr->IsVar()) {
5992-
result = RegisterIntVar(RevAlloc(new OppIntExpr(this, expr))->Var());
5993+
result = NewIntMinusVar(this, 0, expr->Var());
59935994
} else {
59945995
result = RegisterIntExpr(RevAlloc(new OppIntExpr(this, expr)));
59955996
}

ortools/constraint_solver/expressions.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,11 +1588,11 @@ void IntSquare::SetMax(int64_t m) {
15881588
bool IntSquare::Bound() const { return expr_->Bound(); }
15891589

15901590
std::string IntSquare::name() const {
1591-
return absl::StrFormat("Square(%s)", expr_->name());
1591+
return absl::StrFormat("IntSquare(%s)", expr_->name());
15921592
}
15931593

15941594
std::string IntSquare::DebugString() const {
1595-
return absl::StrFormat("Square(%s)", expr_->DebugString());
1595+
return absl::StrFormat("IntSquare(%s)", expr_->DebugString());
15961596
}
15971597

15981598
void IntSquare::WhenRange(Demon* d) { expr_->WhenRange(d); }

ortools/constraint_solver/variables.cc

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3619,90 +3619,84 @@ void LinkVarExpr(Solver* s, IntExpr* expr, IntVar* var) {
36193619
}
36203620

36213621
IntVar* NewVarPlusInt(Solver* s, IntVar* var, int64_t value) {
3622+
if (value == 0) return var;
36223623
switch (var->VarType()) {
36233624
case IntVar::DOMAIN_INT_VAR: {
3624-
return RegisterIntExpr(
3625-
s->RevAlloc(new PlusCstDomainIntVar(
3626-
s, reinterpret_cast<DomainIntVar*>(var), value)))
3627-
->Var();
3625+
return RegisterIntVar(s->RevAlloc(new PlusCstDomainIntVar(
3626+
s, reinterpret_cast<DomainIntVar*>(var), value)));
36283627
}
36293628
case IntVar::CONST_VAR: {
36303629
DCHECK(!AddOverflows(var->Min(), value));
3631-
return RegisterIntExpr(s->MakeIntConst(var->Min() + value))->Var();
3630+
return RegisterIntVar(s->MakeIntConst(var->Min() + value));
36323631
}
36333632
case IntVar::VAR_ADD_CST: {
3634-
PlusCstVar* const add_var = reinterpret_cast<PlusCstVar*>(var);
3635-
IntVar* const sub_var = add_var->SubVar();
3636-
const int64_t new_constant = value + add_var->Constant();
3633+
PlusCstVar* const var_add_cst = reinterpret_cast<PlusCstVar*>(var);
3634+
IntVar* const sub_var = var_add_cst->SubVar();
3635+
DCHECK(!AddOverflows(value, var_add_cst->Constant()));
3636+
const int64_t new_constant = value + var_add_cst->Constant();
36373637
if (new_constant == 0) {
36383638
return sub_var;
36393639
} else {
36403640
if (sub_var->VarType() == IntVar::DOMAIN_INT_VAR) {
36413641
DomainIntVar* const dvar = reinterpret_cast<DomainIntVar*>(sub_var);
3642-
return RegisterIntExpr(s->RevAlloc(new PlusCstDomainIntVar(
3643-
s, dvar, new_constant)))
3644-
->Var();
3642+
return RegisterIntVar(
3643+
s->RevAlloc(new PlusCstDomainIntVar(s, dvar, new_constant)));
36453644
} else {
3646-
return RegisterIntExpr(
3647-
s->RevAlloc(new PlusCstIntVar(s, sub_var, new_constant)))
3648-
->Var();
3645+
return RegisterIntVar(
3646+
s->RevAlloc(new PlusCstIntVar(s, sub_var, new_constant)));
36493647
}
36503648
}
3651-
break;
36523649
}
36533650
case IntVar::CST_SUB_VAR: {
3654-
SubCstIntVar* const add_var = reinterpret_cast<SubCstIntVar*>(var);
3655-
IntVar* const sub_var = add_var->SubVar();
3656-
const int64_t new_constant = value + add_var->Constant();
3657-
return RegisterIntExpr(
3658-
s->RevAlloc(new SubCstIntVar(s, sub_var, new_constant)))
3659-
->Var();
3660-
break;
3651+
SubCstIntVar* const cst_sub_var = reinterpret_cast<SubCstIntVar*>(var);
3652+
IntVar* const sub_var = cst_sub_var->SubVar();
3653+
DCHECK(!AddOverflows(value, cst_sub_var->Constant()));
3654+
const int64_t new_constant = value + cst_sub_var->Constant();
3655+
return NewIntMinusVar(s, new_constant, sub_var);
36613656
}
36623657
case IntVar::OPP_VAR: {
3663-
OppIntVar* const add_var = reinterpret_cast<OppIntVar*>(var);
3664-
IntVar* const sub_var = add_var->SubVar();
3665-
return RegisterIntExpr(s->RevAlloc(new SubCstIntVar(s, sub_var, value)))
3666-
->Var();
3667-
break;
3658+
OppIntVar* const opp_var = reinterpret_cast<OppIntVar*>(var);
3659+
IntVar* const sub_var = opp_var->SubVar();
3660+
return NewIntMinusVar(s, value, sub_var);
36683661
}
36693662
default:
3670-
return RegisterIntExpr(s->RevAlloc(new PlusCstIntVar(s, var, value)))
3671-
->Var();
3663+
return RegisterIntVar(s->RevAlloc(new PlusCstIntVar(s, var, value)));
36723664
}
36733665
}
36743666

36753667
IntVar* NewIntMinusVar(Solver* s, int64_t value, IntVar* var) {
36763668
switch (var->VarType()) {
36773669
case IntVar::VAR_ADD_CST: {
3678-
PlusCstVar* const add_var = reinterpret_cast<PlusCstVar*>(var);
3679-
IntVar* const sub_var = add_var->SubVar();
3680-
const int64_t new_constant = value - add_var->Constant();
3670+
PlusCstVar* const cst_add_var = reinterpret_cast<PlusCstVar*>(var);
3671+
IntVar* const sub_var = cst_add_var->SubVar();
3672+
DCHECK(!SubOverflows(value, cst_add_var->Constant()));
3673+
const int64_t new_constant = value - cst_add_var->Constant();
36813674
if (new_constant == 0) {
36823675
return sub_var;
36833676
} else {
3684-
return RegisterIntExpr(
3685-
s->RevAlloc(new SubCstIntVar(s, sub_var, new_constant)))
3686-
->Var();
3677+
return RegisterIntVar(
3678+
s->RevAlloc(new SubCstIntVar(s, sub_var, new_constant)));
36873679
}
3688-
break;
36893680
}
36903681
case IntVar::CST_SUB_VAR: {
3691-
SubCstIntVar* const add_var = reinterpret_cast<SubCstIntVar*>(var);
3692-
IntVar* const sub_var = add_var->SubVar();
3693-
const int64_t new_constant = value - add_var->Constant();
3694-
return s->MakeSum(sub_var, new_constant)->Var();
3695-
break;
3682+
SubCstIntVar* const cst_sub_var = reinterpret_cast<SubCstIntVar*>(var);
3683+
IntVar* const sub_var = cst_sub_var->SubVar();
3684+
DCHECK(!SubOverflows(value, cst_sub_var->Constant()));
3685+
const int64_t new_constant = value - cst_sub_var->Constant();
3686+
return NewVarPlusInt(s, sub_var, new_constant);
36963687
}
36973688
case IntVar::OPP_VAR: {
36983689
OppIntVar* const add_var = reinterpret_cast<OppIntVar*>(var);
36993690
IntVar* const sub_var = add_var->SubVar();
3700-
return s->MakeSum(sub_var, value)->Var();
3701-
break;
3691+
return NewVarPlusInt(s, sub_var, value);
3692+
}
3693+
default: {
3694+
if (value == 0) {
3695+
return RegisterIntVar(s->RevAlloc(new OppIntVar(s, var)));
3696+
} else {
3697+
return RegisterIntVar(s->RevAlloc(new SubCstIntVar(s, var, value)));
3698+
}
37023699
}
3703-
default:
3704-
return RegisterIntExpr(s->RevAlloc(new SubCstIntVar(s, var, value)))
3705-
->Var();
37063700
}
37073701
}
37083702

0 commit comments

Comments
 (0)