summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMac Mollison <mollison@cs.unc.edu>2010-02-11 20:34:37 -0500
committerMac Mollison <mollison@cs.unc.edu>2010-02-11 20:34:37 -0500
commitf249e3bd52f35f1cfe8a75868c7e4f791a7a8367 (patch)
treee6527f50e8096f35d4077e912a9be1b3bb80fd0b
parentc8eacbf0dce8e2cc1acf6bfb0232302bba592e34 (diff)
Update runtests.py
- Terminate fatally in trace_reader if out-of-order records produced. Thus, we no longer need this unit test. - Fix another unit test which had broken.
-rwxr-xr-xruntests.py26
-rw-r--r--trace_reader.py13
2 files changed, 22 insertions, 17 deletions
diff --git a/runtests.py b/runtests.py
index 1ae29f4..c235e2e 100755
--- a/runtests.py
+++ b/runtests.py
@@ -20,36 +20,28 @@ import os
20############################################################################### 20###############################################################################
21 21
22files = [ 22files = [
23'./sample_traces/st-g4-0.bin', 23'./sample_traces/st-g6-0.bin',
24'./sample_traces/st-g4-1.bin', 24'./sample_traces/st-g6-1.bin',
25'./sample_traces/st-g4-2.bin', 25'./sample_traces/st-g6-2.bin',
26'./sample_traces/st-g4-3.bin', 26'./sample_traces/st-g6-3.bin',
27] 27]
28 28
29############################################################################### 29###############################################################################
30# Tests 30# Tests
31############################################################################### 31###############################################################################
32 32
33# Does the trace reader sort files by time correctly?
34def test1():
35 stream = trace_reader.trace_reader(files)
36 last_time = 0
37 for item in stream:
38 if last_time > item.when:
39 return "[FAIL]"
40 last_time = item.when
41 return "[SUCCESS]"
42
43# Does our fancy trace reader get the same number of files as our naive one? 33# Does our fancy trace reader get the same number of files as our naive one?
44# (See naive_trace_reader.py for further explanation) 34# (See naive_trace_reader.py for further explanation)
45def test2(): 35def test1():
46 stream = trace_reader.trace_reader(files) 36 stream = trace_reader.trace_reader(files)
47 num_records = len(list(stream)) 37 num_records = len(list(stream))
48 stream = naive_trace_reader.trace_reader(files) 38 stream = naive_trace_reader.trace_reader(files)
49 naive_num_records = len(list(stream)) 39 naive_num_records = len(list(stream))
50 if num_records != naive_num_records: 40
41 # We need a +1 here because the fancy reader produces a 'meta' record
42 # indicating the number of CPUs
43 if num_records != naive_num_records + 1:
51 return "[FAIL]" 44 return "[FAIL]"
52 return "[SUCCESS]" 45 return "[SUCCESS]"
53 46
54print("Test 1: {}".format(test1())) 47print("Test 1: {}".format(test1()))
55print("Test 2: {}".format(test2()))
diff --git a/trace_reader.py b/trace_reader.py
index 2e5f65d..e18547e 100644
--- a/trace_reader.py
+++ b/trace_reader.py
@@ -53,12 +53,19 @@ def trace_reader(files):
53 53
54 # We keep 100 records in each buffer and then keep the buffer sorted 54 # We keep 100 records in each buffer and then keep the buffer sorted
55 # This is because records may have been recorded slightly out of order 55 # This is because records may have been recorded slightly out of order
56 # This cannot guarantee records are produced in order, but it makes it
57 # overwhelmingly probably.
56 for x in range(0,len(file_iter_buff)): 58 for x in range(0,len(file_iter_buff)):
57 for y in range(0,100): 59 for y in range(0,100):
58 file_iter_buff[x].append(next(file_iters[x])) 60 file_iter_buff[x].append(next(file_iters[x]))
59 for x in range(0,len(file_iter_buff)): 61 for x in range(0,len(file_iter_buff)):
60 file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when) 62 file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when)
61 63
64 # Remember the time of the last record. This way, we can make sure records
65 # truly are produced in monotonically increasing order by time and terminate
66 # fatally if they are not.
67 last_time = None
68
62 # Keep pulling records as long as we have a buffer 69 # Keep pulling records as long as we have a buffer
63 while len(file_iter_buff) > 0: 70 while len(file_iter_buff) > 0:
64 71
@@ -87,6 +94,12 @@ def trace_reader(files):
87 del file_iter_buff[buff_to_refill] 94 del file_iter_buff[buff_to_refill]
88 del file_iters[buff_to_refill] 95 del file_iters[buff_to_refill]
89 96
97 # Check for monotonically increasing time
98 if last_time is not None and earliest.when < last_time:
99 exit("FATAL ERROR: trace_reader.py: out-of-order record produced")
100 else:
101 last_time = earliest.when
102
90 # Yield the record 103 # Yield the record
91 yield earliest 104 yield earliest
92 105