bisect 890 B

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