1 #include "nrange.h" 2 3 #include <cppunit/extensions/HelperMacros.h> 4 5 class nrangeTest : public CppUnit::TestFixture { 6 CPPUNIT_TEST_SUITE(nrangeTest); 7 CPPUNIT_TEST(testCreate); 8 CPPUNIT_TEST(testInsert); 9 CPPUNIT_TEST(testInsertMiddle); 10 CPPUNIT_TEST(testInsertNothing); 11 CPPUNIT_TEST(testInsertMulti); 12 CPPUNIT_TEST(testInsertMulti2); 13 CPPUNIT_TEST(testInsertMulti3); 14 CPPUNIT_TEST(testInsertMulti4); 15 CPPUNIT_TEST(testRemove); 16 CPPUNIT_TEST(testRemoveBeg); 17 CPPUNIT_TEST(testRemoveEnd); 18 CPPUNIT_TEST(testRemoveNothingBeg); 19 CPPUNIT_TEST(testRemoveNothingEnd); 20 CPPUNIT_TEST(testInvertEmpty); 21 CPPUNIT_TEST(testInvertEnds); 22 CPPUNIT_TEST(testInvertNoEnds); 23 CPPUNIT_TEST_SUITE_END(); 24 protected: 25 c_nrange *range; 26 public: setUp(void)27 void setUp(void) { 28 range = new c_nrange(); 29 } tearDown(void)30 void tearDown(void) { 31 delete range; 32 } testCreate(void)33 void testCreate(void) { 34 CPPUNIT_ASSERT(range->empty()); 35 CPPUNIT_ASSERT(range->get_total() == 0); 36 CPPUNIT_ASSERT(range->check(0) == 0); 37 CPPUNIT_ASSERT(range->check(1) == 0); 38 CPPUNIT_ASSERT(range->check(ULONG_MAX) == 0); 39 } testInsert(void)40 void testInsert(void) { 41 range->insert(1); 42 CPPUNIT_ASSERT(!range->empty()); 43 CPPUNIT_ASSERT(range->get_total() == 1); 44 CPPUNIT_ASSERT(range->low() == range->high() == 1); 45 range->insert(2); 46 CPPUNIT_ASSERT(!range->empty()); 47 CPPUNIT_ASSERT(range->num_ranges() == 1); 48 CPPUNIT_ASSERT(range->get_total() == 2); 49 CPPUNIT_ASSERT(range->low() == 1); 50 CPPUNIT_ASSERT(range->high() == 2); 51 CPPUNIT_ASSERT(!range->check(0)); 52 CPPUNIT_ASSERT(range->check(1)); 53 CPPUNIT_ASSERT(range->check(2)); 54 CPPUNIT_ASSERT(!range->check(3)); 55 } testInsertNothing(void)56 void testInsertNothing(void) { 57 range->insert(1); 58 range->insert(1); 59 CPPUNIT_ASSERT(!range->empty()); 60 CPPUNIT_ASSERT(range->num_ranges() == 1); 61 CPPUNIT_ASSERT(range->get_total() == 1); 62 CPPUNIT_ASSERT(range->low() == range->high() == 1); 63 CPPUNIT_ASSERT(!range->check(0)); 64 CPPUNIT_ASSERT(range->check(1)); 65 CPPUNIT_ASSERT(!range->check(2)); 66 } testInsertMiddle(void)67 void testInsertMiddle(void) { 68 range->insert(1); 69 range->insert(3); 70 CPPUNIT_ASSERT(range->get_total() == 2); 71 CPPUNIT_ASSERT(range->low() == 1); 72 CPPUNIT_ASSERT(range->high() == 3); 73 range->insert(2); 74 CPPUNIT_ASSERT(range->get_total() == 3); 75 CPPUNIT_ASSERT(range->num_ranges() == 1); 76 CPPUNIT_ASSERT(range->low() == 1); 77 CPPUNIT_ASSERT(range->high() == 3); 78 CPPUNIT_ASSERT(!range->check(0)); 79 CPPUNIT_ASSERT(range->check(1)); 80 CPPUNIT_ASSERT(range->check(2)); 81 CPPUNIT_ASSERT(range->check(3)); 82 CPPUNIT_ASSERT(!range->check(4)); 83 } testInsertMulti(void)84 void testInsertMulti(void) { 85 range->insert(1,2); 86 CPPUNIT_ASSERT(!range->empty()); 87 CPPUNIT_ASSERT(range->get_total() == 2); 88 CPPUNIT_ASSERT(range->low() == 1); 89 CPPUNIT_ASSERT(range->high() == 2); 90 range->insert(3,4); 91 CPPUNIT_ASSERT(!range->empty()); 92 CPPUNIT_ASSERT(range->num_ranges() == 1); 93 CPPUNIT_ASSERT(range->get_total() == 4); 94 CPPUNIT_ASSERT(range->low() == 1); 95 CPPUNIT_ASSERT(range->high() == 4); 96 CPPUNIT_ASSERT(!range->check(0)); 97 CPPUNIT_ASSERT(range->check(1)); 98 CPPUNIT_ASSERT(range->check(2)); 99 CPPUNIT_ASSERT(range->check(3)); 100 CPPUNIT_ASSERT(range->check(4)); 101 CPPUNIT_ASSERT(!range->check(5)); 102 } testInsertMulti2(void)103 void testInsertMulti2(void) { 104 range->insert(10,15); 105 CPPUNIT_ASSERT(!range->empty()); 106 CPPUNIT_ASSERT(range->num_ranges() == 1); 107 CPPUNIT_ASSERT(range->get_total() == 6); 108 CPPUNIT_ASSERT(range->low() == 10); 109 CPPUNIT_ASSERT(range->high() == 15); 110 range->insert(3,7); 111 CPPUNIT_ASSERT(!range->empty()); 112 CPPUNIT_ASSERT(range->num_ranges() == 2); 113 CPPUNIT_ASSERT(range->get_total() == 11); 114 CPPUNIT_ASSERT(range->low() == 3); 115 CPPUNIT_ASSERT(range->high() == 15); 116 for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); 117 for (int i=8;i<10;i++) CPPUNIT_ASSERT(!range->check(i)); 118 for (int i=16;i<18;i++) CPPUNIT_ASSERT(!range->check(i)); 119 for (int i=3;i<=7;i++) CPPUNIT_ASSERT(range->check(i)); 120 for (int i=10;i<=15;i++) CPPUNIT_ASSERT(range->check(i)); 121 } testInsertMulti3(void)122 void testInsertMulti3(void) { 123 range->insert(10,15); 124 CPPUNIT_ASSERT(!range->empty()); 125 CPPUNIT_ASSERT(range->num_ranges() == 1); 126 CPPUNIT_ASSERT(range->get_total() == 6); 127 CPPUNIT_ASSERT(range->low() == 10); 128 CPPUNIT_ASSERT(range->high() == 15); 129 range->insert(3,12); 130 CPPUNIT_ASSERT(!range->empty()); 131 CPPUNIT_ASSERT(range->num_ranges() == 1); 132 CPPUNIT_ASSERT(range->get_total() == 13); 133 CPPUNIT_ASSERT(range->low() == 3); 134 CPPUNIT_ASSERT(range->high() == 15); 135 for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); 136 for (int i=16;i<18;i++) CPPUNIT_ASSERT(!range->check(i)); 137 for (int i=3;i<=15;i++) CPPUNIT_ASSERT(range->check(i)); 138 } testInsertMulti4(void)139 void testInsertMulti4(void) { 140 range->insert(11,16); 141 range->insert(8); 142 range->insert(3); 143 CPPUNIT_ASSERT(!range->empty()); 144 CPPUNIT_ASSERT(range->num_ranges() == 3); 145 CPPUNIT_ASSERT(range->get_total() == 8); 146 CPPUNIT_ASSERT(range->low() == 3); 147 CPPUNIT_ASSERT(range->high() == 16); 148 range->insert(4,12); 149 CPPUNIT_ASSERT(!range->empty()); 150 CPPUNIT_ASSERT(range->num_ranges() == 1); 151 CPPUNIT_ASSERT(range->get_total() == 14); 152 CPPUNIT_ASSERT(range->low() == 3); 153 CPPUNIT_ASSERT(range->high() == 16); 154 for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); 155 for (int i=17;i<19;i++) CPPUNIT_ASSERT(!range->check(i)); 156 for (int i=3;i<=16;i++) CPPUNIT_ASSERT(range->check(i)); 157 } testRemove(void)158 void testRemove(void) { 159 range->insert(1,3); 160 range->remove(2); 161 CPPUNIT_ASSERT(range->num_ranges() == 2); 162 CPPUNIT_ASSERT(range->get_total() == 2); 163 CPPUNIT_ASSERT(range->low() == 1); 164 CPPUNIT_ASSERT(range->high() == 3); 165 CPPUNIT_ASSERT(!range->check(0)); 166 CPPUNIT_ASSERT(range->check(1)); 167 CPPUNIT_ASSERT(!range->check(2)); 168 CPPUNIT_ASSERT(range->check(3)); 169 CPPUNIT_ASSERT(!range->check(4)); 170 } testRemoveBeg(void)171 void testRemoveBeg(void) { 172 range->insert(1,3); 173 range->remove(1); 174 CPPUNIT_ASSERT(range->num_ranges() == 1); 175 CPPUNIT_ASSERT(range->get_total() == 2); 176 CPPUNIT_ASSERT(range->low() == 2); 177 CPPUNIT_ASSERT(range->high() == 3); 178 CPPUNIT_ASSERT(!range->check(0)); 179 CPPUNIT_ASSERT(!range->check(1)); 180 CPPUNIT_ASSERT(range->check(2)); 181 CPPUNIT_ASSERT(range->check(3)); 182 CPPUNIT_ASSERT(!range->check(4)); 183 } testRemoveEnd(void)184 void testRemoveEnd(void) { 185 range->insert(1,3); 186 range->remove(3); 187 CPPUNIT_ASSERT(range->num_ranges() == 1); 188 CPPUNIT_ASSERT(range->get_total() == 2); 189 CPPUNIT_ASSERT(range->low() == 1); 190 CPPUNIT_ASSERT(range->high() == 2); 191 CPPUNIT_ASSERT(!range->check(0)); 192 CPPUNIT_ASSERT(range->check(1)); 193 CPPUNIT_ASSERT(range->check(2)); 194 CPPUNIT_ASSERT(!range->check(3)); 195 CPPUNIT_ASSERT(!range->check(4)); 196 } testRemoveNothingBeg(void)197 void testRemoveNothingBeg(void) { 198 range->insert(1,2); 199 range->remove(0); 200 CPPUNIT_ASSERT(range->num_ranges() == 1); 201 CPPUNIT_ASSERT(range->get_total() == 2); 202 CPPUNIT_ASSERT(range->low() == 1); 203 CPPUNIT_ASSERT(range->high() == 2); 204 CPPUNIT_ASSERT(!range->check(0)); 205 CPPUNIT_ASSERT(range->check(1)); 206 CPPUNIT_ASSERT(range->check(2)); 207 CPPUNIT_ASSERT(!range->check(3)); 208 } testRemoveNothingEnd(void)209 void testRemoveNothingEnd(void) { 210 range->insert(1,2); 211 range->remove(3); 212 CPPUNIT_ASSERT(range->num_ranges() == 1); 213 CPPUNIT_ASSERT(range->get_total() == 2); 214 CPPUNIT_ASSERT(range->low() == 1); 215 CPPUNIT_ASSERT(range->high() == 2); 216 CPPUNIT_ASSERT(!range->check(0)); 217 CPPUNIT_ASSERT(range->check(1)); 218 CPPUNIT_ASSERT(range->check(2)); 219 CPPUNIT_ASSERT(!range->check(3)); 220 } testInvertEmpty(void)221 void testInvertEmpty(void) { 222 c_nrange i; 223 i.invert(*range); 224 CPPUNIT_ASSERT(i.num_ranges() == 1); 225 CPPUNIT_ASSERT(i.get_total() == ULONG_MAX+1); 226 CPPUNIT_ASSERT(i.low() == 0); 227 CPPUNIT_ASSERT(i.high() == ULONG_MAX); 228 CPPUNIT_ASSERT(i.check(0)); 229 CPPUNIT_ASSERT(i.check(5)); 230 CPPUNIT_ASSERT(i.check(ULONG_MAX)); 231 } testInvertEnds(void)232 void testInvertEnds(void) { 233 range->insert(0); 234 range->insert(5); 235 range->insert(ULONG_MAX); 236 c_nrange i; 237 i.invert(*range); 238 CPPUNIT_ASSERT(i.num_ranges() == 2); 239 CPPUNIT_ASSERT(i.get_total() == ULONG_MAX-2); 240 CPPUNIT_ASSERT(i.low() == 1); 241 CPPUNIT_ASSERT(i.high() == ULONG_MAX-1); 242 CPPUNIT_ASSERT(!i.check(0)); 243 CPPUNIT_ASSERT(i.check(1)); 244 CPPUNIT_ASSERT(i.check(4)); 245 CPPUNIT_ASSERT(!i.check(5)); 246 CPPUNIT_ASSERT(i.check(6)); 247 CPPUNIT_ASSERT(i.check(ULONG_MAX)-1); 248 CPPUNIT_ASSERT(!i.check(ULONG_MAX)); 249 } testInvertNoEnds(void)250 void testInvertNoEnds(void) { 251 range->insert(1); 252 range->insert(5); 253 range->insert(9); 254 c_nrange i; 255 i.invert(*range); 256 CPPUNIT_ASSERT(i.num_ranges() == 4); 257 CPPUNIT_ASSERT(i.get_total() == ULONG_MAX-2); 258 CPPUNIT_ASSERT(i.low() == 0); 259 CPPUNIT_ASSERT(i.high() == ULONG_MAX); 260 for (int j=0; j<15; ++j) 261 CPPUNIT_ASSERT(i.check(j)!=range->check(j)); 262 CPPUNIT_ASSERT(i.check(ULONG_MAX)); 263 } 264 }; 265 266 class nrangeEqTest : public CppUnit::TestFixture { 267 CPPUNIT_TEST_SUITE(nrangeEqTest); 268 CPPUNIT_TEST(testEmpty); 269 CPPUNIT_TEST(testOneEmpty); 270 CPPUNIT_TEST(testUnEqual); 271 CPPUNIT_TEST(testEqual); 272 CPPUNIT_TEST_SUITE_END(); 273 protected: 274 c_nrange *range; 275 c_nrange *rangeb; 276 public: setUp(void)277 void setUp(void) { 278 range = new c_nrange(); 279 rangeb = new c_nrange(); 280 } tearDown(void)281 void tearDown(void) { 282 delete range; 283 delete rangeb; 284 } testEmpty(void)285 void testEmpty(void) { 286 CPPUNIT_ASSERT(*range == *rangeb); 287 CPPUNIT_ASSERT(range != rangeb); 288 } testOneEmpty(void)289 void testOneEmpty(void) { 290 range->insert(1); 291 CPPUNIT_ASSERT(*range != *rangeb); 292 } testUnEqual(void)293 void testUnEqual(void) { 294 range->insert(1); 295 rangeb->insert(2); 296 CPPUNIT_ASSERT(*range != *rangeb); 297 } testEqual(void)298 void testEqual(void) { 299 range->insert(1); 300 range->insert(2); 301 rangeb->insert(1,2); 302 CPPUNIT_ASSERT(*range == *rangeb); 303 } 304 }; 305 306 CPPUNIT_TEST_SUITE_REGISTRATION( nrangeTest ); 307 CPPUNIT_TEST_SUITE_REGISTRATION( nrangeEqTest ); 308 309