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/physical/Factory.hpp"
00021 #include "torc/physical/Instance.hpp"
00022
00023 namespace torc {
00024 namespace physical {
00025
00026 BOOST_AUTO_TEST_SUITE(physical)
00027
00028
00029 BOOST_AUTO_TEST_CASE(InstanceUnitTest) {
00030
00031 std::string name = "name";
00032 std::string type = "type";
00033 std::string tile = "tile";
00034 std::string site = "site";
00035 ModuleSharedPtr modulePtr = Factory::newModulePtr("name", "anchor");
00036 InstanceSharedPtr instance2Ptr = Factory::newInstancePtr(name, "type", "tile", "site");
00037 InstanceReferenceSharedPtr instanceReferencePtr = Factory::newInstanceReferencePtr("name",
00038 modulePtr, instance2Ptr);
00039
00040
00041
00042
00043
00044
00045 EInstanceBonding bonding = eInstanceBondingBonded;
00046 InstanceSharedPtr instance1Ptr = Factory::newInstancePtr(name, "", "", "");
00047 BOOST_REQUIRE(instance1Ptr != 0);
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 BOOST_CHECK(instance1Ptr->getType().empty());
00061 BOOST_CHECK(instance1Ptr->getTile().empty());
00062 BOOST_CHECK(instance1Ptr->getSite().empty());
00063 BOOST_CHECK(instance1Ptr->getBonding() == eInstanceBondingUnknown);
00064 instance1Ptr->setType(type);
00065 instance1Ptr->setTile(tile);
00066 instance1Ptr->setSite(site);
00067 instance1Ptr->setBonding(bonding);
00068 instance1Ptr->setInstanceReferencePtr(instanceReferencePtr);
00069 BOOST_CHECK(instance1Ptr->getType() == type);
00070 BOOST_CHECK(instance1Ptr->getTile() == tile);
00071 BOOST_CHECK(instance1Ptr->getSite() == site);
00072 BOOST_CHECK(instance1Ptr->getBonding() == bonding);
00073 BOOST_CHECK(instance1Ptr->getInstanceReferencePtr() == instanceReferencePtr);
00074
00075
00076
00077 BOOST_CHECK(*instance1Ptr == *instance2Ptr);
00078
00079
00080
00081 instance1Ptr->unplace();
00082 BOOST_CHECK(instance1Ptr->getTile().empty());
00083 BOOST_CHECK(instance1Ptr->getSite().empty());
00084
00085
00086
00087
00088
00089 PinName pinName1("name1");
00090 PinName pinName2("name2");
00091 InstancePinSharedPtr instancePin1Ptr = Factory::newInstancePinPtr(instance1Ptr, pinName1);
00092 InstancePinSharedPtr instancePin2Ptr = Factory::newInstancePinPtr(instance1Ptr, pinName1);
00093 InstancePinSharedPtr instancePin3Ptr = Factory::newInstancePinPtr(instance1Ptr, pinName2);
00094 NetSharedPtr netPtr = Factory::newNetPtr("name");
00095 netPtr->addSource(instancePin1Ptr);
00096 netPtr->addSource(instancePin2Ptr);
00097 netPtr->addSink(instancePin3Ptr);
00098 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(), 3u);
00099 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(pinName1), 2u);
00100 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(pinName2), 1u);
00101 Instance::InstancePinSharedPtrConstIterator ipp = instance1Ptr->findPin(pinName1);
00102 Instance::InstancePinSharedPtrConstIterator ipe = instance1Ptr->pinsEnd();
00103 BOOST_REQUIRE(ipp != ipe);
00104 BOOST_CHECK(ipp->second == instancePin1Ptr);
00105 BOOST_CHECK_EQUAL(ipp->second->getPinName(), pinName1);
00106 BOOST_CHECK_EQUAL(ipp->second->getPinName(), ipp->first);
00107 BOOST_CHECK(ipp->second->getParentWeakPtr().lock() == netPtr);
00108 std::pair<Instance::InstancePinSharedPtrConstIterator,
00109 Instance::InstancePinSharedPtrConstIterator> range = instance1Ptr->findPinRange(pinName1);
00110 BOOST_REQUIRE(range.first != range.second);
00111 BOOST_CHECK_EQUAL(range.first->second->getPinName(), pinName1); range.first++;
00112 BOOST_CHECK_EQUAL(range.first->second->getPinName(), pinName1); range.first++;
00113 BOOST_CHECK(range.first == range.second);
00114 netPtr->removeSource(instancePin2Ptr);
00115 netPtr->removeSink(instancePin3Ptr);
00116 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(), 1u);
00117 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(pinName1), 1u);
00118 BOOST_CHECK_EQUAL(instance1Ptr->getPinCount(pinName2), 0u);
00119 ipp = instance1Ptr->findPin(pinName1);
00120 ipe = instance1Ptr->pinsEnd();
00121 BOOST_REQUIRE(ipp != ipe);
00122 BOOST_CHECK(ipp->second == instancePin1Ptr);
00123 BOOST_CHECK_EQUAL(ipp->second->getPinName(), pinName1);
00124 BOOST_CHECK_EQUAL(ipp->second->getPinName(), ipp->first);
00125 BOOST_CHECK(ipp->second->getParentWeakPtr().lock() == netPtr);
00126 }
00127
00128 BOOST_AUTO_TEST_SUITE_END()
00129
00130 }
00131 }