diff --git a/src/smt/theory_card.cpp b/src/smt/theory_card.cpp index 3c4cb21f4..ebcd52d56 100644 --- a/src/smt/theory_card.cpp +++ b/src/smt/theory_card.cpp @@ -304,7 +304,7 @@ namespace smt { lbool val = ctx.get_assignment(bv); if (inc_min(inc, val) == l_true) { curr_min += abs(inc); - lits.push_back(literal(bv, val != l_true)); + lits.push_back(literal(bv, val == l_true)); } } return curr_min; @@ -424,7 +424,7 @@ namespace smt { } else if (vars[mid].first < bv) { lo = mid; - mid += (hi-mid)/2; + mid += (hi-mid)/2 + 1; } else { hi = mid; diff --git a/src/test/sorting_network.cpp b/src/test/sorting_network.cpp index a6ec9e5e2..5ae6362b1 100644 --- a/src/test/sorting_network.cpp +++ b/src/test/sorting_network.cpp @@ -111,6 +111,8 @@ static void test_sorting4() { svector in; in.resize(5); test_sorting4_r(0, in); + in.resize(8); + test_sorting4_r(0, in); } void test_sorting3() { diff --git a/src/util/sorting_network.h b/src/util/sorting_network.h index c4f6d027c..f4eb4b032 100644 --- a/src/util/sorting_network.h +++ b/src/util/sorting_network.h @@ -96,11 +96,11 @@ Notes: {} void operator()(vect const& in, vect& out) { + out.reset(); + out.append(in); if (in.size() <= 1) { return; } - out.reset(); - out.append(in); while (!is_power_of2(out.size())) { out.push_back(m_ext.mk_default()); }