|
|
1.1 ! root 1: #include "test_tool.h" ! 2: #include "event.h" ! 3: #include "eventqueue.h" ! 4: #include <string> ! 5: ! 6: static void ! 7: do_test() ! 8: { ! 9: eventqueue q {}; ! 10: std::vector<Event> events {}; ! 11: Event *e; ! 12: int N; ! 13: ! 14: // 実体を用意する ! 15: N = 9; ! 16: for (int i = 0; i < N; i++) { ! 17: Event ev; ! 18: ev.vtime = i + 1; ! 19: events.emplace_back(ev); ! 20: } ! 21: ! 22: // ! 23: // Test1. 正順に追加 ! 24: // ! 25: for (int i = 0; i < N; i++) { ! 26: q.push(&events[i]); ! 27: } ! 28: // 取り出して検査 ! 29: for (int i = 0; i < N; i++) { ! 30: // 先頭を参照 ! 31: e = q.front(); ! 32: if (e == NULL) { ! 33: printf("%s:%d: e expects non-null but null\n", __func__, __LINE__); ! 34: exit(1); ! 35: } ! 36: xp_eq(i + 1, e->vtime, string_format("i=%d", i)); ! 37: ! 38: // 取り出す ! 39: q.pop_front(); ! 40: xp_eq(N - 1 - i, q.size()); ! 41: } ! 42: // 全部なくなった (q.front() は empty() 時に呼んではいけない) ! 43: xp_eq(true, q.empty()); ! 44: ! 45: // ! 46: // Test2. 逆順に追加 ! 47: // ! 48: for (int i = N - 1; i >= 0; i--) { ! 49: q.push(&events[i]); ! 50: } ! 51: // 取り出して検査 ! 52: for (int i = 0; i < N; i++) { ! 53: // 先頭を参照 ! 54: e = q.front(); ! 55: if (e == NULL) { ! 56: printf("%s:%d: e expects non-null but null\n", __func__, __LINE__); ! 57: exit(1); ! 58: } ! 59: xp_eq(i + 1, e->vtime); ! 60: ! 61: // 取り出す ! 62: q.pop_front(); ! 63: xp_eq(N - 1 - i, q.size()); ! 64: } ! 65: // 全部なくなった (q.front() は empty() 時に呼んではいけない) ! 66: xp_eq(true, q.empty()); ! 67: ! 68: // ! 69: // Test3. 同値を含む。(同値同士はどう評価しても構わない) ! 70: // ! 71: N = 4; ! 72: events[0].vtime = 10; ! 73: events[1].vtime = 40; ! 74: events[2].vtime = 20; ! 75: events[3].vtime = 20; ! 76: for (int i = 0; i < N; i++) { ! 77: q.push(&events[i]); ! 78: } ! 79: // 取り出して検査 ! 80: for (int i = 0; i < N; i++) { ! 81: // 先頭を取り出す。この辺が動いてることはすでに確認済み ! 82: e = q.front(); ! 83: q.pop_front(); ! 84: // 評価する。同値同士の順序は問わない ! 85: switch (i) { ! 86: case 0: ! 87: xp_eq(10, e->vtime); ! 88: break; ! 89: case 1: ! 90: case 2: ! 91: xp_eq(20, e->vtime); ! 92: break; ! 93: case 3: ! 94: xp_eq(40, e->vtime); ! 95: break; ! 96: } ! 97: } ! 98: ! 99: // ! 100: // Test4. 削除 ! 101: // ! 102: N = 4; ! 103: // 中間の events[2] を削除 ! 104: events[0].vtime = 10; ! 105: events[1].vtime = 40; ! 106: events[2].vtime = 20; ! 107: events[3].vtime = 20; ! 108: for (int i = 0; i < N; i++) { ! 109: q.push(&events[i]); ! 110: } ! 111: q.erase(&events[2]); ! 112: e = q.front(); q.pop_front(); xp_eq(10, e->vtime); ! 113: e = q.front(); q.pop_front(); xp_eq(20, e->vtime); ! 114: e = q.front(); q.pop_front(); xp_eq(40, e->vtime); ! 115: xp_eq(true, q.empty()); ! 116: ! 117: // 末尾を削除 ! 118: N = 4; ! 119: events[0].vtime = 10; ! 120: events[1].vtime = 40; ! 121: events[2].vtime = 20; ! 122: events[3].vtime = 20; ! 123: for (int i = 0; i < N; i++) { ! 124: q.push(&events[i]); ! 125: } ! 126: q.erase(&events[1]); ! 127: e = q.front(); q.pop_front(); xp_eq(10, e->vtime); ! 128: e = q.front(); q.pop_front(); xp_eq(20, e->vtime); ! 129: e = q.front(); q.pop_front(); xp_eq(20, e->vtime); ! 130: xp_eq(true, q.empty()); ! 131: ! 132: // 先頭を削除 ! 133: N = 2; ! 134: events[0].vtime = 10; ! 135: events[1].vtime = 20; ! 136: for (int i = 0; i < N; i++) { ! 137: q.push(&events[i]); ! 138: } ! 139: q.erase(&events[0]); ! 140: e = q.front(); xp_eq(20, e->vtime); ! 141: xp_eq(false, q.empty()); ! 142: // 最後の一つを削除 ! 143: q.erase(&events[1]); ! 144: xp_eq(true, q.empty()); ! 145: } ! 146: ! 147: static void ! 148: do_perf() ! 149: { ! 150: } ! 151: ! 152: static void ! 153: usage() ! 154: { ! 155: fprintf(stderr, "usage: %s [test | perf]\n", getprogname()); ! 156: exit(1); ! 157: } ! 158: ! 159: int ! 160: main(int ac, char *av[]) ! 161: { ! 162: bool perf = false; ! 163: ! 164: for (int i = 1; i < ac; i++) { ! 165: std::string cmd = av[i]; ! 166: if (cmd == "test") { ! 167: // default ! 168: } else if (cmd == "perf") { ! 169: perf = true; ! 170: } else { ! 171: usage(); ! 172: } ! 173: } ! 174: ! 175: // テストは常に実施 ! 176: do_test(); ! 177: // 測定は指定された時だけ ! 178: if (perf) { ! 179: do_perf(); ! 180: } ! 181: return 0; ! 182: } ! 183: ! 184: // 以下リンカを通すためのダミー ! 185: Event::Event() ! 186: { ! 187: } ! 188: Event::~Event() ! 189: { ! 190: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.