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