/* ** Copyright (C) 2005-2006 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.225-7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract F19628-00-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ /* ** Test functions for skvector.c ** */ #include "silk.h" RCSIDENT("$SiLK: skvector-test.c 3409 2006-04-11 23:06:27Z mthomas $"); #include "skvector.h" #define TEST(s) fprintf(stderr, s "..."); #define RESULT(b) \ if ((b)) { \ fprintf(stderr, "ok\n"); \ } else { \ fprintf(stderr, "failed at %s:%d (rv=%d, i=%d, sz=%u)\n", \ __FILE__, __LINE__, rv, i, (unsigned int)sz); \ exit(EXIT_FAILURE); \ } int main() { #define ARRAY_SIZE 64 sk_vector_t *v; int i = 0xFFFF; int rv = 0xFFFF; size_t sz = 0xFFFF; int int_array[ARRAY_SIZE]; char char_array[ARRAY_SIZE]; char c; size_t len; for (i = 0; i < ARRAY_SIZE; ++i) { int_array[i] = 345; } TEST("skVectorNew"); v = skVectorNew(sizeof(int)); RESULT(v != NULL); TEST("skVectorGetElementSize"); sz = skVectorGetElementSize(v); RESULT(sz == sizeof(int)); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 0); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorAppendValue"); i = 100; rv = skVectorAppendValue(v, &i); RESULT(rv == 0); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 1); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 0); RESULT(rv == 0 && i == 100); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 1); RESULT(rv == -1 && i == 345); TEST("skVectorClear"); skVectorClear(v); RESULT(1); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 0); RESULT(rv == -1 && i == 345); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz != 0); TEST("skVectorSetCapacity"); rv = skVectorSetCapacity(v, 32); RESULT(rv == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 32); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorSetValue"); i = 231; rv = skVectorSetValue(v, 31, &i); RESULT(rv == 0); TEST("skVectorSetValue"); i = 232; rv = skVectorSetValue(v, 32, &i); RESULT(rv == -1); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 31); RESULT(rv == 0 && i == 231); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 32); RESULT(rv == -1 && i == 345); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 16); RESULT(rv == 0 && i == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 32); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 32); TEST("skVectorClear"); skVectorClear(v); RESULT(1); TEST("skVectorAppendValue"); for (sz = 0; sz < 37; ++sz) { i = 100 + sz; if (0 != skVectorAppendValue(v, &i)) { fprintf(stderr, "FAILED: skVectorAppendValue(v, %d)\n", i); RESULT(0); } } RESULT(1); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 37); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 37); RESULT(rv == -1 && i == 345); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 36); RESULT(rv == 0 && i == 136); TEST("skVectorGetValue"); for (sz = 0; sz < 37; ++sz) { i = 345; rv = skVectorGetValue(&i, v, sz); if (0 != rv || i != (int)(100+sz)) { fprintf(stderr, "FAILED: skVectorGetValue(&i, v, %d) rv = %d, i = %d\n", (int)sz, rv, i); RESULT(0); } } RESULT(1); TEST("skVectorToArray"); skVectorToArray(&int_array, v); for (i = 0; i < 37; ++i) { if (int_array[i] != 100+i) { fprintf(stderr, "FAILED: int_array[%d] != %d\n", i, i+100); RESULT(0); } } for (; i < ARRAY_SIZE; ++i) { if (int_array[i] != 345) { fprintf(stderr, "FAILED: int_array[%d] != %d\n", i, 345); RESULT(0); } } RESULT(1); TEST("skVectorClear"); skVectorClear(v); RESULT(1); TEST("skVectorGetValue"); i = 345; rv = skVectorGetValue(&i, v, 36); RESULT(rv == -1 && i == 345); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorDestroy"); skVectorDestroy(v); RESULT(1); v = NULL; TEST("skVectorClear"); skVectorClear(v); RESULT(1); TEST("skVectorDestroy"); skVectorDestroy(v); RESULT(1); TEST("skVectorNew"); v = skVectorNew(sizeof(int)); RESULT(v != NULL); TEST("skVectorSetCapacity"); rv = skVectorSetCapacity(v, 32); RESULT(rv == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 32); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorSetCapacity"); rv = skVectorSetCapacity(v, 0); RESULT(rv == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 0); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == 0); TEST("skVectorSetCapacity"); rv = skVectorSetCapacity(v, 16); RESULT(rv == 0); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == 16); TEST("skVectorDestroy"); skVectorDestroy(v); RESULT(1); v = NULL; strcpy(char_array, "text"); len = 1+strlen(char_array); TEST("skVectorNewFromArray"); v = skVectorNewFromArray(sizeof(char_array[0]), char_array, len); RESULT(v != NULL); memset(char_array, 0, ARRAY_SIZE); TEST("skVectorGetCount"); sz = skVectorGetCount(v); RESULT(sz == len); TEST("skVectorGetCapacity"); sz = skVectorGetCapacity(v); RESULT(sz == len); TEST("skVectorSetValue"); c = 'n'; rv = skVectorSetValue(v, 0, &c); RESULT(rv == 0); TEST("skVectorToArray"); skVectorToArray(char_array, v); RESULT(rv == 0 && (0 == strcmp("next", char_array))); TEST("skVectorDestroy"); skVectorDestroy(v); RESULT(1); v = NULL; return 0; }