1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00

added test for bin with current implementation

This commit is contained in:
jand 2003-07-09 19:29:04 +00:00
parent 5c389f34ea
commit 0bcae3e8a1
2 changed files with 114 additions and 4 deletions

View File

@ -42,8 +42,10 @@ def bin(num, width=0):
"""
num = long(num)
s = _int2bitstring(num)
if width:
pad = '0'
if num < 0:
pad = '1'
return (width - len(s)) * pad + s
return s

108
myhdl/test_bin.py Normal file
View File

@ -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 <jan@jandecaluwe.com>"
__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()