0001 #include "Hashtable_test.h" 0002 0003 void testHashtable(Rank n) { 0004 Hashtable<Rank, char> ht(n); print(ht); 0005 while (ht.N < 4*n) { 0006 switch (dice((Rank) 3)) { 0007 case 0: { //查找,成功率 <= 33.3% 0008 Rank key = dice(n*12); //[0, 3n)范围内的key 0009 printf("get(%04d):", hashCode((int) key)); 0010 Entry<Rank, char>* e = ht.get(key); 0011 if (e) { printf("\tfound with "); print(e->value); } 0012 else printf("\tnot found"); 0013 printf("\n"); 0014 break; 0015 } 0016 case 1: { //删除,成功率 <= 33.3% 0017 Rank key = dice(n*12); //[0, 3n)范围内的key 0018 printf("remove(%04d):", hashCode((int) key)); 0019 if (ht.remove(key)) { printf("\tdone\n"); print(ht); } 0020 else printf("\tnot exists\n"); 0021 break; 0022 } 0023 default: {//插入,成功率 == 100% 0024 Rank key = dice(n*12); char value = 'A' + dice((Rank) 26); //在[0, 2n)*['A'~'Z']范围内的词条 0025 printf("put(%04d,", hashCode((int) key)); print(value); printf("):"); 0026 if (ht.put(key, value)) { printf("\tdone\n"); print(ht); } 0027 else { printf("\tdup keys\n"); } 0028 break; 0029 } 0030 } //switch 0031 } //while 0032 while (ht.N > 0) { 0033 Rank key = dice(n*12); //[0, 3n)范围内的key 0034 printf("remove(%04d):", hashCode((int) key)); 0035 if (ht.remove(key)) { printf("\tdone\n"); print(ht); } 0036 else printf("\tnot exists\n"); 0037 } //while 0038 } 0039 0040 int main(int argc, char* argv[]) { 0041 if (2 > argc) { printf("Usage: %s <size of test>\a\a\n", argv[0]); return 1; } 0042 srand(31415926); //srand((uint32_t) time(nullptr)); //随机种子 0043 testHashtable(atoi(argv[1])); //元素类型可以在这里任意选择 0044 return 0; 0045 }