cint bug fix
This commit is contained in:
parent
9f39599182
commit
8ee9602526
@ -180,11 +180,10 @@ def int_to_c_int(n, base_bytes=1):
|
||||
return b'\x00' * base_bytes
|
||||
else:
|
||||
l = n.bit_length() + 1
|
||||
min_bits = base_bytes * 8 - 1
|
||||
if l <= min_bits + 1:
|
||||
if l <= base_bytes * 8:
|
||||
return n.to_bytes(base_bytes, byteorder="big")
|
||||
prefix = 0
|
||||
payload_bytes = ceil((l)/8) - base_bytes
|
||||
payload_bytes = ceil((l)/8) - base_bytes + 1
|
||||
extra_bytes = int(ceil((l+payload_bytes)/8) - base_bytes)
|
||||
for i in range(extra_bytes):
|
||||
prefix += 2 ** i
|
||||
@ -232,12 +231,12 @@ def c_int_len(n, base_bytes=1):
|
||||
:return: integer.
|
||||
"""
|
||||
if n == 0:
|
||||
return 1
|
||||
return base_bytes
|
||||
l = n.bit_length() + 1
|
||||
min_bits = base_bytes * 8 - 1
|
||||
if l <= min_bits + 1:
|
||||
return 1
|
||||
payload_bytes = ceil((l)/8) - base_bytes
|
||||
return base_bytes
|
||||
payload_bytes = ceil((l)/8) - base_bytes + 1
|
||||
return int(ceil((l+payload_bytes)/8))
|
||||
|
||||
|
||||
|
||||
@ -69,9 +69,6 @@ class IntegerFunctionsTests(unittest.TestCase):
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
self.assertEqual(len(tools.int_to_c_int(i)), 8)
|
||||
for i in range(72057594037927934, 72057594037927938):
|
||||
# print(i, "[", len(tools.int_to_c_int(i)), "]", end=" : " )
|
||||
# print_bytes(tools.int_to_c_int(i))
|
||||
# print(bin(tools.c_int_to_int((tools.int_to_c_int(i)))))
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
self.assertEqual(len(tools.int_to_c_int(i)), 9)
|
||||
@ -79,12 +76,56 @@ class IntegerFunctionsTests(unittest.TestCase):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
self.assertEqual(len(tools.int_to_c_int(i)), 10)
|
||||
i = 1333870604623599278750
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
|
||||
i = 0
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
self.assertEqual(len(tools.int_to_c_int(i)), 1)
|
||||
|
||||
for i in range(1213666705181745367548161 - 10, 1213666705181745367548161 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(310698676526526814092329217 - 10, 310698676526526814092329217 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(79538861190790864407636279553 - 10, 79538861190790864407636279553 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(20361948464842461288354887565569 - 10, 20361948464842461288354887565569 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(5212658806999670089818851216785665 - 10, 5212658806999670089818851216785665 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(1334440654591915542993625911497130241 - 10, 1334440654591915542993625911497130241 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(341616807575530379006368233343265341697 - 10, 341616807575530379006368233343265341697 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
for i in range(87453902739335777025630267735875927474433 - 10, 87453902739335777025630267735875927474433 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(22388199101269958918561348540384237433454849 - 10, 22388199101269958918561348540384237433454849 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(5731378969925109483151705226338364782964441345 - 10, 5731378969925109483151705226338364782964441345 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
|
||||
for i in range(341616807575530379006368233343265341697 - 10, 341616807575530379006368233343265341697 + 10):
|
||||
self.assertEqual(tools.c_int_to_int((tools.int_to_c_int(i))), i)
|
||||
self.assertEqual(tools.c_int_len(i), len(tools.int_to_c_int(i)))
|
||||
def test_variable_integer(self):
|
||||
for i in range(0, 0xfd):
|
||||
self.assertEqual(tools.var_int_to_int((tools.int_to_var_int(i))), i)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user