?? tcbmttest.c
字號:
break; case 13: if(id == 0) iputchar('D'); if(!tcbdbget3(bdb, kbuf, ksiz, &vsiz) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbget3"); err = true; } break; case 14: if(id == 0) iputchar('E'); if(myrand(rnum / 50) == 0){ switch(myrand(5)){ case 0: if(!tcbdbcurfirst(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurfirst"); err = true; } break; case 1: if(!tcbdbcurlast(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurlast"); err = true; } break; default: if(!tcbdbcurjump(cur, kbuf, ksiz) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurjump"); err = true; } break; } } TCXSTR *ikey = tcxstrnew(); TCXSTR *ival = tcxstrnew(); for(int j = myrand(rnum) / 1000 + 1; j >= 0; j--){ if(j % 3 == 0){ if(!tcbdbcurrec(cur, ikey, ival)){ int ecode = tcbdbecode(bdb); if(ecode != TCEINVALID && ecode != TCENOREC){ eprint(bdb, "tcbdbcurrec"); err = true; } } } else { int iksiz; if(!tcbdbcurkey3(cur, &iksiz)){ int ecode = tcbdbecode(bdb); if(ecode != TCEINVALID && ecode != TCENOREC){ eprint(bdb, "tcbdbcurkey3"); err = true; } } } if(myrand(5) == 0){ if(!tcbdbcurprev(cur)){ int ecode = tcbdbecode(bdb); if(ecode != TCEINVALID && ecode != TCENOREC){ eprint(bdb, "tcbdbcurprev"); err = true; } } } else { if(!tcbdbcurnext(cur)){ int ecode = tcbdbecode(bdb); if(ecode != TCEINVALID && ecode != TCENOREC){ eprint(bdb, "tcbdbcurnext"); err = true; } } } } tcxstrdel(ival); tcxstrdel(ikey); break; default: if(id == 0) iputchar('@'); if(tcbdbtranbegin(bdb)){ if(myrand(2) == 0){ if(!tcbdbput(bdb, kbuf, ksiz, vbuf, vsiz)){ eprint(bdb, "tcbdbput"); err = true; } if(!nc) tcmapput(map, kbuf, ksiz, vbuf, vsiz); } else { if(!tcbdbout(bdb, kbuf, ksiz) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbout"); err = true; } if(!nc) tcmapout(map, kbuf, ksiz); } if(nc && myrand(2) == 0){ if(!tcbdbtranabort(bdb)){ eprint(bdb, "tcbdbtranabort"); err = true; } } else { if(!tcbdbtrancommit(bdb)){ eprint(bdb, "tcbdbtrancommit"); err = true; } } } else { eprint(bdb, "tcbdbtranbegin"); err = true; } if(myrand(1000) == 0){ if(!tcbdbforeach(bdb, iterfunc, NULL)){ eprint(bdb, "tcbdbforeach"); err = true; } } if(myrand(10000) == 0) srand((unsigned int)(tctime() * 1000) % UINT_MAX); break; } if(!nc) tcglobalmutexunlock(); if(id == 0){ if(i % 50 == 0) iprintf(" (%08d)\n", i); if(id == 0 && i == rnum / 4){ if(!tcbdboptimize(bdb, -1, -1, -1, -1, -1, -1) && tcbdbecode(bdb) != TCEINVALID){ eprint(bdb, "tcbdboptimize"); err = true; } if(!tcbdbcurfirst(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurfirst"); err = true; } } } } tcbdbcurdel(cur); return err ? "error" : NULL;}/* thread the typical function */static void *threadtypical(void *targ){ TCBDB *bdb = ((TARGTYPICAL *)targ)->bdb; int rnum = ((TARGTYPICAL *)targ)->rnum; bool nc = ((TARGTYPICAL *)targ)->nc; int rratio = ((TARGTYPICAL *)targ)->rratio; int id = ((TARGTYPICAL *)targ)->id; bool err = false; TCMAP *map = (!nc && id == 0) ? tcmapnew2(rnum + 1) : NULL; int base = id * rnum; int mrange = tclmax(50 + rratio, 100); BDBCUR *cur = tcbdbcurnew(bdb); for(int i = 1; !err && i <= rnum; i++){ char buf[RECBUFSIZ]; int len = sprintf(buf, "%08d", base + myrandnd(i)); int rnd = myrand(mrange); if(rnd < 10){ if(!tcbdbput(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbput"); err = true; } if(map) tcmapput(map, buf, len, buf, len); } else if(rnd < 15){ if(!tcbdbputkeep(bdb, buf, len, buf, len) && tcbdbecode(bdb) != TCEKEEP){ eprint(bdb, "tcbdbputkeep"); err = true; } if(map) tcmapputkeep(map, buf, len, buf, len); } else if(rnd < 20){ if(!tcbdbputcat(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbputcat"); err = true; } if(map) tcmapputcat(map, buf, len, buf, len); } else if(rnd < 25){ if(!tcbdbout(bdb, buf, len) && tcbdbecode(bdb) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbout"); err = true; } if(map) tcmapout(map, buf, len); } else if(rnd < 27){ switch(myrand(3)){ case 0: if(!tcbdbcurfirst(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurfirst"); err = true; } for(int j = 0; !err && j < 10; j++){ int ksiz; char *kbuf = tcbdbcurkey(cur, &ksiz); if(kbuf){ int vsiz; char *vbuf = tcbdbcurval(cur, &vsiz); if(vbuf){ tcfree(vbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurval"); err = true; } tcfree(kbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurkey"); err = true; } tcbdbcurnext(cur); } break; case 1: if(!tcbdbcurlast(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurlast"); err = true; } for(int j = 0; !err && j < 10; j++){ int ksiz; char *kbuf = tcbdbcurkey(cur, &ksiz); if(kbuf){ int vsiz; char *vbuf = tcbdbcurval(cur, &vsiz); if(vbuf){ tcfree(vbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurval"); err = true; } tcfree(kbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurkey"); err = true; } tcbdbcurprev(cur); } break; case 2: if(!tcbdbcurjump(cur, buf, len) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurjump"); err = true; } for(int j = 0; !err && j < 10; j++){ int ksiz; char *kbuf = tcbdbcurkey(cur, &ksiz); if(kbuf){ int vsiz; char *vbuf = tcbdbcurval(cur, &vsiz); if(vbuf){ tcfree(vbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurval"); err = true; } tcfree(kbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurkey"); err = true; } tcbdbcurnext(cur); } break; } } else { int vsiz; char *vbuf = tcbdbget(bdb, buf, len, &vsiz); if(vbuf){ if(map){ int msiz; const char *mbuf = tcmapget(map, buf, len, &msiz); if(!mbuf || msiz != vsiz || memcmp(mbuf, vbuf, vsiz)){ eprint(bdb, "(validation)"); err = true; } } tcfree(vbuf); } else { if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbget"); err = true; } if(map && tcmapget(map, buf, len, &vsiz)){ eprint(bdb, "(validation)"); err = true; } } } if(id == 0 && rnum > 250 && i % (rnum / 250) == 0){ iputchar('.'); if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i); } } tcbdbcurdel(cur); if(map){ tcmapiterinit(map); int ksiz; const char *kbuf; while(!err && (kbuf = tcmapiternext(map, &ksiz)) != NULL){ int vsiz; char *vbuf = tcbdbget(bdb, kbuf, ksiz, &vsiz); if(vbuf){ int msiz; const char *mbuf = tcmapget(map, kbuf, ksiz, &msiz); if(!mbuf || msiz != vsiz || memcmp(mbuf, vbuf, vsiz)){ eprint(bdb, "(validation)"); err = true; } tcfree(vbuf); } else { eprint(bdb, "(validation)"); err = true; } } tcmapdel(map); } return err ? "error" : NULL;}/* thread the race function */static void *threadrace(void *targ){ TCBDB *bdb = ((TARGRACE *)targ)->bdb; int rnum = ((TARGRACE *)targ)->rnum; int id = ((TARGRACE *)targ)->id; bool err = false; int mid = rnum * 2; for(int i = 1; !err && i <= rnum; i++){ char buf[RECBUFSIZ]; int len = sprintf(buf, "%d", myrandnd(i)); int rnd = myrand(100); if(rnd < 10){ if(!tcbdbputkeep(bdb, buf, len, buf, len) && tcbdbecode(bdb) != TCEKEEP){ eprint(bdb, "tcbdbputkeep"); err = true; } } else if(rnd < 20){ if(!tcbdbputcat(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbputcat"); err = true; } } else if(rnd < 30){ if(!tcbdbputdup(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbputdup"); err = true; } } else if(rnd < 40){ if(!tcbdbputdupback(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbputdupback"); err = true; } } else if(rnd < 50){ if(!tcbdbout(bdb, buf, len) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbout"); err = true; } } else { if(myrand(10) == 0){ int rsiz = myrand(1024); char *rbuf = tcmalloc(rsiz + 1); for(int j = 0; j < rsiz; j++){ rbuf[j] = myrand('z' - 'a') + 'a'; } if(myrand(2) == 0){ if(!tcbdbput(bdb, buf, len, rbuf, rsiz)){ eprint(bdb, "tcbdbputcat"); err = true; } } else { if(!tcbdbputcat(bdb, buf, len, rbuf, rsiz)){ eprint(bdb, "tcbdbputcat"); err = true; } } tcfree(rbuf); } else { if(!tcbdbput(bdb, buf, len, buf, len)){ eprint(bdb, "tcbdbput"); err = true; } } } if(id == 0){ if(myrand(mid) == 0){ iprintf("[v]"); if(!tcbdbvanish(bdb)){ eprint(bdb, "tcbdbvanish"); err = true; } } if(myrand(mid) == 0){ iprintf("[o]"); if(!tcbdboptimize(bdb, -1, -1, myrand(rnum) + 1, myrand(10), myrand(10), 0)){ eprint(bdb, "tcbdbvanish"); err = true; } } if(myrand(mid) == 0){ iprintf("[i]"); BDBCUR *cur = tcbdbcurnew(bdb); if(!tcbdbcurfirst(cur) && tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbcurfirst"); err = true; } char *kbuf; int ksiz; while((kbuf = tcbdbcurkey(cur, &ksiz)) != NULL){ int vsiz; char *vbuf = tcbdbcurval(cur, &vsiz); if(vbuf){ tcfree(vbuf); } else if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "tcbdbget"); err = true; } tcfree(kbuf); tcbdbcurnext(cur); } if(tcbdbecode(bdb) != TCENOREC){ eprint(bdb, "(validation)"); err = true; } tcbdbcurdel(cur); } if(rnum > 250 && i % (rnum / 250) == 0){ iputchar('.'); if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i); } } } return err ? "error" : NULL;}// END OF FILE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -