0001 #include "skipList_test.h" 0002 0003 void test(Rank n, Rank times) { 0004 Skiplist<Rank> L; print(L); 0005 for (Rank ttt = 0; ttt < times; ttt++) { //n规模的测试做times遍 0006 printf("\n[Test #%d/%d]\n", ttt, times); 0007 while (L.size() < n) { 0008 Rank e = dice(n*3); //[0, 3n)范围内的e 0009 switch (dice((Rank) 3)) { 0010 case 0: { //查找 0011 printf("search("); print(e); printf("):"); 0012 TowerPosi<Rank> t = L.search(e); 0013 printf("\tfound with"); 0014 t ? print(key(t)) : printf(" -inf"); 0015 printf("\n"); 0016 break; 0017 } 0018 case 1: { //删除 0019 printf("remove("); print(e); printf("):"); 0020 if (L.remove(e)) { printf("\tdone\n"); print(L); } 0021 else printf("\tnot exists\n"); 0022 break; 0023 } 0024 default: {//插入 0025 printf("insert("); print(e); printf("):"); 0026 Rank sizeOld = L.size(); L.insert(e); 0027 printf((sizeOld != L.size()) ? "\tdone\n" : "\tdup\n"); 0028 print(L); 0029 break; 0030 } 0031 } //switch 0032 } //while 0033 0034 while (L.size() > 0) { 0035 Rank e = dice(n*3); //[0, 3n)范围内的e 0036 printf("search("); print(e); printf("):"); 0037 TowerPosi<Rank> t = L.search(e); 0038 printf("\tfound with"); 0039 t ? print(key(t)) : printf(" -inf"); 0040 printf("\n"); 0041 0042 e = t ? key(t) : e = key(L.first()); //删除最接近的目标 0043 printf("remove("); print(e); printf("):"); 0044 if (L.remove(e)) { printf("\tdone\n"); print(L); } 0045 else printf("\tnot exists\n"); //-inf 0046 } //while 0047 } //while 0048 } //test 0049 0050 int main(int argc, char* argv[]) { 0051 if (3 > argc) { printf("Usage: %s <size> <tests> \a\a\n", argv[0]); return 1; } 0052 srand(31415926); //srand((uint32_t) time(nullptr)); //随机种子 0053 test(atoi(argv[1]), atoi(argv[2])); 0054 return 0; 0055 }