libStatGen Software
1
|
00001 /* 00002 * Copyright (C) 2010 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 "PackedVector.h" 00022 #include "UnitTest.h" 00023 00024 #include <assert.h> 00025 #include <stdlib.h> 00026 00027 class PackedArrayTest : public UnitTest 00028 { 00029 public: 00030 PackedArrayTest(const char *title) : UnitTest(title) {;} 00031 void testBool(); 00032 void test2Bit(); 00033 void test4Bit(); 00034 void testResize(); 00035 00036 void test() { 00037 testBool(); 00038 test2Bit(); 00039 test4Bit(); 00040 testResize(); 00041 } 00042 }; 00043 00044 void PackedArrayTest::testBool(void) 00045 { 00046 PackedVectorBool_t testVector; 00047 00048 testVector.resize(11); 00049 testVector.set(0,0); 00050 testVector.set(1,1); 00051 testVector.set(2,0); 00052 testVector.set(3,1); 00053 testVector.set(4,1); 00054 testVector.set(5,0); 00055 testVector.set(6,1); 00056 testVector.set(7,0); 00057 testVector.set(8,0); 00058 testVector.set(9,0); 00059 testVector.set(10,1); 00060 check(m_failures, ++m_testNum, "Access 1 bit element 0", 0U, testVector[0]); 00061 check(m_failures, ++m_testNum, "Access 1 bit element 1", 1U, testVector[1]); 00062 check(m_failures, ++m_testNum, "Access 1 bit element 2", 0U, testVector[2]); 00063 check(m_failures, ++m_testNum, "Access 1 bit element 3", 1U, testVector[3]); 00064 check(m_failures, ++m_testNum, "Access 1 bit element 4", 1U, testVector[4]); 00065 check(m_failures, ++m_testNum, "Access 1 bit element 5", 0U, testVector[5]); 00066 check(m_failures, ++m_testNum, "Access 1 bit element 6", 1U, testVector[6]); 00067 check(m_failures, ++m_testNum, "Access 1 bit element 7", 0U, testVector[7]); 00068 check(m_failures, ++m_testNum, "Access 1 bit element 8", 0U, testVector[8]); 00069 check(m_failures, ++m_testNum, "Access 1 bit element 9", 0U, testVector[9]); 00070 check(m_failures, ++m_testNum, "Access 1 bit element 10", 1U, testVector[10]); 00071 } 00072 00073 void PackedArrayTest::test2Bit(void) 00074 { 00075 PackedVector2Bit_t testVector; 00076 00077 testVector.resize(11); 00078 testVector.set(0,0); 00079 testVector.set(1,1); 00080 testVector.set(2,2); 00081 testVector.set(3,3); 00082 testVector.set(4,3); 00083 testVector.set(5,2); 00084 testVector.set(6,1); 00085 testVector.set(7,0); 00086 testVector.set(8,2); 00087 testVector.set(9,1); 00088 testVector.set(10,3); 00089 check(m_failures, ++m_testNum, "Access 2 bit element 0", 0U, testVector[0]); 00090 check(m_failures, ++m_testNum, "Access 2 bit element 1", 1U, testVector[1]); 00091 check(m_failures, ++m_testNum, "Access 2 bit element 2", 2U, testVector[2]); 00092 check(m_failures, ++m_testNum, "Access 2 bit element 3", 3U, testVector[3]); 00093 check(m_failures, ++m_testNum, "Access 2 bit element 4", 3U, testVector[4]); 00094 check(m_failures, ++m_testNum, "Access 2 bit element 5", 2U, testVector[5]); 00095 check(m_failures, ++m_testNum, "Access 2 bit element 6", 1U, testVector[6]); 00096 check(m_failures, ++m_testNum, "Access 2 bit element 7", 0U, testVector[7]); 00097 check(m_failures, ++m_testNum, "Access 2 bit element 8", 2U, testVector[8]); 00098 check(m_failures, ++m_testNum, "Access 2 bit element 9", 1U, testVector[9]); 00099 check(m_failures, ++m_testNum, "Access 2 bit element 10", 3U, testVector[10]); 00100 } 00101 00102 void PackedArrayTest::test4Bit(void) 00103 { 00104 PackedVector4Bit_t testVector; 00105 00106 testVector.resize(11); 00107 testVector.set(0,0); 00108 testVector.set(1,1); 00109 testVector.set(2,2); 00110 testVector.set(3,3); 00111 testVector.set(4,4); 00112 testVector.set(5,5); 00113 testVector.set(6,6); 00114 testVector.set(7,7); 00115 testVector.set(8,8); 00116 testVector.set(9,9); 00117 testVector.set(10,10); 00118 00119 check(m_failures, ++m_testNum, "Access 4 bit element 0", 0U, testVector[0]); 00120 check(m_failures, ++m_testNum, "Access 4 bit element 1", 1U, testVector[1]); 00121 check(m_failures, ++m_testNum, "Access 4 bit element 2", 2U, testVector[2]); 00122 check(m_failures, ++m_testNum, "Access 4 bit element 3", 3U, testVector[3]); 00123 check(m_failures, ++m_testNum, "Access 4 bit element 4", 4U, testVector[4]); 00124 check(m_failures, ++m_testNum, "Access 4 bit element 5", 5U, testVector[5]); 00125 check(m_failures, ++m_testNum, "Access 4 bit element 6", 6U, testVector[6]); 00126 check(m_failures, ++m_testNum, "Access 4 bit element 7", 7U, testVector[7]); 00127 check(m_failures, ++m_testNum, "Access 4 bit element 8", 8U, testVector[8]); 00128 check(m_failures, ++m_testNum, "Access 4 bit element 9", 9U, testVector[9]); 00129 check(m_failures, ++m_testNum, "Access 4 bit element 10", 10U, testVector[10]); 00130 } 00131 00132 void PackedArrayTest::testResize(void) 00133 { 00134 PackedVector4Bit_t testVector; 00135 00136 testVector.resize(0); 00137 check(m_failures, ++m_testNum, "New size is 0", 0U, testVector.size()); 00138 00139 testVector.push_back(0); 00140 testVector.push_back(1); 00141 testVector.push_back(2); 00142 testVector.push_back(3); 00143 testVector.push_back(4); 00144 testVector.push_back(5); 00145 testVector.push_back(6); 00146 testVector.push_back(7); 00147 testVector.push_back(8); 00148 testVector.push_back(9); 00149 testVector.push_back(10); 00150 00151 check(m_failures, ++m_testNum, "New size is 11", 11U, testVector.size()); 00152 00153 check(m_failures, ++m_testNum, "Access 4 bit element 0", 0U, testVector[0]); 00154 check(m_failures, ++m_testNum, "Access 4 bit element 1", 1U, testVector[1]); 00155 check(m_failures, ++m_testNum, "Access 4 bit element 2", 2U, testVector[2]); 00156 check(m_failures, ++m_testNum, "Access 4 bit element 3", 3U, testVector[3]); 00157 check(m_failures, ++m_testNum, "Access 4 bit element 4", 4U, testVector[4]); 00158 check(m_failures, ++m_testNum, "Access 4 bit element 5", 5U, testVector[5]); 00159 check(m_failures, ++m_testNum, "Access 4 bit element 6", 6U, testVector[6]); 00160 check(m_failures, ++m_testNum, "Access 4 bit element 7", 7U, testVector[7]); 00161 check(m_failures, ++m_testNum, "Access 4 bit element 8", 8U, testVector[8]); 00162 check(m_failures, ++m_testNum, "Access 4 bit element 9", 9U, testVector[9]); 00163 check(m_failures, ++m_testNum, "Access 4 bit element 10", 10U, testVector[10]); 00164 } 00165 00166 int main(int argc, char **argv) 00167 { 00168 PackedArrayTest test("PackedArrayTest"); 00169 #if 0 00170 bool showAllCasesFlag = false; 00171 int opt; 00172 00173 while(( opt = getopt(argc, (char **) argv, "v")) != -1) { 00174 switch(opt) { 00175 case 'v': 00176 showAllCasesFlag = true; 00177 break; 00178 default: 00179 std::cerr << "usage: testSW [-v]" << std::endl; 00180 exit(1); 00181 } 00182 } 00183 00184 #endif 00185 00186 test.test(); 00187 00188 std::cout << test; 00189 00190 exit(test.getFailureCount()); 00191 }