⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 romantest9.py

📁 Dive Into Python,Some Example Sources.
💻 PY
字号:
"""Unit test for roman9.pyThis program is part of "Dive Into Python", a free Python book forexperienced programmers.  Visit http://diveintopython.org/ for thelatest version."""__author__ = "Mark Pilgrim (mark@diveintopython.org)"__version__ = "$Revision: 1.3 $"__date__ = "$Date: 2004/05/05 21:57:20 $"__copyright__ = "Copyright (c) 2001 Mark Pilgrim"__license__ = "Python"import roman9import unittestclass KnownValues(unittest.TestCase):    knownValues = ( (1, 'I'),                    (2, 'II'),                    (3, 'III'),                    (4, 'IV'),                    (5, 'V'),                    (6, 'VI'),                    (7, 'VII'),                    (8, 'VIII'),                    (9, 'IX'),                    (10, 'X'),                    (50, 'L'),                    (100, 'C'),                    (500, 'D'),                    (1000, 'M'),                    (31, 'XXXI'),                    (148, 'CXLVIII'),                    (294, 'CCXCIV'),                    (312, 'CCCXII'),                    (421, 'CDXXI'),                    (528, 'DXXVIII'),                    (621, 'DCXXI'),                    (782, 'DCCLXXXII'),                    (870, 'DCCCLXX'),                    (941, 'CMXLI'),                    (1043, 'MXLIII'),                    (1110, 'MCX'),                    (1226, 'MCCXXVI'),                    (1301, 'MCCCI'),                    (1485, 'MCDLXXXV'),                    (1509, 'MDIX'),                    (1607, 'MDCVII'),                    (1754, 'MDCCLIV'),                    (1832, 'MDCCCXXXII'),                    (1993, 'MCMXCIII'),                    (2074, 'MMLXXIV'),                    (2152, 'MMCLII'),                    (2212, 'MMCCXII'),                    (2343, 'MMCCCXLIII'),                    (2499, 'MMCDXCIX'),                    (2574, 'MMDLXXIV'),                    (2646, 'MMDCXLVI'),                    (2723, 'MMDCCXXIII'),                    (2892, 'MMDCCCXCII'),                    (2975, 'MMCMLXXV'),                    (3051, 'MMMLI'),                    (3185, 'MMMCLXXXV'),                    (3250, 'MMMCCL'),                    (3313, 'MMMCCCXIII'),                    (3408, 'MMMCDVIII'),                    (3501, 'MMMDI'),                    (3610, 'MMMDCX'),                    (3743, 'MMMDCCXLIII'),                    (3844, 'MMMDCCCXLIV'),                    (3888, 'MMMDCCCLXXXVIII'),                    (3940, 'MMMCMXL'),                    (3999, 'MMMCMXCIX'),                    (4000, 'MMMM'),                    (4500, 'MMMMD'),                    (4888, 'MMMMDCCCLXXXVIII'),                    (4999, 'MMMMCMXCIX'))    def testToRomanKnownValues(self):        """toRoman should give known result with known input"""        for integer, numeral in self.knownValues:            result = roman9.toRoman(integer)            self.assertEqual(numeral, result)    def testFromRomanKnownValues(self):        """fromRoman should give known result with known input"""        for integer, numeral in self.knownValues:            result = roman9.fromRoman(numeral)            self.assertEqual(integer, result)class ToRomanBadInput(unittest.TestCase):    def testTooLarge(self):        """toRoman should fail with large input"""        self.assertRaises(roman9.OutOfRangeError, roman9.toRoman, 5000)    def testZero(self):        """toRoman should fail with 0 input"""        self.assertRaises(roman9.OutOfRangeError, roman9.toRoman, 0)    def testNegative(self):        """toRoman should fail with negative input"""        self.assertRaises(roman9.OutOfRangeError, roman9.toRoman, -1)    def testNonInteger(self):        """toRoman should fail with non-integer input"""        self.assertRaises(roman9.NotIntegerError, roman9.toRoman, 0.5)class FromRomanBadInput(unittest.TestCase):    def testTooManyRepeatedNumerals(self):        """fromRoman should fail with too many repeated numerals"""        for s in ('MMMMM', 'DD', 'CCCC', 'LL', 'XXXX', 'VV', 'IIII'):            self.assertRaises(roman9.InvalidRomanNumeralError, roman9.fromRoman, s)    def testRepeatedPairs(self):        """fromRoman should fail with repeated pairs of numerals"""        for s in ('CMCM', 'CDCD', 'XCXC', 'XLXL', 'IXIX', 'IVIV'):            self.assertRaises(roman9.InvalidRomanNumeralError, roman9.fromRoman, s)    def testMalformedAntecedent(self):        """fromRoman should fail with malformed antecedents"""        for s in ('IIMXCC', 'VX', 'DCM', 'CMM', 'IXIV',                  'MCMC', 'XCX', 'IVI', 'LM', 'LD', 'LC'):            self.assertRaises(roman9.InvalidRomanNumeralError, roman9.fromRoman, s)    def testBlank(self):        """fromRoman should fail with blank string"""        self.assertRaises(roman9.InvalidRomanNumeralError, roman9.fromRoman, "")class SanityCheck(unittest.TestCase):    def testSanity(self):        """fromRoman(toRoman(n))==n for all n"""        for integer in range(1, 5000):            numeral = roman9.toRoman(integer)            result = roman9.fromRoman(numeral)            self.assertEqual(integer, result)class CaseCheck(unittest.TestCase):    def testToRomanCase(self):        """toRoman should always return uppercase"""        for integer in range(1, 5000):            numeral = roman9.toRoman(integer)            self.assertEqual(numeral, numeral.upper())    def testFromRomanCase(self):        """fromRoman should only accept uppercase input"""        for integer in range(1, 5000):            numeral = roman9.toRoman(integer)            roman9.fromRoman(numeral.upper())            self.assertRaises(roman9.InvalidRomanNumeralError,                              roman9.fromRoman, numeral.lower())if __name__ == "__main__":    unittest.main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -