utils/hashtable/rehashing.c test updated to use new API.

This commit is contained in:
antirez 2015-02-25 13:02:04 +01:00
parent 126462ee36
commit cc0d339bd1

View File

@ -68,26 +68,30 @@ int sortPointers(const void *a, const void *b) {
return la-lb; return la-lb;
} }
void stressGetKeys(dict *d, int times) { void stressGetKeys(dict *d, int times, int *perfect_run, int *approx_run) {
int j; int j;
dictEntry **des = zmalloc(sizeof(dictEntry*)*dictSize(d)); dictEntry **des = zmalloc(sizeof(dictEntry*)*dictSize(d));
for (j = 0; j < times; j++) { for (j = 0; j < times; j++) {
int requested = rand() % (dictSize(d)+1); int requested = rand() % (dictSize(d)+1);
int returned = dictGetSomeKeys(d, des, requested); int returned = dictGetSomeKeys(d, des, requested);
if (requested != returned) { int dup = 0;
printf("*** ERROR! Req: %d, Ret: %d\n", requested, returned);
exit(1);
}
qsort(des,returned,sizeof(dictEntry*),sortPointers); qsort(des,returned,sizeof(dictEntry*),sortPointers);
if (returned > 1) { if (returned > 1) {
int i; int i;
for (i = 0; i < returned-1; i++) { for (i = 0; i < returned-1; i++) {
if (des[i] == des[i+1]) { if (des[i] == des[i+1]) dup++;
printf("*** ERROR! Duplicated element detected\n");
exit(1);
}
} }
} }
if (requested == returned && dup == 0) {
(*perfect_run)++;
} else {
(*approx_run)++;
printf("Requested, returned, duplicated: %d %d %d\n",
requested, returned, dup);
}
} }
zfree(des); zfree(des);
} }
@ -113,18 +117,24 @@ int main(void) {
dictRelease(d); dictRelease(d);
d = dictCreate(&dictTypeTest,NULL); d = dictCreate(&dictTypeTest,NULL);
printf("Getkeys stress test\n");
printf("Stress testing dictGetSomeKeys\n");
int perfect_run = 0, approx_run = 0;
for (i = 0; i < MAX2; i++) { for (i = 0; i < MAX2; i++) {
dictAdd(d,(void*)i,NULL); dictAdd(d,(void*)i,NULL);
stressGetKeys(d,100); stressGetKeys(d,100,&perfect_run,&approx_run);
} }
for (i = 0; i < MAX2; i++) { for (i = 0; i < MAX2; i++) {
dictDelete(d,(void*)i); dictDelete(d,(void*)i);
dictResize(d); dictResize(d);
stressGetKeys(d,100); stressGetKeys(d,100,&perfect_run,&approx_run);
} }
printf("dictGetSomeKey, %d perfect runs, %d approximated runs\n",
perfect_run, approx_run);
dictRelease(d); dictRelease(d);
printf("TEST PASSED!\n"); printf("TEST PASSED!\n");