sapling/hgext/generic_bisect.py
Kostia Balytskyi e75b9fc1b1 fb-hgext: move most of hgext3rd and related tests to core
Summary:
This commit moves most of the stuff in hgext3rd and related tests to
hg-crew/hgext and hg-crew/test respectively.

The things that are not moved are the ones which require some more complex
imports.


Depends on D6675309

Test Plan: - tests are failing at this commit, fixes are in the following commits

Reviewers: #sourcecontrol

Differential Revision: https://phabricator.intern.facebook.com/D6675329
2018-01-09 03:03:59 -08:00

23 lines
519 B
Python

def bisect(l, r, comp, val):
'''Bisect algorithm with custom compare function
Returns smallest index between l and r whose value is equal to val.
Returns None if there are no such index.
'''
if r < l:
return None
while l < r:
m = (l + r) / 2
cmpresult = comp(m, val)
if cmpresult == -1:
l = m + 1
elif cmpresult == 0:
r = m
else:
r = m - 1
if r < l or comp(l, val) != 0:
return None
return l