diff options
author | Yesudeep Mangalapilly <yesudeep@gmail.com> | 2011-08-17 00:19:39 +0530 |
---|---|---|
committer | Yesudeep Mangalapilly <yesudeep@gmail.com> | 2011-08-17 00:19:39 +0530 |
commit | a5a43a5545c80bbc9d3df83011d0da41316d4afc (patch) | |
tree | 41392d0fcb91dcfafd2694a4300d45faecb38b7a | |
parent | 9358b1cb945ed4aa340785e766a42459fb161c03 (diff) | |
download | rsa-git-a5a43a5545c80bbc9d3df83011d0da41316d4afc.tar.gz |
Fixes a silly error.
-rw-r--r-- | rsa/common.py | 12 | ||||
-rw-r--r-- | tests/test_common.py | 13 | ||||
-rw-r--r-- | tox.ini | 2 |
3 files changed, 18 insertions, 9 deletions
diff --git a/rsa/common.py b/rsa/common.py index 7801b59..eb95e82 100644 --- a/rsa/common.py +++ b/rsa/common.py @@ -22,6 +22,9 @@ def bit_size(num): Number of bits needed to represent a integer excluding any prefix 0 bits. + As per definition from http://wiki.python.org/moin/BitManipulation and + to match the behavior of the Python 3 API. + :param num: Integer value. If num is 0, returns 0. Only the absolute value of the number is considered. Therefore, signed integers will be abs(num) @@ -67,16 +70,13 @@ def _bit_size(number): def byte_size(number): - """Returns the number of bytes required to hold a specific long number. + """ + Returns the number of bytes required to hold a specific long number. The number of bytes is rounded up. """ - if number == 0: - return 0 - # Does not perform floating-point division and uses built-in divmod - # operator. quanta, mod = divmod(bit_size(number), 8) - if mod: + if mod or number == 0: quanta += 1 return quanta #return int(math.ceil(bit_size(number) / 8.0)) diff --git a/tests/test_common.py b/tests/test_common.py index 9980b15..9b69193 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -16,7 +16,6 @@ class Test_byte(unittest2.TestCase): self.assertRaises(struct.error, byte, 256) self.assertRaises(struct.error, byte, -1) - class Test_byte_size(unittest2.TestCase): def test_values(self): self.assertEqual(byte_size(1 << 1023), 128) @@ -24,7 +23,17 @@ class Test_byte_size(unittest2.TestCase): self.assertEqual(byte_size(1 << 1024), 129) def test_zero(self): - self.assertEqual(byte_size(0), 0) + self.assertEqual(byte_size(0), 1) + self.assertEqual(byte_size(255), 1) + self.assertEqual(byte_size(256), 2) + self.assertEqual(byte_size(0xffff), 2) + self.assertEqual(byte_size(0xffffff), 3) + self.assertEqual(byte_size(0xffffffff), 4) + self.assertEqual(byte_size(0xffffffffff), 5) + self.assertEqual(byte_size(0xffffffffffff), 6) + self.assertEqual(byte_size(0xffffffffffffff), 7) + self.assertEqual(byte_size(0xffffffffffffffff), 8) + def test_bad_type(self): self.assertRaises(TypeError, byte_size, []) @@ -2,7 +2,7 @@ envlist = py25,py26,py27,py32 #,pypy [pytest] -addopts = -n4 -v --cov rsa --cov-report term-missing --doctest-modules +addopts = -n4 -v --cov rsa --cov-report term-missing # --doctest-modules [testenv] commands=py.test [] |