📄 vltest.c
字号:
if(!(vbuf = vlget(villa, buf, len, &vsiz))){ pdperror(name); vlclose(villa); return 1; } free(vbuf); if(vsiz != 8){ fprintf(stderr, "%s: %s: invalid vsiz\n", progname, name); vlclose(villa); return 1; } if(vlvnum(villa, buf, len) != 1){ fprintf(stderr, "%s: %s: invalid vnum\n", progname, name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Deleting x6 - x0 records ... "); for(i = 1; i <= 100; i++){ if(i % 10 >= 1 && i % 10 <= 5) continue; len = sprintf(buf, "%08d", i); if(!vlout(villa, buf, len)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Scanning with the cursor in ascending order ... "); if(!vlcurfirst(villa)){ pdperror(name); vlclose(villa); return 1; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz))){ pdperror(name); free(kbuf); free(vbuf); vlclose(villa); return 1; } free(kbuf); free(vbuf); i++; } while(vlcurnext(villa)); if(i != 50){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); vlclose(villa); return 1; } if(dpecode != DP_ENOITEM){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Scanning with the cursor in decending order ... "); if(!vlcurlast(villa)){ pdperror(name); vlclose(villa); return 1; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz))){ pdperror(name); free(kbuf); free(vbuf); vlclose(villa); return 1; } free(kbuf); free(vbuf); i++; } while(vlcurprev(villa)); if(i != 50){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); vlclose(villa); return 1; } if(dpecode != DP_ENOITEM){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Adding 50 random records with VL_DDUP ... "); for(i = 0; i < 50; i++){ len = sprintf(buf, "%08d", myrand() % 100 + 1); if(!vlput(villa, buf, len, buf, len, VL_DDUP)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Deleting 80 random records ... "); i = 0; while(i < 80){ len = sprintf(buf, "%08d", myrand() % 100 + 1); if(!vlout(villa, buf, len)){ if(dpecode == DP_ENOITEM) continue; pdperror(name); vlclose(villa); return 1; } i++; } printfflush("ok\n"); alist = cblistopen(); dlist = cblistopen(); printfflush("Scanning with the cursor in ascending order ... "); if(!vlcurfirst(villa)){ pdperror(name); vlclose(villa); return 1; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz))){ pdperror(name); cblistclose(alist); cblistclose(dlist); free(kbuf); free(vbuf); vlclose(villa); return 1; } cblistpush(alist, kbuf, ksiz); free(kbuf); free(vbuf); i++; } while(vlcurnext(villa)); if(i != 20){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } if(dpecode != DP_ENOITEM){ pdperror(name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Scanning with the cursor in decending order ... "); if(!vlcurlast(villa)){ pdperror(name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz))){ pdperror(name); free(kbuf); free(vbuf); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } cblistunshift(dlist, kbuf, ksiz); free(kbuf); free(vbuf); i++; } while(vlcurprev(villa)); if(i != 20){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } if(dpecode != DP_ENOITEM){ pdperror(name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Matching result of ascending scan and desending scan ... "); for(i = 0; i < cblistnum(alist); i++){ ap = cblistval(alist, i, NULL); dp = cblistval(dlist, i, NULL); if(strcmp(ap, dp)){ fprintf(stderr, "%s: %s: not match\n", progname, name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } } cblistsort(alist); for(i = 0; i < cblistnum(alist); i++){ ap = cblistval(alist, i, NULL); dp = cblistval(dlist, i, NULL); if(strcmp(ap, dp)){ fprintf(stderr, "%s: %s: not match\n", progname, name); cblistclose(alist); cblistclose(dlist); vlclose(villa); return 1; } } printfflush("ok\n"); cblistclose(alist); cblistclose(dlist); printfflush("Resetting tuning parameters with 41, 80, 32, 32 ... "); vlsettuning(villa, 41, 80, 32, 32); printfflush("ok\n"); printfflush("Adding 1000 random records with VL_DDUP ... "); for(i = 0; i < 1000; i++){ len = sprintf(buf, "%08d", myrand() % 1000 + 1); if(!vlput(villa, buf, len, buf, len, VL_DDUP)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Resetting tuning parameters with 8, 5, 16, 16 ... "); vlsettuning(villa, 8, 5, 16, 16); printfflush("ok\n"); printfflush("Adding 1000 random records with VL_DDUP ... "); for(i = 0; i < 1000; i++){ len = sprintf(buf, "%08d", myrand() % 1000 + 1); if(!vlput(villa, buf, len, buf, len, VL_DDUP)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Beginning the transaction ... "); if(!vltranbegin(villa)){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Adding 100 random records with VL_DDUP ... "); for(i = 0; i < 100; i++){ len = sprintf(buf, "%08d", myrand() % 1000 + 1); if(!vlput(villa, buf, len, buf, len, VL_DDUP)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Scanning and checking ... "); i = 0; for(vlcurlast(villa); (kbuf = vlcurkey(villa, &ksiz)) != NULL; vlcurprev(villa)){ if(vlvnum(villa, kbuf, ksiz) < 1 || !(vbuf = vlcurval(villa, NULL))){ pdperror(name); free(kbuf); vlclose(villa); return 1; } free(vbuf); free(kbuf); i++; } if(i != vlrnum(villa)){ fprintf(stderr, "%s: %s: invalid\n", progname, name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Committing the transaction ... "); if(!vltrancommit(villa)){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Scanning and checking ... "); i = 0; for(vlcurlast(villa); (kbuf = vlcurkey(villa, &ksiz)) != NULL; vlcurprev(villa)){ if(vlvnum(villa, kbuf, ksiz) < 1 || !(vbuf = vlcurval(villa, NULL))){ pdperror(name); free(kbuf); vlclose(villa); return 1; } free(vbuf); free(kbuf); i++; } if(i != vlrnum(villa)){ fprintf(stderr, "%s: %s: invalid\n", progname, name); vlclose(villa); return 1; } printfflush("ok\n"); lnum = vllnum(villa); nnum = vlnnum(villa); rnum = vlrnum(villa); fsiz = vlfsiz(villa); printfflush("Beginning the transaction ... "); if(!vltranbegin(villa)){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Adding 100 random records with VL_DDUP ... "); for(i = 0; i < 100; i++){ len = sprintf(buf, "%08d", myrand() % 1000 + 1); if(!vlput(villa, buf, len, buf, len, VL_DDUP)){ pdperror(name); vlclose(villa); return 1; } } printfflush("ok\n"); printfflush("Aborting the transaction ... "); if(!vltranabort(villa)){ pdperror(name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Checking rollback ... "); if(vlfsiz(villa) != fsiz || vllnum(villa) != lnum || vlnnum(villa) != nnum || vlrnum(villa) != rnum){ fprintf(stderr, "%s: %s: invalid\n", progname, name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Scanning and checking ... "); i = 0; for(vlcurlast(villa); (kbuf = vlcurkey(villa, &ksiz)) != NULL; vlcurprev(villa)){ if(vlvnum(villa, kbuf, ksiz) < 1 || !(vbuf = vlcurval(villa, NULL))){ pdperror(name); free(kbuf); vlclose(villa); return 1; } free(vbuf); free(kbuf); i++; } if(i != vlrnum(villa)){ fprintf(stderr, "%s: %s: invalid\n", progname, name); vlclose(villa); return 1; } printfflush("ok\n"); printfflush("Closing the database ... "); if(!vlclose(villa)){ pdperror(name); return 1; } printfflush("ok\n"); printfflush("all ok\n\n"); return 0;}/* perform wicked command */int dowicked(const char *name, int rnum){ VILLA *villa; int i, j, len, err, ksiz, vsiz, tran; char buf[32], *kbuf, *vbuf; CBLIST *list; printfflush("<Wicked Writing Test>\n name=%s rnum=%d\n\n", name, rnum); if(!(villa = vlopen(name, VL_OWRITER | VL_OCREAT | VL_OTRUNC, VL_CMPLEX))){ pdperror(name); return 1; } err = FALSE; tran = FALSE; vlsettuning(villa, 5, 10, 64, 64); for(i = 1; i <= rnum; i++){ len = sprintf(buf, "%08d", myrand() % rnum + 1); switch(myrand() % 16){ case 0: putchar('O'); if(!vlput(villa, buf, len, buf, len, VL_DOVER)) err = TRUE; break; case 1: putchar('K'); if(!vlput(villa, buf, len, buf, len, VL_DKEEP) && dpecode != DP_EKEEP) err = TRUE; break; case 2: putchar('D'); if(!vlout(villa, buf, len) && dpecode != DP_ENOITEM) err = TRUE; break; case 3: putchar('G'); if((vbuf = vlget(villa, buf, len, NULL)) != NULL){ free(vbuf); } else if(dpecode != DP_ENOITEM){ err = TRUE; } break; case 4: putchar('V'); if(!vlvnum(villa, buf, len) && dpecode != DP_ENOITEM) err = TRUE; break; case 5: putchar('X'); list = cblistopen(); cblistpush(list, buf, len); cblistpush(list, buf, len); if(!vlputlist(villa, buf, len, list)) err = TRUE; cblistclose(list); break; case 6: putchar('Y'); if(!vloutlist(villa, buf, len) && dpecode != DP_ENOITEM) err = TRUE; break; case 7: putchar('Z'); if((list = vlgetlist(villa, buf, len)) != NULL){ cblistclose(list); } else if(dpecode != DP_ENOITEM){ err = TRUE; } break; case 8: putchar('Q'); if(vlcurjump(villa, buf, len, VL_JFORWARD)){ for(j = 0; j < 3 && (kbuf = vlcurkey(villa, &ksiz)); j++){ if(VL_CMPLEX(buf, len, kbuf, ksiz) > 0) err = TRUE; free(kbuf); if(!vlcurnext(villa) && dpecode != DP_ENOITEM) err = TRUE; } } else { if(dpecode != DP_ENOITEM) err = TRUE; } break; case 9: putchar('W'); if(vlcurjump(villa, buf, len, VL_JBACKWARD)){ for(j = 0; j < 3 && (kbuf = vlcurkey(villa, &ksiz)); j++){ if(VL_CMPLEX(buf, len, kbuf, ksiz) < 0) err = TRUE; free(kbuf); if(!vlcurprev(villa) && dpecode != DP_ENOITEM) err = TRUE; } } else { if(dpecode != DP_ENOITEM) err = TRUE; } break; case 10: putchar('T'); if(tran){ if(myrand() % 5 == 0){ if(!vltranabort(villa)) err = TRUE; } else { if(!vltrancommit(villa)) err = TRUE; } tran = FALSE; } else { if(!vltranbegin(villa)) err = TRUE; tran = TRUE; } break; default: putchar('P'); if(!vlput(villa, buf, len, buf, len, VL_DOVER)) err = TRUE; break; } if(i % 50 == 0) printfflush(" (%08d)\n", i); if(err){ pdperror(name); break; } } if(tran){ if(!vltranabort(villa)) err = TRUE; } if(!vloptimize(villa)){ pdperror(name); err = TRUE; } if((rnum = vlrnum(villa)) == -1){ pdperror(name); err = TRUE; } if(!vlcurfirst(villa)){ pdperror(name); err = TRUE; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz)) || ksiz != 8 || vsiz != 8 || vlvnum(villa, kbuf, ksiz) < 1){ pdperror(name); free(kbuf); free(vbuf); err = TRUE; break; } free(kbuf); free(vbuf); i++; } while(vlcurnext(villa)); if(i != rnum){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); err = TRUE; } if(dpecode != DP_ENOITEM){ pdperror(name); err = TRUE; } if(!vlcurlast(villa)){ pdperror(name); err = TRUE; } i = 0; do { kbuf = NULL; vbuf = NULL; if(!(kbuf = vlcurkey(villa, &ksiz)) || !(vbuf = vlcurval(villa, &vsiz)) || ksiz != 8 || vsiz != 8 || vlvnum(villa, kbuf, ksiz) < 1){ pdperror(name); free(kbuf); free(vbuf); err = TRUE; break; } free(kbuf); free(vbuf); i++; } while(vlcurprev(villa)); if(i != rnum){ fprintf(stderr, "%s: %s: invalid cursor\n", progname, name); err = TRUE; } if(dpecode != DP_ENOITEM){ pdperror(name); err = TRUE; } if(!vlclose(villa)){ pdperror(name); return 1; } if(!err) printfflush("ok\n\n"); return err ? 1 : 0;}/* END OF FILE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -