Created
August 15, 2013 16:16
-
-
Save vralex/6242164 to your computer and use it in GitHub Desktop.
Dive into python 3 example. Unit testing.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
__author__ = 'VladimirDel' | |
import roman | |
import unittest | |
class KnownValues(unittest.TestCase): | |
known_values = ( (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')) | |
def test_to_roman_known_values(self): | |
"""to_roman should give known result with known input""" | |
for integer, numeral in self.known_values: | |
result = roman.to_roman(integer) | |
self.assertEqual(numeral, result) | |
def test_from_roman_known_values(self): | |
"""from_roman should give known results with khone input""" | |
for integer, numeral in self.known_values: | |
n = roman.from_roman(numeral) | |
self.assertEqual(n, integer) | |
class RoundTripCheck(unittest.TestCase): | |
def test_round_trip(self): | |
"""from_roman and to_roman should be inverse""" | |
for integer in range(1, 4000): | |
numeral = roman.to_roman(integer) | |
n = roman.from_roman(numeral) | |
self.assertEqual(n, integer) | |
class ToRomanBadInput(unittest.TestCase): | |
def test_to_roman_out_of_range(self): | |
"""to_roman shoul raises exception on bad input""" | |
for value in (-1, 0, 4000, 5000, 6000): | |
self.assertRaises(roman.OutOfRangeError, roman.to_roman, value) | |
def test_not_integer(self): | |
values = [0.5, 1.5, "123", None] | |
for value in values: | |
self.assertRaises(roman.NotIntegerError, roman.to_roman, value) | |
class FromRomanBadInput(unittest.TestCase): | |
def test_too_many_repeated(self): | |
for s in ('MMMM', 'DD', 'CCCC', 'LL', 'XXXX', 'VV', 'IIII'): | |
self.assertRaises(roman.InvalidRomanNumeralError, roman.from_roman, s) | |
def test_repeated_pairs(self): | |
for s in ('CMCM', 'CDCD', 'XCXC', 'XLXL', 'IXIX', 'IVIV'): | |
self.assertRaises(roman.InvalidRomanNumeralError, roman.from_roman, s) | |
def test_wrong_numerals(self): | |
for s in ('IIMXCC', 'VX', 'DCM', 'CMM', 'IXIV', | |
'MCMC', 'XCX', 'IVI', 'LM', 'LD', 'LC'): | |
self.assertRaises(roman.InvalidRomanNumeralError, roman.from_roman, s) | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment