def _typeof_int(val, c): # As in _typeof.c nbits = utils.bit_length(val) if nbits < 32: typ = types.intp elif nbits < 64: typ = types.int64 elif nbits == 64 and val >= 0: typ = types.uint64 else: raise ValueError("Int value is too large: %s" % val) return typ
def test_merge_compute_minrun(self): f = self.timsort.merge_compute_minrun for i in range(0, 64): self.assertEqual(f(i), i) for i in range(6, 63): if 2**i > sys.maxsize: break self.assertEqual(f(2**i), 32) for i in self.fibo(): if i < 64: continue if i >= sys.maxsize: break k = f(i) self.assertGreaterEqual(k, 32) self.assertLessEqual(k, 64) if i > 500: # i/k is close to, but strictly less than, an exact power of 2 quot = i // k p = 2 ** utils.bit_length(quot) self.assertLess(quot, p) self.assertGreaterEqual(quot, 0.9 * p)