0001 #include <windows.h> 0002 #include "AVL_test.h" 0003 0004 void testAVL(Rank n) { 0005 AVL<Rank> avl; 0006 while (avl.size() < n) { 0007 Rank e = dice(n*3); 0008 switch (dice((Rank) 3)) { 0009 case 0: { //查找,成功率 <= 33.3% 0010 printf("Search("); print(e); printf(")\t"); 0011 BNP<Rank> p = avl.search(e); 0012 p ? print(p) : printf("nullptr"); 0013 break; 0014 } 0015 case 1: { //删除,成功率 <= 33.3% 0016 printf("Remove("); print(e); printf(")"); 0017 avl.remove(e) ? 0018 printf("\n"), print(avl) : 0019 printf("\tnullptr"); 0020 break; 0021 } 0022 default: {//插入,成功率 == 100% 0023 printf("Insert("); print(e); printf(")\t"); 0024 BNP<Rank> x = avl.insert(e); 0025 print(x), printf("\n"), print(avl); 0026 break; 0027 } 0028 } //switch 0029 printf("\n"); 0030 } //while 0031 while (avl.size() > 0) { 0032 printf("Remove(root ="); print(avl.root()->data); printf(")\n"); 0033 avl.remove(avl.root()->data); 0034 } //while 0035 print(avl); 0036 while (avl.size() < 29) { 0037 Rank e = dice(n*3); 0038 printf("Insert("); print(e); printf(")\t"); 0039 BNP<Rank> x = avl.insert(e); 0040 print(x), printf("\n"); 0041 } 0042 print(avl); 0043 while (avl.size() > 0) { 0044 printf("Remove(root ="); print(avl.root()->data); printf(")\n"); 0045 avl.remove(avl.root()->data); 0046 } //while 0047 print(avl); 0048 } //testAVL 0049 0050 int main(int argc, char* argv[]) { 0051 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); 0052 if (3 > argc) { printf("Usage: %s <size> <tests> \a\a\n", argv[0]); return 1; } 0053 srand(31415926); //srand((uint32_t) time(nullptr)); //随机种子 0054 Rank s = atoi(argv[1]), t = atoi(argv[2]); 0055 for (Rank k = 0; k < t; k++) { 0056 printf("\n[Test #%d/%d]\n", k, t); 0057 testAVL(s); 0058 } 0059 return 0; 0060 }