1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#!/usr/bin/env python3
import os
import sys
import argparse
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('--start', type=int, default=0)
parser.add_argument('--end', type=int, default=(1 << 32))
parser.add_argument('command', nargs='+')
args = parser.parse_args()
start = args.start
end = args.end
print("Bisect Starting!")
print("Start: %d" % start)
print("End: %d" % end)
last = None
while start != end and start != end-1:
count = start + (end - start)/2
print("Visiting Count: %d with (Start, End) = (%d,%d)" % (count, start, end))
cmd = [x % {'count':count} for x in args.command]
print cmd
result = subprocess.call(cmd)
if result == 0:
print(" PASSES! Setting start to count")
start = count
else:
print(" FAILS! Setting end to count")
end = count
print("Last good count: %d" % start)
|