1 // -*- c++ -*- 2 //***************************************************************************** 3 /** @file BooleEnvTest.cc 4 * 5 * @author Ket Kalda, Alexander Dreyer 6 * @date 2010-11-02 7 * 8 * boost/test-driven unit test 9 * 10 * @par Copyright: 11 * (c) 2010 by The PolyBoRi Team 12 * 13 **/ 14 //***************************************************************************** 15 16 #if 0 17 #include <boost/test/unit_test.hpp> 18 #include <boost/version.hpp> 19 #if BOOST_VERSION < 107100 20 #include <boost/test/output_test_stream.hpp> 21 #else 22 #include <boost/test/tools/output_test_stream.hpp> 23 #endif 24 25 using boost::test_tools::output_test_stream; 26 27 #include <polybori/pbori_defs.h> 28 #include <polybori/BooleEnv.h> 29 #include <polybori/orderings/pbori_order.h> 30 31 USING_NAMESPACE_PBORI 32 33 struct Fenv { 34 Fenv(): ring(5) { BOOST_TEST_MESSAGE( "setup fixture" ); } 35 ~Fenv() { BOOST_TEST_MESSAGE( "teardown fixture" ); } 36 37 BoolePolyRing ring; 38 }; 39 40 BOOST_FIXTURE_TEST_SUITE(BooleEnvTestSuite, Fenv ) 41 42 BOOST_AUTO_TEST_CASE(test_dd_type) { 43 44 BOOST_TEST_MESSAGE( "variable, zero, one" ); 45 BOOST_CHECK_THROW(BooleEnv::variable(-1), PBoRiError); 46 BOOST_CHECK_EQUAL(BooleEnv::variable(0), ring.variable(0)); 47 BOOST_CHECK_EQUAL(BooleEnv::variable(1), ring.variable(1)); 48 BOOST_CHECK_EQUAL(BooleEnv::variable(2), ring.variable(2)); 49 BOOST_CHECK_EQUAL(BooleEnv::variable(3), ring.variable(3)); 50 BOOST_CHECK_EQUAL(BooleEnv::variable(4), ring.variable(4)); 51 BOOST_CHECK_THROW(BooleEnv::variable(5), PBoRiError); 52 BOOST_CHECK_EQUAL(BooleEnv::zero(), ring.zero()); 53 BOOST_CHECK_EQUAL(BooleEnv::one(), ring.one()); 54 } 55 56 BOOST_AUTO_TEST_CASE(test_variables) { 57 58 BOOST_TEST_MESSAGE( "nVariables, setVariableName, getVariableName" ); 59 BOOST_CHECK_EQUAL(BooleEnv::nVariables(), ring.nVariables()); 60 BooleEnv::setVariableName(0, "x"); 61 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(0), ring.getVariableName(0)); 62 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(0), "x"); 63 ring.setVariableName(1, "y"); 64 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(1), ring.getVariableName(1)); 65 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(1), "y"); 66 BooleEnv::setVariableName(2, "z"); 67 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(2), ring.getVariableName(2)); 68 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(2), "z"); 69 ring.setVariableName(3, "v"); 70 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(3), ring.getVariableName(3)); 71 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(3), "v"); 72 BooleEnv::setVariableName(4, "w"); 73 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(4), ring.getVariableName(4)); 74 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(4), "w"); 75 BooleEnv::setVariableName(5, "t"); 76 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(5), ring.getVariableName(5)); 77 BOOST_CHECK_EQUAL(BooleEnv::getVariableName(5), "t"); 78 79 80 BOOST_CHECK_THROW( BooleEnv::setVariableName(-1, "r"), std::exception); 81 82 BOOST_CHECK_THROW(BooleEnv::getVariableName(-1), std::exception); 83 BOOST_CHECK_THROW(BooleEnv::getVariableName(-1), std::exception); 84 } 85 86 BOOST_AUTO_TEST_CASE(test_ordering) { 87 88 BOOST_TEST_MESSAGE( "ordering, getOrderCode, getBaseOrderCode, changeOrdering" ); 89 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), ring.ordering().getOrderCode()); 90 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 91 BOOST_CHECK_EQUAL(BooleEnv::getBaseOrderCode(), ring.ordering().getBaseOrderCode()); 92 BooleEnv::changeOrdering(COrderEnums::dlex); 93 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::dlex); 94 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 95 ring.changeOrdering(COrderEnums::dp_asc); 96 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::dp_asc); 97 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 98 BooleEnv::changeOrdering(COrderEnums::block_dlex); 99 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::block_dlex); 100 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 101 ring.changeOrdering(COrderEnums::block_dp_asc); 102 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::block_dp_asc); 103 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 104 BooleEnv::changeOrdering(-1); 105 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::lp);//default is lp 106 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 107 BooleEnv::changeOrdering(5); 108 // BOOST_CHECK_EQUAL(BooleEnv::ordering().getOrderCode(), COrderEnums::lp);//default is lp 109 BOOST_CHECK_EQUAL(BooleEnv::getOrderCode(), ring.ordering().getOrderCode()); 110 } 111 112 BOOST_AUTO_TEST_CASE(test_ring) { 113 ///@todo implement == for rings? 114 BoolePolyRing notempty(3, 1, false); 115 BoolePolyRing empty(0,2,false); 116 117 // BOOST_TEST_MESSAGE( "ring, set" ); 118 // BOOST_CHECK_EQUAL(BooleEnv::ring().ordering().getOrderCode(), ring.ordering().getOrderCode()); 119 // BOOST_CHECK_EQUAL(BooleEnv::ring().nVariables(), ring.nVariables()); 120 // BooleEnv::set(notempty); 121 // BOOST_CHECK_EQUAL(BooleEnv::ring().ordering().getOrderCode(), notempty.ordering().getOrderCode()); 122 // BOOST_CHECK_EQUAL(BooleEnv::ring().nVariables(), notempty.nVariables()); 123 // BooleEnv::set(empty); 124 // BOOST_CHECK_EQUAL(BooleEnv::ring().ordering().getOrderCode(), empty.ordering().getOrderCode()); 125 // BOOST_CHECK_EQUAL(BooleEnv::ring().nVariables(), empty.nVariables()); 126 // BooleEnv::set(ring); 127 // BOOST_CHECK_EQUAL(BooleEnv::ring().ordering().getOrderCode(), ring.ordering().getOrderCode()); 128 // BOOST_CHECK_EQUAL(BooleEnv::ring().nVariables(), ring.nVariables()); 129 } 130 131 BOOST_AUTO_TEST_CASE(test_blocks) { 132 133 BOOST_TEST_MESSAGE( "blockBegin, blockEnd, appendBlock, clearBlocks, lastBlockStart" ); 134 BOOST_CHECK_EQUAL(BooleEnv::lastBlockStart(), ring.ordering().lastBlockStart()); 135 BOOST_CHECK_EQUAL(BooleEnv::lastBlockStart(), CUDD_MAXINDEX); 136 output_test_stream output, output_ring; 137 BooleEnv::changeOrdering(COrderEnums::block_dlex); 138 BOOST_CHECK_THROW(BooleEnv::appendBlock(0), std::exception); 139 BooleEnv::appendBlock(2); 140 BoolePolyRing::block_iterator start(BooleEnv::blockBegin()), 141 finish(BooleEnv::blockEnd()); 142 while (start != finish) { 143 output << *start <<", "; 144 ++start; 145 } 146 start = ring.ordering().blockBegin(); 147 finish = ring.ordering().blockEnd(); 148 while (start != finish) { 149 output_ring << *start <<", "; 150 ++start; 151 } 152 BOOST_CHECK_EQUAL(output.str(),output_ring.str()); 153 output_ring.str(""); 154 output_ring << "2, " << CUDD_MAXINDEX << ", "; 155 BOOST_CHECK_EQUAL(output.str(), output_ring.str()); 156 157 BooleEnv::clearBlocks(); 158 start = BooleEnv::blockBegin(); 159 finish = BooleEnv::blockEnd(); 160 output.str(""); 161 while (start != finish) { 162 output << *start <<", "; 163 ++start; 164 } 165 start = ring.ordering().blockBegin(); 166 finish = ring.ordering().blockEnd(); 167 output_ring.str(""); 168 while (start != finish) { 169 output_ring << *start <<", "; 170 ++start; 171 } 172 BOOST_CHECK_EQUAL(output.str(), output_ring.str()); 173 output_ring.str(""); 174 output_ring << CUDD_MAXINDEX << ", "; 175 BOOST_CHECK_EQUAL(output.str(), output_ring.str()); 176 } 177 178 BOOST_AUTO_TEST_SUITE_END() 179 180 181 #endif 182