0001 #include <windows.h> 0002 #include "RedBlack_test.h" 0003 0004 void testRedBlack(Rank n) { 0005 RedBlack<Rank> rbt; 0006 while (rbt.size() < n) { 0007 Rank e = dice(n*3); //[0, 3n)范围内的e 0008 switch (dice((Rank) 6)) { 0009 case 0: { //查找(概率 = 1/6) 0010 printf("Search("); print(e); printf(")\n"); 0011 BNP<Rank> p = rbt.search(e); 0012 p ? 0013 printf("Found With"), print(p), printf("\n") : 0014 printf("Not Found\n"); 0015 break; 0016 } 0017 case 1: 0018 case 2: { //删除(概率 = 2/6) 0019 printf("Remove("); print(e); printf(")\n"); 0020 rbt.remove(e) ? 0021 printf("Done\n"), print(rbt) : 0022 printf("Not Exists\n"); 0023 break; 0024 } 0025 default: { //插入(概率 = 3/6) 0026 printf("Insert("); print(e); printf(")\n"); 0027 BNP<Rank> x = rbt.insert(e); 0028 printf("Done With"), print(x), printf("\n"), print(rbt); 0029 break; 0030 } 0031 } 0032 } 0033 while (rbt.size() > 0) { 0034 printf("Remove(root ="); print(rbt.root()->data); printf(")\n"); 0035 rbt.remove(rbt.root()->data); 0036 } 0037 print(rbt); 0038 } 0039 0040 int main(int argc, char* argv[]) { 0041 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); 0042 if (3 > argc) { printf("Usage: %s <size> <tests> \a\a\n", argv[0]); return 1; } 0043 srand(31415926); //srand((uint32_t) time(nullptr)); //随机种子 0044 Rank s = atoi(argv[1]), t = atoi(argv[2]); 0045 for (Rank k = 0; k < t; k++) { 0046 printf("\n[Test #%d/%d]\n", k, t); 0047 testRedBlack(s); 0048 } 0049 return 0; 0050 }