From 0bcae3e8a1cc3c38429610d2125924bc4dcb9bc8 Mon Sep 17 00:00:00 2001 From: jand Date: Wed, 9 Jul 2003 19:29:04 +0000 Subject: [PATCH] added test for bin with current implementation --- myhdl/bin.py | 10 +++-- myhdl/test_bin.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 myhdl/test_bin.py diff --git a/myhdl/bin.py b/myhdl/bin.py index 82d87686..c611acf2 100644 --- a/myhdl/bin.py +++ b/myhdl/bin.py @@ -42,8 +42,10 @@ def bin(num, width=0): """ num = long(num) s = _int2bitstring(num) - pad = '0' - if num < 0: - pad = '1' - return (width - len(s)) * pad + s + if width: + pad = '0' + if num < 0: + pad = '1' + return (width - len(s)) * pad + s + return s diff --git a/myhdl/test_bin.py b/myhdl/test_bin.py new file mode 100644 index 00000000..6e3e87cd --- /dev/null +++ b/myhdl/test_bin.py @@ -0,0 +1,108 @@ +# This file is part of the myhdl library, a Python package for using +# Python as a Hardware Description Language. +# +# Copyright (C) 2003 Jan Decaluwe +# +# The myhdl library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" Run the unit tests for bin """ + +__author__ = "Jan Decaluwe " +__revision__ = "$Revision$" +__date__ = "$Date$" + +from __future__ import generators + +import random +from random import randrange +random.seed(1) # random, but deterministic + +import unittest +from unittest import TestCase +import sys +from bin import bin + +def _int2bitstring(num): + if num == 0: + return '0' + if abs(num) == 1: + return '1' + return _int2bitstring(num // 2) + _int2bitstring(num % 2) + +def binref(num, width=0): + """Return a binary string representation. + + num -- number to convert + Optional parameter: + width -- specifies the desired string (sign bit padding) + """ + num = long(num) + s = _int2bitstring(num) + if width: + pad = '0' + if num < 0: + pad = '1' + return (width - len(s)) * pad + s + return s + + +class TestBin(TestCase): + + def testSmall(self): + for i in range(-65, 65): + self.assertEqual(bin(i), binref(i)) + + def testSmallWidth(self): + for i in range(-65, 65): + w = randrange(1, 8) + self.assertEqual(bin(i, w), binref(i, w)) + + def testRandomInt(self): + for j in range(100): + i = randrange(-sys.maxint, sys.maxint) + self.assertEqual(bin(i), binref(i)) + + def testRandomIntWidth(self): + for j in range(100): + w = randrange(1, 1000) + i = randrange(-sys.maxint, sys.maxint) + self.assertEqual(bin(i, w), binref(i, w)) + + def testRandomLong(self): + for j in range(100): + k = randrange(sys.maxint) + i = k + sys.maxint + self.assertEqual(bin(i), binref(i)) + i = -k - sys.maxint + self.assertEqual(bin(i), binref(i)) + + def testRandomLongWith(self): + for j in range(100): + w = randrange(1, 1000) + k = randrange(sys.maxint) + i = k + sys.maxint + self.assertEqual(bin(i, w), binref(i, w)) + i = -k - sys.maxint + self.assertEqual(bin(i, w), binref(i, w)) + + + + + + + + +if __name__ == "__main__": + unittest.main()