From 17f4a1cb094d8e8568796f54d1ab55183ddf731a Mon Sep 17 00:00:00 2001 From: Sunghyun Hwang <me@sunghyunzz.com> Date: Wed, 31 Oct 2018 11:50:12 +0900 Subject: [PATCH] Handle negative numbers Signed-off-by: Sunghyun Hwang <me@sunghyunzz.com> #7 --- kformat/kproperty.py | 12 ++++++++++-- tests/test_kclass.py | 2 +- tests/test_kproperty.py | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/kformat/kproperty.py b/kformat/kproperty.py index 9ac915c..dda9d1e 100644 --- a/kformat/kproperty.py +++ b/kformat/kproperty.py @@ -44,9 +44,17 @@ def __init__( ) def to_bytes(self, v: Optional) -> bytes: - s = str(int(v)) if v is not None else '' try: - b = bytes(s, encoding=N.ENCODING).rjust(self.length, self.filler) + p = b'-' if v < 0 else b'' + s = str(int(abs(v))) + except TypeError: + p, s = b'', '' + + try: + b = p + bytes(s, encoding=N.ENCODING).rjust( + self.length - len(p), + self.filler + ) assert len(b) <= self.length return b except AssertionError: diff --git a/tests/test_kclass.py b/tests/test_kclass.py index 15bd64f..42c74ce 100644 --- a/tests/test_kclass.py +++ b/tests/test_kclass.py @@ -25,7 +25,7 @@ class Something: sth = Something( 123, 'k-class', - Other(456, 'subclass'), + Other(-456, 'subclass'), [], None ) diff --git a/tests/test_kproperty.py b/tests/test_kproperty.py index 2114643..e4fdbbb 100644 --- a/tests/test_kproperty.py +++ b/tests/test_kproperty.py @@ -23,14 +23,29 @@ def test_N_to_bytes(self): N(5).to_bytes(12345), b'12345' ) + self.assertEqual( + N(5).to_bytes(-1), + b'-0001' + ) + self.assertEqual( + N(3).to_bytes(-12), + b'-12' + ) self.assertEqual( N(10, filler=b'?').to_bytes(3), b'?????????3' ) + self.assertEqual( + N(5, filler=b'-').to_bytes(3), + b'----3' + ) with self.assertRaises(ValueError): N(3).to_bytes(1234) + with self.assertRaises(ValueError): + N(2).to_bytes(-10) + def test_AN_to_bytes(self): self.assertEqual( AN(10).to_bytes('sunghyunzz'),