[Tutor] Re: recursion question
Lee Harr
missive at hotmail.com
Thu Dec 4 21:35:24 EST 2003
>>def mult(m, n):
>> if n < 0:
>> return -mult(m, -n)
>> elif n == 0:
>> return 0
>> elif n == 1:
>> return m
>> else:
>> return m + mult(m, n-1)
>>
>>
>>Now all we need to do is write a docstring and some regression tests
>>and we're all set :o)
>
>Hmm... , do you think my version would also pass your regression test?
>
> >>> def mult(m, n):
> if n < 0:
> return -mult(m, -n)
> elif n == 0:
> return 0
> else:
> return m + mult(m, n-1)
>
def mult(m, n):
if n == 0:
return 0
if n == 1:
return m
if n < 0:
p = abs(n)
result = -1 * (m + mult(m, p-1))
return result
return m + mult(m, n-1)
def mult2(m, n):
if n < 0:
return -mult(m, -n)
elif n == 0:
return 0
elif n == 1:
return m
else:
return m + mult(m, n-1)
def mult3(m, n):
if n < 0:
return -mult(m, -n)
elif n == 0:
return 0
else:
return m + mult(m, n-1)
import unittest
class TestMultFunction(unittest.TestCase):
def setUp(self):
self.this_mult = mult
def test2positive(self):
for n in range(1, 10):
m = 20 - n
self.assertEqual(self.this_mult(m, n), m*n)
def test1positive1negative(self):
for n in range(1, 10):
m = -20 - n
self.assertEqual(self.this_mult(m, n), m*n)
def test2negative(self):
for n in range(1, 10):
m = -20 - n
self.assertEqual(self.this_mult(m, -n), m*-n)
def testmzero(self):
m = 0
for n in range(-10, 10):
self.assertEqual(self.this_mult(m, n), m*n)
def testnzero(self):
n = 0
for m in range(-10, 10):
self.assertEqual(self.this_mult(m, n), m*n)
def testlongs(self):
for m in range(-10, 10):
for n in range(-5, 5):
lm = long(m)
ln = long(n)
self.assertEqual(self.this_mult(lm, ln), lm*ln)
for n in range(5, -5, -1):
lm = long(m)
ln = long(n)
self.assertEqual(self.this_mult(lm, ln), lm*ln)
# All 3 fail this one pretty miserably...
#
# def testfloats(self):
# for m in range(-100, 100):
# for n in range(-50, 50):
# fm = float(m)/10
# fn = float(n)/10
# self.assertEqual(self.this_mult(fm, fn), fm*fn)
#
# for n in range(50, -50, -1):
# fm = float(m)
# fn = float(n)
# self.assertEqual(self.this_mult(fm, fn), fm*fn)
# And this one too...
#
# def testintfloat(self):
# for m in range(-10, 10):
# for n in range(-50, 50):
# fn = float(n)/10
# self.assertEqual(self.this_mult(m, fn), m*fn)
#
# for n in range(50, -50, -1):
# fn = float(n)
# self.assertEqual(self.this_mult(m, fn), m*fn)
# But this seems to be ok
#
def testfloatint(self):
for m in range(-100, 100):
for n in range(-5, 5):
fm = float(m)/10
self.assertEqual(self.this_mult(fm, n), fm*n)
for n in range(5, -5, -1):
fm = float(m)
self.assertEqual(self.this_mult(fm, n), fm*n)
class TestMult2Function(TestMultFunction):
def setUp(self):
self.this_mult = mult2
class TestMult3Function(TestMultFunction):
def setUp(self):
self.this_mult = mult3
if __name__ == '__main__':
# you can use this simple style
#unittest.main()
# or this style for more detail
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestMultFunction))
suite.addTest(unittest.makeSuite(TestMult2Function))
suite.addTest(unittest.makeSuite(TestMult3Function))
unittest.TextTestRunner(verbosity=2).run(suite)
_________________________________________________________________
Add photos to your messages with MSN 8. Get 2 months FREE*.
http://join.msn.com/?page=features/featuredemail
More information about the Tutor
mailing list