0001 #include <windows.h> 0002 #include "BTree_test.h" 0003 0004 /****************************************************************************************** 0005 * Test a BTree 0006 ******************************************************************************************/ 0007 void testBTree(Rank m, Rank n) { 0008 BTree<Rank> bt(m); 0009 0010 printf("\n[Random insert+remove]\n"); 0011 while (bt._N < n) { // 随机 0012 Rank e = dice(n*3); 0013 switch (dice((Rank) 3)) { 0014 case 0: { //查找 0015 printf("Search("); print(e); printf(")\t"); 0016 printf(bt.search(e) ? "Found\n" : "Not Found\n"); 0017 break; 0018 } 0019 case 1: { //删除 0020 printf("Remove("); print(e); printf(")\t"); 0021 if (bt.remove(e)) { printf("Done\n"); print(bt); } 0022 else printf("Not Exists\n"); 0023 break; 0024 } 0025 default: {//插入 0026 printf("Insert("); print(e); printf(")\t"); 0027 if (bt.insert(e)) { printf("Done\n"); print(bt); } 0028 else printf("Dup\n"); 0029 break; 0030 } 0031 } 0032 } 0033 while (bt._N > 0) { //清空 0034 Rank e = rand() % (n*3); //dice(n*3); 0035 if (bt.remove(e)) 0036 { printf("Remove("); print(e); printf(")\tDone\n"); print(bt); } 0037 } 0038 0039 printf("\n[Ascending insert]\n"); 0040 for (Rank e = 0; e < n; e += 3) //顺序插入 0041 bt.insert(e); 0042 print(bt); 0043 printf("\n[Random remove]\n"); 0044 while (bt._N > 0) { //清空 0045 Rank e = (rand()%n)/3*3; 0046 if (bt.remove(e)) 0047 { printf("Remove("); print(e); printf(")\tDone\n"); print(bt); } 0048 } 0049 0050 printf("\n[Descending insert]\n"); 0051 for (Rank e = 0; e < n; e += 3) //逆序插入 0052 bt.insert(n-e); 0053 print(bt); 0054 printf("\n[Random remove]\n"); 0055 while (bt._N > 0) { //清空 0056 Rank e = n - (rand()%n)/3*3; 0057 if (bt.remove(e)) 0058 { printf("Remove("); print(e); printf(")\tDone\n"); print(bt); } 0059 } 0060 } 0061 0062 /****************************************************************************************** 0063 * 测试主入口 0064 ******************************************************************************************/ 0065 int main(int argc, char* argv[]) { 0066 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); 0067 if (4 > argc) { printf("Usage: %s <order> <size> <tests>\a\a\n", argv[0]); return 1; } 0068 Rank m = atoi(argv[1]); if (m < 3) { printf("Make sure the order(%d) is no less than 3.\a\a\n", m); return 1; } 0069 Rank s = atoi(argv[2]); 0070 srand(31415926); //srand((uint32_t) time(nullptr)); //随机种子 0071 Rank t = atoi(argv[3]); 0072 for (Rank k = 0; k < t; k++) { 0073 testBTree(m, s); 0074 printf("[Test #%d/%d] Done\n\n", k, t); 0075 } 0076 return 0; 0077 }