00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <boost/test/unit_test.hpp>
00020 #include "torc/router/TraceNode.hpp"
00021 #include "torc/architecture/DDB.hpp"
00022 #include "torc/architecture/OutputStreamHelpers.hpp"
00023
00024 namespace torc {
00025 namespace router {
00026
00027 BOOST_AUTO_TEST_SUITE(router)
00028
00029
00030 BOOST_AUTO_TEST_CASE(TraceNodeT) {
00031 typedef architecture::Tilewire Tilewire;
00032 typedef architecture::Arc Arc;
00033
00034
00035 Tilewire tilewire1(architecture::xilinx::TileIndex(100), architecture::xilinx::WireIndex(1));
00036 Tilewire tilewire2(architecture::xilinx::TileIndex(100), architecture::xilinx::WireIndex(2));
00037 Tilewire tilewire3(architecture::xilinx::TileIndex(120), architecture::xilinx::WireIndex(3));
00038 Tilewire tilewire4(architecture::xilinx::TileIndex(120), architecture::xilinx::WireIndex(4));
00039 Tilewire tilewire5(architecture::xilinx::TileIndex(140), architecture::xilinx::WireIndex(5));
00040 Tilewire tilewire6(architecture::xilinx::TileIndex(140), architecture::xilinx::WireIndex(6));
00041
00042
00043
00044 BOOST_CHECK_EQUAL(sizeof(TraceNode), sizeof(boost::int32_t)
00045 + sizeof(Tilewire) + sizeof(std::vector<TraceNode*>)
00046 + sizeof(std::vector<std::pair<Tilewire, TraceNode*> >));
00047 BOOST_CHECK_EQUAL(sizeof(std::vector<TraceNode*>), 24u);
00048 BOOST_CHECK_EQUAL(sizeof(std::vector<std::pair<Tilewire, TraceNode*> >), 24u);
00049 BOOST_CHECK_EQUAL(sizeof(Tilewire), 6u);
00050 BOOST_CHECK_EQUAL(sizeof(TraceNode), 58u);
00051 BOOST_CHECK_EQUAL(sizeof(TraceNode*), 8u);
00052 BOOST_CHECK_EQUAL(sizeof(boost::int32_t), 4u);
00053
00054
00055
00056 TraceNode* tracenode1 = new TraceNode(tilewire1);
00057 TraceNode* tracenode2 = new TraceNode(tilewire2);
00058 TraceNode* tracenode3 = new TraceNode(tilewire3);
00059 TraceNode* tracenode4 = new TraceNode(tilewire4);
00060 TraceNode* tracenode5 = new TraceNode(tilewire5);
00061 TraceNode* tracenode6 = new TraceNode(tilewire6);
00062
00063 BOOST_CHECK(TraceNode::sLiveNodes == 6);
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 BOOST_CHECK(tracenode1 != 0);
00075 BOOST_CHECK(tracenode1->getDepth() == -1);
00076 BOOST_CHECK(tracenode1->getNumChildren() == 0);
00077 BOOST_CHECK(tracenode1->getNumParents() == 0);
00078 BOOST_CHECK(tracenode1->getTilewire() == tilewire1);
00079 BOOST_CHECK(tracenode1->getChild(0) == 0);
00080 BOOST_CHECK(tracenode1->getParent(0) == 0);
00081 BOOST_CHECK(tracenode1->removeChild(0) == 0);
00082 BOOST_CHECK(tracenode1->removeParent(0) == 0);
00083
00084
00085 tracenode1->addChild(tracenode3);
00086 BOOST_CHECK(tracenode1->getNumChildren() == 1);
00087 BOOST_CHECK(tracenode1->getChild(0)->getTilewire() == tilewire3);
00088 tracenode2->addChild(tracenode4);
00089 BOOST_CHECK(tracenode2->getNumChildren() == 1);
00090 BOOST_CHECK(tracenode2->getChild(0)->getTilewire() == tilewire4);
00091 tracenode3->addParent(tracenode1);
00092 BOOST_CHECK(tracenode3->getNumParents() == 1);
00093 BOOST_CHECK(tracenode3->getParent(0)->getTilewire() == tilewire1);
00094 tracenode3->addChild(tracenode4);
00095 BOOST_CHECK(tracenode3->getNumChildren() == 1);
00096 BOOST_CHECK(tracenode3->getChild(0)->getTilewire() == tilewire4);
00097 tracenode4->addParent(tracenode2);
00098 BOOST_CHECK(tracenode4->getNumParents() == 1);
00099 tracenode4->addParent(tracenode3);
00100 BOOST_CHECK(tracenode4->getNumParents() == 2);
00101 std::vector<TraceNode*> testvec;
00102 testvec.push_back(tracenode5);
00103 testvec.push_back(tracenode6);
00104 tracenode4->addChildren(testvec);
00105 BOOST_CHECK(tracenode4->getNumChildren() == 2);
00106 tracenode5->addParent(tracenode4);
00107 BOOST_CHECK(tracenode5->getNumParents() == 1);
00108 tracenode6->addParent(tracenode4);
00109 BOOST_CHECK(tracenode6->getNumParents() == 1);
00110
00111
00112 BOOST_CHECK(tracenode1->removeChild(0)->getTilewire() == tilewire3);
00113 BOOST_CHECK(tracenode1->getNumChildren() == 0);
00114 BOOST_CHECK(tracenode2->removeChild(0)->getTilewire() == tilewire4);
00115 BOOST_CHECK(tracenode2->getNumChildren() == 0);
00116 BOOST_CHECK(tracenode3->removeParent(0) == tracenode1);
00117 BOOST_CHECK(tracenode3->getNumParents() == 0);
00118 BOOST_CHECK(tracenode3->removeChild(0)->getTilewire() == tilewire4);
00119 BOOST_CHECK(tracenode3->getNumChildren() == 0);
00120 BOOST_CHECK(tracenode4->removeParent(1) == tracenode3);
00121 BOOST_CHECK(tracenode4->getNumParents() == 1);
00122 BOOST_CHECK(tracenode4->removeParent(0) == tracenode2);
00123 BOOST_CHECK(tracenode4->getNumParents() == 0);
00124 BOOST_CHECK(tracenode4->removeChild(0)->getTilewire() == tilewire5);
00125 BOOST_CHECK(tracenode4->getNumChildren() == 1);
00126 BOOST_CHECK(tracenode4->removeChild(0)->getTilewire() == tilewire6);
00127 BOOST_CHECK(tracenode4->getNumChildren() == 0);
00128 BOOST_CHECK(tracenode5->removeParent(0) == tracenode4);
00129 BOOST_CHECK(tracenode5->getNumParents() == 0);
00130 BOOST_CHECK(tracenode6->removeParent(0)->getTilewire() == tilewire4);
00131 BOOST_CHECK(tracenode6->getNumParents() == 0);
00132
00133
00134 delete tracenode1;
00135 delete tracenode2;
00136 delete tracenode3;
00137 delete tracenode4;
00138 delete tracenode5;
00139 delete tracenode6;
00140
00141 BOOST_CHECK(TraceNode::sLiveNodes == 0);
00142
00143 tracenode1 = new TraceNode(tilewire1);
00144 tracenode2 = new TraceNode(tilewire2);
00145 tracenode3 = new TraceNode(tilewire3);
00146 tracenode4 = new TraceNode(tilewire4);
00147 tracenode5 = new TraceNode(tilewire5);
00148 tracenode6 = new TraceNode(tilewire6);
00149
00150
00151 tracenode1->addChild(tracenode3);
00152 tracenode2->addChild(tracenode4);
00153 tracenode3->addParent(tracenode1);
00154 tracenode3->addChild(tracenode4);
00155 tracenode4->addParent(tracenode2);
00156 tracenode4->addParent(tracenode3);
00157 testvec.clear();
00158 testvec.push_back(tracenode5);
00159 testvec.push_back(tracenode6);
00160 tracenode4->addChildren(testvec);
00161 tracenode5->addParent(tracenode4);
00162 tracenode6->addParent(tracenode4);
00163
00164 BOOST_CHECK(TraceNode::sLiveNodes == 6);
00165
00166
00167 delete tracenode1;
00168 delete tracenode2;
00169 delete tracenode3;
00170 delete tracenode4;
00171 delete tracenode5;
00172 delete tracenode6;
00173
00174 BOOST_CHECK(TraceNode::sLiveNodes == 0);
00175 }
00176
00177 BOOST_AUTO_TEST_SUITE_END()
00178
00179 }
00180 }