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/Circuit.hpp"
00022
00023 namespace torc {
00024 namespace physical {
00025
00026 BOOST_AUTO_TEST_SUITE(physical)
00027
00028 typedef boost::shared_ptr<class RenamableInstance> RenamableInstanceSharedPtr;
00029 class RenamableInstance : public Instance {
00030 public:
00031 void setName(const string& inName) { mName = inName; }
00032 static RenamableInstanceSharedPtr& recast(InstanceSharedPtr& inInstancePtr) {
00033 return reinterpret_cast<RenamableInstanceSharedPtr&>(inInstancePtr);
00034 }
00035 };
00036
00037
00038 BOOST_AUTO_TEST_CASE(CircuitUnitTest) {
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 ModuleSharedPtr circuitPtr = Factory::newModulePtr("module", "anchor");
00049
00050 BOOST_REQUIRE(circuitPtr.get() != 0);
00051 BOOST_CHECK(circuitPtr->getInstanceCount() == 0);
00052 BOOST_CHECK(circuitPtr->getNetCount() == 0);
00053 BOOST_CHECK(circuitPtr->instancesBegin() == circuitPtr->instancesEnd());
00054 BOOST_CHECK(circuitPtr->netsBegin() == circuitPtr->netsEnd());
00055
00056
00057 InstanceSharedPtr instance1aPtr = Factory::newInstancePtr("instance", "SLICEL", "CLBLL_X16Y59",
00058 "SLICE_X27Y59");
00059 InstanceSharedPtr instance1bPtr = Factory::newInstancePtr("instance", "dummy", "dummy",
00060 "dummy");
00061 NetSharedPtr net1Ptr = Factory::newNetPtr("net1");
00062 net1Ptr->addPip(Factory::newPip("CLBLL_X16Y59", "L_DQ", "SITE_LOGIC_OUTS3",
00063 ePipUnidirectionalBuffered));
00064 NetSharedPtr net2aPtr = Factory::newNetPtr("net2");
00065 NetSharedPtr net2bPtr = Factory::newNetPtr("net2");
00066 NetSharedPtr net3Ptr = Factory::newNetPtr("net3");
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 BOOST_CHECK_EQUAL(circuitPtr->addInstance(instance1aPtr), true);
00077 BOOST_CHECK_EQUAL(circuitPtr->addInstance(instance1bPtr), false);
00078 BOOST_CHECK_EQUAL(circuitPtr->addNet(net1Ptr), true);
00079 BOOST_CHECK_EQUAL(circuitPtr->addNet(net2aPtr), true);
00080 BOOST_CHECK_EQUAL(circuitPtr->addNet(net2bPtr), false);
00081 BOOST_CHECK_EQUAL(circuitPtr->addNet(net3Ptr), true);
00082 BOOST_CHECK(circuitPtr->getInstanceCount() == 1);
00083 BOOST_CHECK(circuitPtr->getNetCount() == 3);
00084
00085
00086
00087
00088
00089 BOOST_CHECK(instance1aPtr->getTile().length() != 0);
00090 BOOST_CHECK(instance1aPtr->getSite().length() != 0);
00091 BOOST_CHECK(net1Ptr->getPipCount() != 0);
00092 circuitPtr->unplace();
00093 circuitPtr->unroute();
00094 BOOST_CHECK(instance1aPtr->getTile().length() == 0);
00095 BOOST_CHECK(instance1aPtr->getSite().length() == 0);
00096 BOOST_CHECK(net1Ptr->getPipCount() == 0);
00097
00098
00099
00100
00101
00102
00103
00104 BOOST_CHECK(circuitPtr->removeInstance(*circuitPtr->findInstance("instance")));
00105 BOOST_CHECK(circuitPtr->removeNet(*circuitPtr->findNet("net1")));
00106 BOOST_CHECK(circuitPtr->removeNet(*circuitPtr->findNet("net2")));
00107 BOOST_CHECK(circuitPtr->removeNet(*circuitPtr->findNet("net3")));
00108 BOOST_CHECK(circuitPtr->getInstanceCount() == 0);
00109 BOOST_CHECK(circuitPtr->getNetCount() == 0);
00110 }
00111
00112 BOOST_AUTO_TEST_SUITE_END()
00113
00114 }
00115 }