|
10 | 10 | from easysquid.quantumMemoryDevice import NVCommunicationDevice
|
11 | 11 | from netsquid.simutil import sim_run, sim_reset
|
12 | 12 | from qlinklayer.distQueue import EGPDistributedQueue, WFQDistributedQueue
|
13 |
| -from qlinklayer.scheduler import StrictPriorityRequestScheduler, WFQRequestScheduler |
| 13 | +from qlinklayer.scheduler import StrictPriorityRequestScheduler, WFQRequestScheduler, SchedulerRequest |
14 | 14 | from qlinklayer.qmm import QuantumMemoryManagement
|
15 | 15 | from qlinklayer.egp import EGPRequest
|
16 | 16 | from qlinklayer.scenario import EGPSimulationScenario
|
@@ -183,7 +183,7 @@ def setUp(self):
|
183 | 183 | def test_init(self):
|
184 | 184 | # Test default
|
185 | 185 | scheduler = WFQRequestScheduler(self.distQueueA, self.qmmA, self.feuA)
|
186 |
| - self.assertEqual(scheduler.relative_weights, [0] * self.num_queues) |
| 186 | + self.assertEqual(scheduler.relative_weights, [1] * self.num_queues) |
187 | 187 |
|
188 | 188 | # Test wrong type
|
189 | 189 | with self.assertRaises(TypeError):
|
@@ -215,12 +215,65 @@ def test_compare_cycle_odd(self):
|
215 | 215 | cycle1 = 0
|
216 | 216 | cycle2 = 1
|
217 | 217 |
|
218 |
| - for _ in range(scheduler.max_mhp_cycle_number): |
219 |
| - print(scheduler._compare_mhp_cycle(cycle1, cycle2)) |
| 218 | + for i in range(scheduler.max_mhp_cycle_number): |
| 219 | + if i == 3: |
| 220 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle2), 1) |
| 221 | + else: |
| 222 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle2), -1) |
| 223 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle1), 0) |
| 224 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle2, cycle2), 0) |
220 | 225 | scheduler.mhp_cycle_number += 1
|
221 | 226 |
|
222 |
| - def test_set_virtual_finish(self): |
223 |
| - pass |
| 227 | + def test_compare_cycle_even(self): |
| 228 | + scheduler = WFQRequestScheduler(self.distQueueA, self.qmmA, self.feuA) |
| 229 | + scheduler.max_mhp_cycle_number = 6 |
| 230 | + scheduler.mhp_cycle_number = 0 |
| 231 | + |
| 232 | + cycle1 = 0 |
| 233 | + cycle2 = 1 |
| 234 | + |
| 235 | + for i in range(scheduler.max_mhp_cycle_number): |
| 236 | + if i == 4: |
| 237 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle2), 1) |
| 238 | + else: |
| 239 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle2), -1) |
| 240 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle1, cycle1), 0) |
| 241 | + self.assertEqual(scheduler._compare_mhp_cycle(cycle2, cycle2), 0) |
| 242 | + scheduler.mhp_cycle_number += 1 |
| 243 | + |
| 244 | + def test_set_virtual_finish_same_queue_same_req(self): |
| 245 | + scheduler = WFQRequestScheduler(self.distQueueA, self.qmmA, self.feuA) |
| 246 | + |
| 247 | + # Compare high and low min_fidelity |
| 248 | + requests = [SchedulerRequest(), SchedulerRequest()] |
| 249 | + wfq_requests = [] |
| 250 | + for req in requests: |
| 251 | + wfq_requests.append(scheduler.set_virtual_finish(req, 0)) |
| 252 | + self.assertGreater(wfq_requests[0].init_virtual_finish, wfq_requests[1].init_virtual_finish) |
| 253 | + self.assertEqual(wfq_requests[0].est_cycles_per_pair, wfq_requests[1].est_cycles_per_pair) |
| 254 | + self.assertEqual(wfq_requests[0].init_virtual_finish + wfq_requests[0].est_cycles_per_pair, wfq_requests[1].init_virtual_finish) |
| 255 | + |
| 256 | + def test_set_virtual_finish_fidelity(self): |
| 257 | + scheduler = WFQRequestScheduler(self.distQueueA, self.qmmA, self.feuA) |
| 258 | + |
| 259 | + # Compare high and low min_fidelity |
| 260 | + requests = [SchedulerRequest(min_fidelity=0.8), SchedulerRequest(min_fidelity=0.6)] |
| 261 | + wfq_requests = [] |
| 262 | + for qid, req in enumerate(requests): |
| 263 | + wfq_requests.append(scheduler.set_virtual_finish(req, qid)) |
| 264 | + self.assertGreater(wfq_requests[0].init_virtual_finish, wfq_requests[1].init_virtual_finish) |
| 265 | + self.assertGreater(wfq_requests[0].est_cycles_per_pair, wfq_requests[1].est_cycles_per_pair) |
| 266 | + |
| 267 | + def test_set_virtual_finish_num_pairs(self): |
| 268 | + scheduler = WFQRequestScheduler(self.distQueueA, self.qmmA, self.feuA) |
| 269 | + |
| 270 | + # Compare high and low num pairs (non atomic) |
| 271 | + requests = [SchedulerRequest(num_pairs=2), SchedulerRequest(num_pairs=10)] |
| 272 | + wfq_requests = [] |
| 273 | + for qid, req in enumerate(requests): |
| 274 | + wfq_requests.append(scheduler.set_virtual_finish(req, qid)) |
| 275 | + self.assertEqual(wfq_requests[0].init_virtual_finish, wfq_requests[1].init_virtual_finish) |
| 276 | + self.assertEqual(wfq_requests[0].est_cycles_per_pair, wfq_requests[1].est_cycles_per_pair) |
224 | 277 |
|
225 | 278 | def test_scheduling(self):
|
226 | 279 | pass
|
|
0 commit comments