libStatGen Software  1
MemoryMapArrayTest.cpp
00001 /*
00002  *  Copyright (C) 2010-2012  Regents of the University of Michigan
00003  *
00004  *   This program is free software: you can redistribute it and/or modify
00005  *   it under the terms of the GNU General Public License as published by
00006  *   the Free Software Foundation, either version 3 of the License, or
00007  *   (at your option) any later version.
00008  *
00009  *   This program is distributed in the hope that it will be useful,
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *   GNU General Public License for more details.
00013  *
00014  *   You should have received a copy of the GNU General Public License
00015  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016  */
00017 
00018 #include <getopt.h>
00019 #include "Generic.h"
00020 #include <stdio.h>
00021 #include "MemoryMapArray.h"
00022 #include "MemoryMapArrayTest.h"
00023 
00024 #include <assert.h>
00025 #include <stdlib.h>
00026 
00027 #define TEST_FILE_NAME "results/testMemoryMapArray.vector"
00028 
00029 class MemoryMapArrayTest : public UnitTest
00030 {
00031 public:
00032     MemoryMapArrayTest(const char *title) : UnitTest(title) {;}
00033     void testBool();
00034     void test2Bit();
00035     void test4Bit();
00036     void test32Bit();
00037 
00038     void test() {
00039         testBool();
00040         test2Bit();
00041         test4Bit();
00042         test32Bit();
00043     }
00044 };
00045 
00046 void MemoryMapArrayTest::testBool(void)
00047 {
00048     mmapArrayBool_t   testVector;
00049 
00050     // ignore return code here
00051     if(unlink(TEST_FILE_NAME) == 0)
00052     {
00053         // Nothing to do, just deleting previous test file
00054     }
00055     
00056 
00057     check(m_failures, ++m_testNum, "Create 1 bit vector file", 0,
00058             testVector.create(TEST_FILE_NAME, 11));
00059     testVector.set(0,0);
00060     testVector.set(1,1);
00061     testVector.set(2,0);
00062     testVector.set(3,1);
00063     testVector.set(4,1);
00064     testVector.set(5,0);
00065     testVector.set(6,1);
00066     testVector.set(7,0);
00067     testVector.set(8,0);
00068     testVector.set(9,0);
00069     testVector.set(10,1);
00070     check(m_failures, ++m_testNum, "Access 1 bit element 0", 0U, testVector[0]);
00071     check(m_failures, ++m_testNum, "Access 1 bit element 1", 1U, testVector[1]);
00072     check(m_failures, ++m_testNum, "Access 1 bit element 2", 0U, testVector[2]);
00073     check(m_failures, ++m_testNum, "Access 1 bit element 3", 1U, testVector[3]);
00074     check(m_failures, ++m_testNum, "Access 1 bit element 4", 1U, testVector[4]);
00075     check(m_failures, ++m_testNum, "Access 1 bit element 5", 0U, testVector[5]);
00076     check(m_failures, ++m_testNum, "Access 1 bit element 6", 1U, testVector[6]);
00077     check(m_failures, ++m_testNum, "Access 1 bit element 7", 0U, testVector[7]);
00078     check(m_failures, ++m_testNum, "Access 1 bit element 8", 0U, testVector[8]);
00079     check(m_failures, ++m_testNum, "Access 1 bit element 9", 0U, testVector[9]);
00080     check(m_failures, ++m_testNum, "Access 1 bit element 10", 1U, testVector[10]);
00081     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00082     check(m_failures, ++m_testNum, "Re-open vector file", false, testVector.open(TEST_FILE_NAME));
00083     check(m_failures, ++m_testNum, "Access 1 bit element 0", 0U, testVector[0]);
00084     check(m_failures, ++m_testNum, "Access 1 bit element 1", 1U, testVector[1]);
00085     check(m_failures, ++m_testNum, "Access 1 bit element 2", 0U, testVector[2]);
00086     check(m_failures, ++m_testNum, "Access 1 bit element 3", 1U, testVector[3]);
00087     check(m_failures, ++m_testNum, "Access 1 bit element 4", 1U, testVector[4]);
00088     check(m_failures, ++m_testNum, "Access 1 bit element 5", 0U, testVector[5]);
00089     check(m_failures, ++m_testNum, "Access 1 bit element 6", 1U, testVector[6]);
00090     check(m_failures, ++m_testNum, "Access 1 bit element 7", 0U, testVector[7]);
00091     check(m_failures, ++m_testNum, "Access 1 bit element 8", 0U, testVector[8]);
00092     check(m_failures, ++m_testNum, "Access 1 bit element 9", 0U, testVector[9]);
00093     check(m_failures, ++m_testNum, "Access 1 bit element 10", 1U, testVector[10]);
00094 
00095     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00096     check(m_failures, ++m_testNum, "Unlink vector file", 0, unlink(TEST_FILE_NAME));
00097 
00098 
00099 }
00100 
00101 void MemoryMapArrayTest::test2Bit(void)
00102 {
00103     mmapArray2Bit_t   testVector;
00104 
00105     // ignore return code here
00106     if(unlink(TEST_FILE_NAME) == 0)
00107     {
00108         // Nothing to do, just deleting previous test file
00109     }
00110 
00111     check(m_failures, ++m_testNum, "Create 2 bit vector file", 0,
00112             testVector.create(TEST_FILE_NAME, 11));
00113 
00114     testVector.set(0,0);
00115     testVector.set(1,1);
00116     testVector.set(2,2);
00117     testVector.set(3,3);
00118     testVector.set(4,3);
00119     testVector.set(5,2);
00120     testVector.set(6,1);
00121     testVector.set(7,0);
00122     testVector.set(8,2);
00123     testVector.set(9,1);
00124     testVector.set(10,3);
00125     check(m_failures, ++m_testNum, "Access 2 bit element 0", 0U, testVector[0]);
00126     check(m_failures, ++m_testNum, "Access 2 bit element 1", 1U, testVector[1]);
00127     check(m_failures, ++m_testNum, "Access 2 bit element 2", 2U, testVector[2]);
00128     check(m_failures, ++m_testNum, "Access 2 bit element 3", 3U, testVector[3]);
00129     check(m_failures, ++m_testNum, "Access 2 bit element 4", 3U, testVector[4]);
00130     check(m_failures, ++m_testNum, "Access 2 bit element 5", 2U, testVector[5]);
00131     check(m_failures, ++m_testNum, "Access 2 bit element 6", 1U, testVector[6]);
00132     check(m_failures, ++m_testNum, "Access 2 bit element 7", 0U, testVector[7]);
00133     check(m_failures, ++m_testNum, "Access 2 bit element 8", 2U, testVector[8]);
00134     check(m_failures, ++m_testNum, "Access 2 bit element 9", 1U, testVector[9]);
00135     check(m_failures, ++m_testNum, "Access 2 bit element 10", 3U, testVector[10]);
00136     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00137     check(m_failures, ++m_testNum, "Re-open vector file", false, testVector.open(TEST_FILE_NAME));
00138     check(m_failures, ++m_testNum, "Access 2 bit element 0", 0U, testVector[0]);
00139     check(m_failures, ++m_testNum, "Access 2 bit element 1", 1U, testVector[1]);
00140     check(m_failures, ++m_testNum, "Access 2 bit element 2", 2U, testVector[2]);
00141     check(m_failures, ++m_testNum, "Access 2 bit element 3", 3U, testVector[3]);
00142     check(m_failures, ++m_testNum, "Access 2 bit element 4", 3U, testVector[4]);
00143     check(m_failures, ++m_testNum, "Access 2 bit element 5", 2U, testVector[5]);
00144     check(m_failures, ++m_testNum, "Access 2 bit element 6", 1U, testVector[6]);
00145     check(m_failures, ++m_testNum, "Access 2 bit element 7", 0U, testVector[7]);
00146     check(m_failures, ++m_testNum, "Access 2 bit element 8", 2U, testVector[8]);
00147     check(m_failures, ++m_testNum, "Access 2 bit element 9", 1U, testVector[9]);
00148     check(m_failures, ++m_testNum, "Access 2 bit element 10", 3U, testVector[10]);
00149 
00150     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00151     check(m_failures, ++m_testNum, "Unlink vector file", 0, unlink(TEST_FILE_NAME));
00152 
00153 }
00154 
00155 void MemoryMapArrayTest::test4Bit(void)
00156 {
00157     mmapArray4Bit_t   testVector;
00158 
00159     // ignore return code here
00160     if(unlink(TEST_FILE_NAME) == 0)
00161     {
00162         // Nothing to do, just deleting previous test file
00163     }
00164 
00165     check(m_failures, ++m_testNum, "Create 4 bit vector file", 0,
00166             testVector.create(TEST_FILE_NAME, 11));
00167 
00168     testVector.set(0,0);
00169     testVector.set(1,1);
00170     testVector.set(2,2);
00171     testVector.set(3,3);
00172     testVector.set(4,4);
00173     testVector.set(5,5);
00174     testVector.set(6,6);
00175     testVector.set(7,7);
00176     testVector.set(8,8);
00177     testVector.set(9,9);
00178     testVector.set(10,10);
00179 
00180     check(m_failures, ++m_testNum, "Access 4 bit element 0", 0U, testVector[0]);
00181     check(m_failures, ++m_testNum, "Access 4 bit element 1", 1U, testVector[1]);
00182     check(m_failures, ++m_testNum, "Access 4 bit element 2", 2U, testVector[2]);
00183     check(m_failures, ++m_testNum, "Access 4 bit element 3", 3U, testVector[3]);
00184     check(m_failures, ++m_testNum, "Access 4 bit element 4", 4U, testVector[4]);
00185     check(m_failures, ++m_testNum, "Access 4 bit element 5", 5U, testVector[5]);
00186     check(m_failures, ++m_testNum, "Access 4 bit element 6", 6U, testVector[6]);
00187     check(m_failures, ++m_testNum, "Access 4 bit element 7", 7U, testVector[7]);
00188     check(m_failures, ++m_testNum, "Access 4 bit element 8", 8U, testVector[8]);
00189     check(m_failures, ++m_testNum, "Access 4 bit element 9", 9U, testVector[9]);
00190     check(m_failures, ++m_testNum, "Access 4 bit element 10", 10U, testVector[10]);
00191 
00192     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00193     check(m_failures, ++m_testNum, "Re-open vector file", false, testVector.open(TEST_FILE_NAME));
00194     check(m_failures, ++m_testNum, "Access 4 bit element 0", 0U, testVector[0]);
00195     check(m_failures, ++m_testNum, "Access 4 bit element 1", 1U, testVector[1]);
00196     check(m_failures, ++m_testNum, "Access 4 bit element 2", 2U, testVector[2]);
00197     check(m_failures, ++m_testNum, "Access 4 bit element 3", 3U, testVector[3]);
00198     check(m_failures, ++m_testNum, "Access 4 bit element 4", 4U, testVector[4]);
00199     check(m_failures, ++m_testNum, "Access 4 bit element 5", 5U, testVector[5]);
00200     check(m_failures, ++m_testNum, "Access 4 bit element 6", 6U, testVector[6]);
00201     check(m_failures, ++m_testNum, "Access 4 bit element 7", 7U, testVector[7]);
00202     check(m_failures, ++m_testNum, "Access 4 bit element 8", 8U, testVector[8]);
00203     check(m_failures, ++m_testNum, "Access 4 bit element 9", 9U, testVector[9]);
00204     check(m_failures, ++m_testNum, "Access 4 bit element 10", 10U, testVector[10]);
00205 
00206     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00207     check(m_failures, ++m_testNum, "Unlink vector file", 0, unlink(TEST_FILE_NAME));
00208 }
00209 
00210 void MemoryMapArrayTest::test32Bit(void)
00211 {
00212 
00213     mmapArrayUint32_t   testVector;
00214 
00215     // ignore return code here
00216     if(unlink(TEST_FILE_NAME) == 0)
00217     {
00218         // Nothing to do, just deleting previous test file
00219     }
00220 
00221     check(m_failures, ++m_testNum, "Create 32 bit vector file", 0,
00222             testVector.create(TEST_FILE_NAME, 11));
00223 
00224     testVector.set(0,0);
00225     testVector.set(1,1);
00226     testVector.set(2,2);
00227     testVector.set(3,3);
00228     testVector.set(4,4);
00229     testVector.set(5,5);
00230     testVector.set(6,6);
00231     testVector.set(7,7);
00232     testVector.set(8,8);
00233     testVector.set(9,9);
00234     testVector.set(10,10);
00235     check(m_failures, ++m_testNum, "Access 32 bit element 0", 0U, testVector[0]);
00236     check(m_failures, ++m_testNum, "Access 32 bit element 1", 1U, testVector[1]);
00237     check(m_failures, ++m_testNum, "Access 32 bit element 2", 2U, testVector[2]);
00238     check(m_failures, ++m_testNum, "Access 32 bit element 3", 3U, testVector[3]);
00239     check(m_failures, ++m_testNum, "Access 32 bit element 4", 4U, testVector[4]);
00240     check(m_failures, ++m_testNum, "Access 32 bit element 5", 5U, testVector[5]);
00241     check(m_failures, ++m_testNum, "Access 32 bit element 6", 6U, testVector[6]);
00242     check(m_failures, ++m_testNum, "Access 32 bit element 7", 7U, testVector[7]);
00243     check(m_failures, ++m_testNum, "Access 32 bit element 8", 8U, testVector[8]);
00244     check(m_failures, ++m_testNum, "Access 32 bit element 9", 9U, testVector[9]);
00245     check(m_failures, ++m_testNum, "Access 32 bit element 10", 10U, testVector[10]);
00246 
00247 
00248     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00249     check(m_failures, ++m_testNum, "Re-open vector file", false, testVector.open(TEST_FILE_NAME));
00250     check(m_failures, ++m_testNum, "Access 32 bit element 0", 0U, testVector[0]);
00251     check(m_failures, ++m_testNum, "Access 32 bit element 1", 1U, testVector[1]);
00252     check(m_failures, ++m_testNum, "Access 32 bit element 2", 2U, testVector[2]);
00253     check(m_failures, ++m_testNum, "Access 32 bit element 3", 3U, testVector[3]);
00254     check(m_failures, ++m_testNum, "Access 32 bit element 4", 4U, testVector[4]);
00255     check(m_failures, ++m_testNum, "Access 32 bit element 5", 5U, testVector[5]);
00256     check(m_failures, ++m_testNum, "Access 32 bit element 6", 6U, testVector[6]);
00257     check(m_failures, ++m_testNum, "Access 32 bit element 7", 7U, testVector[7]);
00258     check(m_failures, ++m_testNum, "Access 32 bit element 8", 8U, testVector[8]);
00259     check(m_failures, ++m_testNum, "Access 32 bit element 9", 9U, testVector[9]);
00260     check(m_failures, ++m_testNum, "Access 32 bit element 10", 10U, testVector[10]);
00261 
00262     check(m_failures, ++m_testNum, "Close vector file", false, testVector.close());
00263     check(m_failures, ++m_testNum, "Unlink vector file", 0, unlink(TEST_FILE_NAME));
00264 }
00265 
00266 int main(int argc, char **argv)
00267 {
00268     MemoryMapArrayTest test("MemoryMapArrayTest");
00269 #if 0
00270     bool showAllCasesFlag = false;
00271     int opt;
00272 
00273     while(( opt = getopt(argc, (char **) argv, "v")) != -1) {
00274         switch(opt) {
00275             case 'v':
00276                 showAllCasesFlag = true;
00277                 break;
00278             default:
00279                 std::cerr << "usage: testSW [-v]" << std::endl;
00280                 exit(1);
00281         }
00282     }
00283 
00284 #endif
00285 
00286     test.test();
00287 
00288     std::cout << test;
00289 
00290     exit(test.getFailureCount());
00291 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends