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/RouteTreeNode.hpp"
00021
00022 namespace torc {
00023 namespace router {
00024
00025 BOOST_AUTO_TEST_SUITE(router)
00026
00027
00028 BOOST_AUTO_TEST_CASE(RouteTreeNodeT) {
00029 typedef architecture::Tilewire Tilewire;
00030 typedef architecture::Arc Arc;
00031
00032 Tilewire tilewire1(architecture::xilinx::TileIndex(100), architecture::xilinx::WireIndex(2));
00033 Tilewire tilewire2(architecture::xilinx::TileIndex(100), architecture::xilinx::WireIndex(3));
00034 Tilewire tilewire3(architecture::xilinx::TileIndex(120), architecture::xilinx::WireIndex(2));
00035 Tilewire tilewire4(architecture::xilinx::TileIndex(120), architecture::xilinx::WireIndex(3));
00036 Arc arc2(tilewire2, tilewire3);
00037 boost::int32_t cost1 = 4;
00038 boost::int32_t cost2 = 5;
00039
00040
00041
00042 BOOST_CHECK_EQUAL(sizeof(RouteTreeNode), sizeof(RouteNode) + sizeof(boost::int32_t)
00043 + sizeof(RouteTreeNode*) + sizeof(std::vector<RouteTreeNode*>*));
00044 BOOST_CHECK_EQUAL(sizeof(RouteNode), 24u);
00045 BOOST_CHECK_EQUAL(sizeof(RouteTreeNode), 44u);
00046 BOOST_CHECK_EQUAL(sizeof(RouteTreeNode*), 8u);
00047 BOOST_CHECK_EQUAL(sizeof(std::vector<RouteTreeNode*>*), 8u);
00048 BOOST_CHECK_EQUAL(sizeof(boost::int32_t), 4u);
00049
00050
00051
00052
00053
00054 RouteTreeNode* routenode1 = new RouteTreeNode(tilewire1, tilewire2, cost1, 0);
00055 RouteTreeNode* routenode2 = new RouteTreeNode(arc2, cost1, routenode1);
00056 RouteTreeNode* routenode3 = new RouteTreeNode(tilewire3, tilewire4, cost2, routenode2);
00057 RouteTreeNode* routenode4 = new RouteTreeNode(tilewire4, tilewire1, cost2, routenode2);
00058 RouteTreeNode* routenode5 = new RouteTreeNode();
00059 BOOST_CHECK_EQUAL(routenode1 != 0, true);
00060 BOOST_CHECK_EQUAL(routenode2 != 0, true);
00061 BOOST_CHECK_EQUAL(routenode3 != 0, true);
00062 BOOST_CHECK_EQUAL(routenode4 != 0, true);
00063 BOOST_CHECK_EQUAL(routenode5 != 0, true);
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 std::vector<RouteTreeNode*> vec1;
00074 vec1.push_back(routenode2);
00075 std::vector<RouteTreeNode*> vec2;
00076 vec2.push_back(routenode3);
00077 vec2.push_back(routenode4);
00078 routenode1->addChildren(vec1);
00079 routenode2->addChildren(vec2);
00080 BOOST_CHECK_EQUAL(routenode1->getDepth() == 0, true);
00081 BOOST_CHECK_EQUAL(routenode2->getDepth() == 1, true);
00082 BOOST_CHECK_EQUAL(routenode3->getDepth() == 2, true);
00083 BOOST_CHECK_EQUAL(routenode4->getDepth() == 2, true);
00084 BOOST_CHECK_EQUAL(routenode5->getDepth() == 0, true);
00085 BOOST_CHECK_EQUAL(routenode1->getNumChildren() == 1, true);
00086 BOOST_CHECK_EQUAL(routenode2->getNumChildren() == 2, true);
00087 BOOST_CHECK_EQUAL(routenode3->getNumChildren() == 0, true);
00088 BOOST_CHECK_EQUAL(routenode4->getNumChildren() == 0, true);
00089 BOOST_CHECK_EQUAL(routenode1->getChild(0) == routenode2, true);
00090 BOOST_CHECK_EQUAL(routenode2->getChild(0) == routenode3, true);
00091 BOOST_CHECK_EQUAL(routenode2->getChild(1) == routenode4, true);
00092
00093 routenode1->makeParent(tilewire4, tilewire3);
00094 BOOST_CHECK_EQUAL(tilewire1 == routenode1->getSourceTilewire(), true);
00095 BOOST_CHECK_EQUAL(tilewire2 == routenode1->getSinkTilewire(), true);
00096 RouteTreeNode* parentnode = (RouteTreeNode*)routenode1->getParent();
00097 BOOST_CHECK_EQUAL(tilewire4 == parentnode->getSourceTilewire(), true);
00098 BOOST_CHECK_EQUAL(tilewire3 == parentnode->getSinkTilewire(), true);
00099 BOOST_CHECK_EQUAL(parentnode->getDepth() == -1, true);
00100 routenode4->normalizeDepth();
00101 BOOST_CHECK_EQUAL(parentnode->getDepth() == 0, true);
00102 BOOST_CHECK_EQUAL(routenode1->getDepth() == 1, true);
00103 BOOST_CHECK_EQUAL(routenode2->getDepth() == 2, true);
00104 BOOST_CHECK_EQUAL(routenode3->getDepth() == 3, true);
00105 BOOST_CHECK_EQUAL(routenode4->getDepth() == 3, true);
00106 BOOST_CHECK_EQUAL(routenode5->getDepth() == 0, true);
00107 }
00108
00109 BOOST_AUTO_TEST_SUITE_END()
00110
00111 }
00112 }