#!/usr/bin/env python

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)
