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 #define DEBUG // test the debug functionality as well
00021 #include "torc/architecture/Array.hpp"
00022 #include "torc/architecture/Tilewire.hpp"
00023 #include <iostream>
00024
00025 namespace torc {
00026 namespace architecture {
00027
00028 BOOST_AUTO_TEST_SUITE(architecture)
00029
00030 using namespace torc::architecture::xilinx;
00031
00032
00033 BOOST_AUTO_TEST_CASE(ArrayUnitTest) {
00034
00035
00036
00037
00038
00039
00040
00041
00042 uint32_t size5 = 5;
00043 uint32_t size3 = 3;
00044 typedef Array<int> int_array_t;
00045 typedef Array<Tilewire> tilewire_array_t;
00046 int_array_t intArray;
00047 tilewire_array_t tilewireArray(size3);
00048
00049
00050
00051 bool boundsEnforced = false;
00052 try {
00053
00054 Tilewire outOfRange = tilewireArray[size3];
00055 (void) outOfRange;
00056 } catch(std::out_of_range oor) {
00057 std::cerr << "Bounds checking generated message \"" << oor.what() << "\"" << std::endl;
00058 boundsEnforced = true;
00059 }
00060 BOOST_CHECK(boundsEnforced);
00061
00062
00063
00064
00065 BOOST_CHECK_EQUAL(intArray.getSize(), 0u);
00066 BOOST_CHECK_EQUAL(tilewireArray.getSize(), size3);
00067 intArray.setSize(size5);
00068 BOOST_CHECK_EQUAL(intArray.getSize(), size5);
00069
00070
00071
00072
00073
00074 intArray[0] = 0;
00075 intArray[1] = 1;
00076 intArray[2] = 2;
00077 intArray[3] = 3;
00078 intArray[4] = 4;
00079 int_array_t::iterator ip = intArray.begin();
00080 int_array_t::iterator ie = intArray.end();
00081 BOOST_CHECK(*ip++ == 0);
00082 BOOST_CHECK(*ip++ == 1);
00083 BOOST_CHECK(*ip++ == 2);
00084 BOOST_CHECK(*ip++ == 3);
00085 BOOST_CHECK(*ip++ == 4);
00086 BOOST_CHECK_EQUAL(ip, ie);
00087
00088
00089
00090
00091
00092 Tilewire tilewire1(TileIndex(1), WireIndex(1));
00093 Tilewire tilewire2(TileIndex(1), WireIndex(2));
00094 Tilewire tilewire3(TileIndex(4), WireIndex(9));
00095 tilewireArray[0] = tilewire1;
00096 tilewireArray[1] = tilewire2;
00097 tilewireArray[2] = tilewire3;
00098 tilewire_array_t::const_iterator tp = tilewireArray.begin();
00099 tilewire_array_t::const_iterator te = tilewireArray.end();
00100 BOOST_CHECK(*tp++ == tilewireArray[0]);
00101 BOOST_CHECK(*tp++ == tilewireArray[1]);
00102 BOOST_CHECK(*tp++ == tilewireArray[2]);
00103 BOOST_CHECK_EQUAL(tp, te);
00104
00105
00106
00107 int i = 1;
00108 typedef Array2D<int> int_array2d_t;
00109 int_array2d_t intArray2d(2);
00110 intArray2d[0].setSize(3);
00111 intArray2d[1].setSize(1);
00112 intArray2d[0][0] = i++;
00113 intArray2d[0][1] = i++;
00114 intArray2d[0][2] = i++;
00115 intArray2d[1][0] = i++;
00116 Array<Array<int> >::const_iterator l1p = intArray2d.begin();
00117 int_array2d_t::const_iterator l1e = intArray2d.end();
00118 i = 1;
00119 while(l1p < l1e) {
00120 int_array_t::const_iterator l2p = l1p->begin();
00121 int_array_t::const_iterator l2e = l1p->end();
00122 while(l2p < l2e) {
00123 BOOST_CHECK_EQUAL(*l2p++, i++);
00124 }
00125 l1p++;
00126 }
00127 }
00128
00129 BOOST_AUTO_TEST_SUITE_END()
00130
00131 }
00132 }