Skip to content

Commit 8032888

Browse files
committed
fixing some issues with solver
1 parent c534f60 commit 8032888

File tree

2 files changed

+76
-14
lines changed

2 files changed

+76
-14
lines changed

src/solver.h

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -523,29 +523,60 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
523523
const minterm<BAs...>& m, const tau<BAs...>& splitter_one) {
524524
minterm_system<BAs...> new_disjoint;
525525
auto new_m = m;
526-
auto new_m_cte = get_constant(new_m);
527-
auto new_m_exp = get_exponent(new_m);
528526

529527
for (auto& d: disjoint) {
528+
auto new_m_cte = get_constant(new_m);
529+
auto new_m_exp = get_exponent(new_m);
530+
531+
#ifdef DEBUG
532+
BOOST_LOG_TRIVIAL(trace)
533+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/d: " << d << "\n"
534+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m: " << new_m << "\n"
535+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m_cte: " << new_m_cte << "\n"
536+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m_exp:\n";
537+
for (const auto& e: new_m_exp)
538+
BOOST_LOG_TRIVIAL(trace)
539+
<< "solver.h:" << __LINE__ << "\t" << e;
540+
#endif // DEBUG
541+
530542
// case 1
531543
if (get_exponent(d) == new_m_exp) {
544+
545+
#ifdef DEBUG
546+
BOOST_LOG_TRIVIAL(trace)
547+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case1]/new_disjoint: " << d << "\n";
548+
#endif // DEBUG
549+
532550
new_disjoint.insert(d);
533551
continue;
534552
}
535553
if (auto d_cte = get_constant(d); (d_cte & new_m_cte) != false) {
536554
// case 2
537-
if ((d_cte & ~new_m_cte) != false)
555+
if ((d_cte & ~new_m_cte) != false) {
538556
new_disjoint.insert(~new_m_cte & d);
557+
558+
#ifdef DEBUG
559+
BOOST_LOG_TRIVIAL(trace)
560+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case2]/new_disjoint: " << (~new_m_cte & d) << "\n";
561+
#endif // DEBUG
562+
539563
// case 3
540-
else if ((~d_cte & new_m_cte) != false) {
564+
} else if ((~d_cte & new_m_cte) != false) {
541565
new_disjoint.insert(d);
542-
new_m = ~d_cte & new_m;
566+
new_m = (~d_cte & new_m) | bf_reduce_canonical<BAs...>();
567+
568+
#ifdef DEBUG
569+
BOOST_LOG_TRIVIAL(trace)
570+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case3]/new_disjoint: " << d << "\n"
571+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case3]/new_m: " << new_m << "\n";
572+
#endif // DEBUG
573+
543574
// case 4
544575
} else {
545576

546577
#ifdef DEBUG
547578
BOOST_LOG_TRIVIAL(trace)
548-
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/d_cte: " << d_cte << "\n";
579+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/d_cte: " << d_cte << "\n";
549580
#endif // DEBUG
550581

551582
auto s = d_cte == _1<BAs...>
@@ -558,14 +589,27 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
558589

559590
#ifdef DEBUG
560591
BOOST_LOG_TRIVIAL(trace)
561-
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/s: " << s << "\n";
592+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/s: " << s << "\n";
562593
#endif // DEBUG
563594

564595
new_disjoint.insert(s & d);
565-
new_m = ~s & new_m;
596+
new_m = (~s & new_m) | bf_reduce_canonical<BAs...>();
597+
598+
#ifdef DEBUG
599+
BOOST_LOG_TRIVIAL(trace)
600+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/new_disjoint: " << (s & d) << "\n"
601+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/new_m: " << new_m << "\n";
602+
#endif // DEBUG
566603
}
567604
// case 5
568-
} else new_disjoint.insert(d);
605+
} else {
606+
new_disjoint.insert(d);
607+
608+
#ifdef DEBUG
609+
BOOST_LOG_TRIVIAL(trace)
610+
<< "solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case5]/new_disjoint: " << d << "\n";
611+
#endif // DEBUG
612+
}
569613
}
570614
new_disjoint.insert(new_m);
571615
return new_disjoint;
@@ -574,9 +618,27 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
574618
template<typename...BAs>
575619
minterm_system<BAs...> make_minterm_system_disjoint(const minterm_system<BAs...>& sys,
576620
const tau<BAs...>& splitter_one) {
621+
622+
#ifdef DEBUG
623+
BOOST_LOG_TRIVIAL(trace)
624+
<< "solver.h:" << __LINE__ << " make_minterm_system_disjoint/system: ";
625+
for (const auto& minterm : sys)
626+
BOOST_LOG_TRIVIAL(trace)
627+
<< "solver.h:" << __LINE__ << "\t" << minterm;
628+
#endif // DEBUG
629+
577630
minterm_system<BAs...> disjoints;
578631
for (auto it = sys.begin(); it != sys.end(); ++it)
579632
disjoints = add_minterm_to_disjoint<BAs...>(disjoints, *it, splitter_one);
633+
634+
#ifdef DEBUG
635+
BOOST_LOG_TRIVIAL(trace)
636+
<< "solver.h:" << __LINE__ << " make_minterm_system_disjoint/disjoints: ";
637+
for (const auto& minterm : disjoints)
638+
BOOST_LOG_TRIVIAL(trace)
639+
<< "solver.h:" << __LINE__ << "\t" << minterm;
640+
#endif // DEBUG
641+
580642
return disjoints;
581643
}
582644

tests/integration/test_integration-solver.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -522,17 +522,17 @@ TEST_SUITE("solve_system") {
522522
CHECK ( test_solve_system(equality, inequalities) );
523523
}
524524

525-
/*TEST_CASE("two var: y < x && z < y && w < z.") {
526-
const char* equality = "y & x' | z & y' | w & z' = 0.";
525+
TEST_CASE("two var: y < x && z < y && w < z.") {
526+
const char* equality = "x'y | y'z | wz' = 0.";
527527
const std::vector<std::string> inequalities =
528-
{ "y & x' | x & y' != 0.", "y & z' | z & y' != 0.", "w' & z | w & z' != 0." };
528+
{ " w'z|wz' != 0.", "xy' != 0.", "yz' != 0." };
529529
CHECK ( test_solve_system(equality, inequalities) );
530-
}*/
530+
}
531531

532532
/*TEST_CASE("two var: y < x && y = {a}:sbf && x' != 0.") {
533533
const char* equality = "y'{ a } : sbf|y{ a' } : sbf | yx'= 0.";
534534
const std::vector<std::string> inequalities =
535-
{ "y & x' | x & y' != 0.", "x' != 0." };
535+
{ "y'x|yx' != 0.", "x' != 0." };
536536
CHECK ( test_solve_system(equality, inequalities) );
537537
}*/
538538

0 commit comments

Comments
 (0)