1// Copyright (C) 2016 and later: Unicode, Inc. and others. 2// License & terms of use: http://www.unicode.org/copyright.html 3/******************************************************************** 4 * COPYRIGHT: 5 * Copyright (c) 2002-2007, International Business Machines Corporation and 6 * others. All Rights Reserved. 7 ********************************************************************/ 8 9// 10// regextst.cpp 11// 12// ICU Regular Expressions test, part of intltest. 13// 14 15#include "intltest.h" 16 17#include "v32test.h" 18#include "uvectr32.h" 19#include "uvector.h" 20#include "util.h" 21#include <stdlib.h> 22#include <stdio.h> 23 24 25//--------------------------------------------------------------------------- 26// 27// Test class boilerplate 28// 29//--------------------------------------------------------------------------- 30UVector32Test::UVector32Test() 31{ 32} 33 34 35UVector32Test::~UVector32Test() 36{ 37} 38 39 40 41void UVector32Test::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 42{ 43 if (exec) logln("TestSuite UVector32Test: "); 44 switch (index) { 45 46 case 0: name = "UVector32_API"; 47 if (exec) UVector32_API(); 48 break; 49 default: name = ""; 50 break; //needed to end loop 51 } 52} 53 54 55//--------------------------------------------------------------------------- 56// 57// Error Checking / Reporting macros used in all of the tests. 58// 59//--------------------------------------------------------------------------- 60#define TEST_CHECK_STATUS(status) \ 61 if (U_FAILURE(status)) {\ 62 errln("UVector32Test failure at line %d. status=%s\n", __LINE__, u_errorName(status));\ 63 return;\ 64 } 65 66#define TEST_ASSERT(expr) \ 67 if ((expr)==FALSE) {\ 68 errln("UVector32Test failure at line %d.\n", __LINE__);\ 69 } 70 71//--------------------------------------------------------------------------- 72// 73// UVector32_API Check for basic functionality of UVector32. 74// 75//--------------------------------------------------------------------------- 76void UVector32Test::UVector32_API() { 77 78 UErrorCode status = U_ZERO_ERROR; 79 UVector32 *a; 80 UVector32 *b; 81 82 a = new UVector32(status); 83 TEST_CHECK_STATUS(status); 84 delete a; 85 86 status = U_ZERO_ERROR; 87 a = new UVector32(2000, status); 88 TEST_CHECK_STATUS(status); 89 delete a; 90 91 // 92 // assign() 93 // 94 status = U_ZERO_ERROR; 95 a = new UVector32(status); 96 a->addElement(10, status); 97 a->addElement(20, status); 98 a->addElement(30, status); 99 b = new UVector32(status); 100 b->assign(*a, status); 101 TEST_ASSERT(b->size() == 3); 102 TEST_ASSERT(b->elementAti(1) == 20); 103 TEST_CHECK_STATUS(status); 104 delete a; 105 delete b; 106 107 // 108 // operator == and != and equals() 109 // 110 status = U_ZERO_ERROR; 111 a = new UVector32(status); 112 a->addElement(10, status); 113 a->addElement(20, status); 114 a->addElement(30, status); 115 b = new UVector32(status); 116 TEST_ASSERT(*b != *a); 117 TEST_ASSERT(!(*b == *a)); 118 TEST_ASSERT(!b->equals(*a)); 119 b->assign(*a, status); 120 TEST_ASSERT(*b == *a); 121 TEST_ASSERT(!(*b != *a)); 122 TEST_ASSERT(b->equals(*a)); 123 b->addElement(666, status); 124 TEST_ASSERT(*b != *a); 125 TEST_ASSERT(!(*b == *a)); 126 TEST_ASSERT(!b->equals(*a)); 127 TEST_CHECK_STATUS(status); 128 delete b; 129 delete a; 130 131 // 132 // addElement(). Covered by above tests. 133 // 134 135 // 136 // setElementAt() 137 // 138 status = U_ZERO_ERROR; 139 a = new UVector32(status); 140 a->addElement(10, status); 141 a->addElement(20, status); 142 a->addElement(30, status); 143 a->setElementAt(666, 1); 144 TEST_ASSERT(a->elementAti(0) == 10); 145 TEST_ASSERT(a->elementAti(1) == 666); 146 TEST_ASSERT(a->size() == 3); 147 TEST_CHECK_STATUS(status); 148 delete a; 149 150 // 151 // insertElementAt() 152 // 153 status = U_ZERO_ERROR; 154 a = new UVector32(status); 155 a->addElement(10, status); 156 a->addElement(20, status); 157 a->addElement(30, status); 158 a->insertElementAt(666, 1, status); 159 TEST_ASSERT(a->elementAti(0) == 10); 160 TEST_ASSERT(a->elementAti(1) == 666); 161 TEST_ASSERT(a->elementAti(2) == 20); 162 TEST_ASSERT(a->elementAti(3) == 30); 163 TEST_ASSERT(a->size() == 4); 164 TEST_CHECK_STATUS(status); 165 delete a; 166 167 // 168 // elementAti() covered by above tests 169 // 170 171 // 172 // lastElementi 173 // 174 status = U_ZERO_ERROR; 175 a = new UVector32(status); 176 a->addElement(10, status); 177 a->addElement(20, status); 178 a->addElement(30, status); 179 TEST_ASSERT(a->lastElementi() == 30); 180 TEST_CHECK_STATUS(status); 181 delete a; 182 183 184 // 185 // indexOf 186 // 187 status = U_ZERO_ERROR; 188 a = new UVector32(status); 189 a->addElement(10, status); 190 a->addElement(20, status); 191 a->addElement(30, status); 192 TEST_ASSERT(a->indexOf(30, 0) == 2); 193 TEST_ASSERT(a->indexOf(40, 0) == -1); 194 TEST_ASSERT(a->indexOf(10, 0) == 0); 195 TEST_ASSERT(a->indexOf(10, 1) == -1); 196 TEST_CHECK_STATUS(status); 197 delete a; 198 199 200 // 201 // contains 202 // 203 status = U_ZERO_ERROR; 204 a = new UVector32(status); 205 a->addElement(10, status); 206 a->addElement(20, status); 207 a->addElement(30, status); 208 TEST_ASSERT(a->contains(10) == TRUE); 209 TEST_ASSERT(a->contains(11) == FALSE); 210 TEST_ASSERT(a->contains(20) == TRUE); 211 TEST_ASSERT(a->contains(-10) == FALSE); 212 TEST_CHECK_STATUS(status); 213 delete a; 214 215 216 // 217 // containsAll 218 // 219 status = U_ZERO_ERROR; 220 a = new UVector32(status); 221 a->addElement(10, status); 222 a->addElement(20, status); 223 a->addElement(30, status); 224 b = new UVector32(status); 225 TEST_ASSERT(a->containsAll(*b) == TRUE); 226 b->addElement(2, status); 227 TEST_ASSERT(a->containsAll(*b) == FALSE); 228 b->setElementAt(10, 0); 229 TEST_ASSERT(a->containsAll(*b) == TRUE); 230 TEST_ASSERT(b->containsAll(*a) == FALSE); 231 b->addElement(30, status); 232 b->addElement(20, status); 233 TEST_ASSERT(a->containsAll(*b) == TRUE); 234 TEST_ASSERT(b->containsAll(*a) == TRUE); 235 b->addElement(2, status); 236 TEST_ASSERT(a->containsAll(*b) == FALSE); 237 TEST_ASSERT(b->containsAll(*a) == TRUE); 238 TEST_CHECK_STATUS(status); 239 delete a; 240 delete b; 241 242 // 243 // removeAll 244 // 245 status = U_ZERO_ERROR; 246 a = new UVector32(status); 247 a->addElement(10, status); 248 a->addElement(20, status); 249 a->addElement(30, status); 250 b = new UVector32(status); 251 a->removeAll(*b); 252 TEST_ASSERT(a->size() == 3); 253 b->addElement(20, status); 254 a->removeAll(*b); 255 TEST_ASSERT(a->size() == 2); 256 TEST_ASSERT(a->contains(10)==TRUE); 257 TEST_ASSERT(a->contains(30)==TRUE); 258 b->addElement(10, status); 259 a->removeAll(*b); 260 TEST_ASSERT(a->size() == 1); 261 TEST_ASSERT(a->contains(30) == TRUE); 262 TEST_CHECK_STATUS(status); 263 delete a; 264 delete b; 265 266 // 267 // retainAll 268 // 269 status = U_ZERO_ERROR; 270 a = new UVector32(status); 271 a->addElement(10, status); 272 a->addElement(20, status); 273 a->addElement(30, status); 274 b = new UVector32(status); 275 b->addElement(10, status); 276 b->addElement(20, status); 277 b->addElement(30, status); 278 b->addElement(15, status); 279 a->retainAll(*b); 280 TEST_ASSERT(a->size() == 3); 281 b->removeElementAt(1); 282 a->retainAll(*b); 283 TEST_ASSERT(a->contains(20) == FALSE); 284 TEST_ASSERT(a->size() == 2); 285 b->removeAllElements(); 286 TEST_ASSERT(b->size() == 0); 287 a->retainAll(*b); 288 TEST_ASSERT(a->size() == 0); 289 TEST_CHECK_STATUS(status); 290 delete a; 291 delete b; 292 293 // 294 // removeElementAt Tested above. 295 // 296 297 // 298 // removeAllElments Tested above 299 // 300 301 // 302 // size() tested above 303 // 304 305 // 306 // isEmpty 307 // 308 status = U_ZERO_ERROR; 309 a = new UVector32(status); 310 TEST_ASSERT(a->isEmpty() == TRUE); 311 a->addElement(10, status); 312 TEST_ASSERT(a->isEmpty() == FALSE); 313 a->addElement(20, status); 314 a->removeElementAt(0); 315 TEST_ASSERT(a->isEmpty() == FALSE); 316 a->removeElementAt(0); 317 TEST_ASSERT(a->isEmpty() == TRUE); 318 TEST_CHECK_STATUS(status); 319 delete a; 320 321 322 // 323 // ensureCapacity, expandCapacity 324 // 325 status = U_ZERO_ERROR; 326 a = new UVector32(status); 327 TEST_ASSERT(a->isEmpty() == TRUE); 328 a->addElement(10, status); 329 TEST_ASSERT(a->ensureCapacity(5000, status)== TRUE); 330 TEST_ASSERT(a->expandCapacity(20000, status) == TRUE); 331 TEST_CHECK_STATUS(status); 332 delete a; 333 334 // 335 // setSize 336 // 337 status = U_ZERO_ERROR; 338 a = new UVector32(status); 339 a->addElement(10, status); 340 a->addElement(20, status); 341 a->addElement(30, status); 342 a->setSize(100); 343 TEST_ASSERT(a->size() == 100); 344 TEST_ASSERT(a->elementAti(0) == 10); 345 TEST_ASSERT(a->elementAti(1) == 20); 346 TEST_ASSERT(a->elementAti(2) == 30); 347 TEST_ASSERT(a->elementAti(3) == 0); 348 a->setElementAt(666, 99); 349 a->setElementAt(777, 100); 350 TEST_ASSERT(a->elementAti(99) == 666); 351 TEST_ASSERT(a->elementAti(100) == 0); 352 a->setSize(2); 353 TEST_ASSERT(a->elementAti(1) == 20); 354 TEST_ASSERT(a->elementAti(2) == 0); 355 TEST_ASSERT(a->size() == 2); 356 a->setSize(0); 357 TEST_ASSERT(a->empty() == TRUE); 358 TEST_ASSERT(a->size() == 0); 359 360 TEST_CHECK_STATUS(status); 361 delete a; 362 363 // 364 // containsNone 365 // 366 status = U_ZERO_ERROR; 367 a = new UVector32(status); 368 a->addElement(10, status); 369 a->addElement(20, status); 370 a->addElement(30, status); 371 b = new UVector32(status); 372 TEST_ASSERT(a->containsNone(*b) == TRUE); 373 b->addElement(5, status); 374 TEST_ASSERT(a->containsNone(*b) == TRUE); 375 b->addElement(30, status); 376 TEST_ASSERT(a->containsNone(*b) == FALSE); 377 378 TEST_CHECK_STATUS(status); 379 delete a; 380 delete b; 381 382 // 383 // sortedInsert 384 // 385 status = U_ZERO_ERROR; 386 a = new UVector32(status); 387 a->sortedInsert(30, status); 388 a->sortedInsert(20, status); 389 a->sortedInsert(10, status); 390 TEST_ASSERT(a->elementAti(0) == 10); 391 TEST_ASSERT(a->elementAti(1) == 20); 392 TEST_ASSERT(a->elementAti(2) == 30); 393 394 TEST_CHECK_STATUS(status); 395 delete a; 396 397 // 398 // getBuffer 399 // 400 status = U_ZERO_ERROR; 401 a = new UVector32(status); 402 a->addElement(10, status); 403 a->addElement(20, status); 404 int32_t *buf = a->getBuffer(); 405 TEST_ASSERT(buf[0] == 10); 406 TEST_ASSERT(buf[1] == 20); 407 a->setSize(20000); 408 int32_t *resizedBuf; 409 resizedBuf = a->getBuffer(); 410 //TEST_ASSERT(buf != resizedBuf); // The buffer might have been realloc'd 411 TEST_ASSERT(resizedBuf[0] == 10); 412 TEST_ASSERT(resizedBuf[1] == 20); 413 414 TEST_CHECK_STATUS(status); 415 delete a; 416 417 418 // 419 // empty 420 // 421 status = U_ZERO_ERROR; 422 a = new UVector32(status); 423 TEST_ASSERT(a->empty() == TRUE); 424 a->addElement(10, status); 425 TEST_ASSERT(a->empty() == FALSE); 426 a->addElement(20, status); 427 a->removeElementAt(0); 428 TEST_ASSERT(a->empty() == FALSE); 429 a->removeElementAt(0); 430 TEST_ASSERT(a->empty() == TRUE); 431 TEST_CHECK_STATUS(status); 432 delete a; 433 434 435 // 436 // peeki 437 // 438 status = U_ZERO_ERROR; 439 a = new UVector32(status); 440 a->addElement(10, status); 441 TEST_ASSERT(a->peeki() == 10); 442 a->addElement(20, status); 443 TEST_ASSERT(a->peeki() == 20); 444 a->addElement(30, status); 445 TEST_ASSERT(a->peeki() == 30); 446 TEST_CHECK_STATUS(status); 447 delete a; 448 449 450 // 451 // popi 452 // 453 status = U_ZERO_ERROR; 454 a = new UVector32(status); 455 a->addElement(10, status); 456 a->addElement(20, status); 457 a->addElement(30, status); 458 TEST_ASSERT(a->popi() == 30); 459 TEST_ASSERT(a->popi() == 20); 460 TEST_ASSERT(a->popi() == 10); 461 TEST_ASSERT(a->popi() == 0); 462 TEST_ASSERT(a->isEmpty()); 463 TEST_CHECK_STATUS(status); 464 delete a; 465 466 // 467 // push 468 // 469 status = U_ZERO_ERROR; 470 a = new UVector32(status); 471 TEST_ASSERT(a->push(10, status) == 10); 472 TEST_ASSERT(a->push(20, status) == 20); 473 TEST_ASSERT(a->push(30, status) == 30); 474 TEST_ASSERT(a->size() == 3); 475 TEST_ASSERT(a->popi() == 30); 476 TEST_ASSERT(a->popi() == 20); 477 TEST_ASSERT(a->popi() == 10); 478 TEST_ASSERT(a->isEmpty()); 479 TEST_CHECK_STATUS(status); 480 delete a; 481 482 483 // 484 // reserveBlock 485 // 486 status = U_ZERO_ERROR; 487 a = new UVector32(status); 488 a->ensureCapacity(1000, status); 489 490 // TODO: 491 492 TEST_CHECK_STATUS(status); 493 delete a; 494 495} 496 497 498