aboutsummaryrefslogtreecommitdiff
path: root/tools/autodediffer.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/autodediffer.py')
-rw-r--r--tools/autodediffer.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/autodediffer.py b/tools/autodediffer.py
new file mode 100644
index 00000000..68ecf821
--- /dev/null
+++ b/tools/autodediffer.py
@@ -0,0 +1,60 @@
+'''
+A semi-smart diff for autodebugger logs.
+
+Run it with filenames of two autodebugger logs as parameters
+'''
+
+import os, sys
+
+
+def process_line(line):
+ #AD:2041,0.900000
+ if not line.startswith('AD:'): return
+ line = line.split(':')[1]
+ num, val = line.split(',')
+ return [int(num), float(val)]
+
+a = open(sys.argv[1], 'r').readlines()
+b = open(sys.argv[2], 'r').readlines()
+MIN = 0.0001 if len(sys.argv) < 4 else sys.argv[3]
+
+ai = 0
+bi = 0
+maxx = max(len(a), len(b))
+
+while max(ai, bi) < maxx:
+ while 1:
+ av = process_line(a[ai])
+ if av: break
+ ai += 1
+ while 1:
+ bv = process_line(b[bi])
+ if bv: break
+ bi += 1
+ #print 'curr:', ai, bi, av, bv
+ # Find the nearest matching num, if not already matched
+ if not av[0] == bv[0]:
+ tai = ai+1
+ tbi = bi+1
+ while 1:
+ tav = process_line(a[tai])
+ tbv = process_line(b[tbi])
+ #print 'seek:', tai, tbi, tav, tbv
+ if tav and tav[0] == bv[0]:
+ ai = tai
+ av = tav
+ break
+ elif tbv and tbv[0] == av[0]:
+ bi = tbi
+ bv = tbv
+ break
+ tai += 1
+ tbi += 1
+
+ assert av[0] == bv[0]
+ diff = abs(av[1] - bv[1])
+ if diff > MIN:
+ print '<<%d %d>> %d : %.5f' % (ai, bi, av[0], diff)
+ ai += 1
+ bi += 1
+