Package pytils :: Package test :: Module test_numeral
[hide private]

Source Code for Module pytils.test.test_numeral

  1  # -*- coding: utf-8 -*- 
  2  # PyTils - simple processing for russian strings 
  3  # Copyright (C) 2006-2007  Yury Yurevich 
  4  # 
  5  # http://gorod-omsk.ru/blog/pythy/projects/pytils/ 
  6  # 
  7  # This program is free software; you can redistribute it and/or 
  8  # modify it under the terms of the GNU General Public License 
  9  # as published by the Free Software Foundation, version 2 
 10  # of the License. 
 11  # 
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 15  # GNU General Public License for more details. 
 16  """ 
 17  Unit-tests for pytils.numeral 
 18  """ 
 19   
 20  __id__ = __revision__ = "$Id: test_numeral.py 63 2007-01-02 09:22:16Z the.pythy $" 
 21  __url__ = "$URL: https://pythy.googlecode.com/svn/trunk/pytils/pytils/test/test_numeral.py $" 
 22   
 23  import unittest 
 24  import pytils 
 25   
26 -class ChoosePluralTestCase(unittest.TestCase):
27 """ 28 Test case for pytils.numeral.choose_plural 29 """ 30
31 - def setUp(self):
32 """ 33 Setting up environment for tests 34 """ 35 self.variants = (u"гвоздь", u"гвоздя", u"гвоздей")
36
37 - def checkChoosePlural(self, amount, estimated):
38 """ 39 Checks choose_plural 40 """ 41 self.assertEquals(pytils.numeral.choose_plural(amount, self.variants), 42 estimated)
43
44 - def testChoosePlural(self):
45 """ 46 Unit-test for choose_plural 47 """ 48 self.checkChoosePlural(1, u"гвоздь") 49 self.checkChoosePlural(2, u"гвоздя") 50 self.checkChoosePlural(3, u"гвоздя") 51 self.checkChoosePlural(5, u"гвоздей") 52 self.checkChoosePlural(11, u"гвоздей") 53 self.checkChoosePlural(109, u"гвоздей") 54 self.checkChoosePlural(109l, u"гвоздей")
55
57 """ 58 Unit-test for testing choos_plural's exceptions 59 """ 60 self.assertRaises(TypeError, pytils.numeral.choose_plural, 61 "25", u"any,bene,raba") 62 self.assertRaises(TypeError, pytils.numeral.choose_plural, 63 25, 30) 64 self.assertRaises(ValueError, pytils.numeral.choose_plural, 65 25, u"any,bene") 66 self.assertRaises(ValueError, pytils.numeral.choose_plural, 67 -25, u"any,bene,raba")
68
70 self.assertEquals( 71 pytils.numeral.choose_plural(1,u"гвоздь,гвоздя, гвоздей"), 72 u"гвоздь")
73
74 -class GetFloatRemainderTestCase(unittest.TestCase):
75 """ 76 Test case for pytils.numeral._get_float_remainder 77 """ 78
79 - def testFloatRemainder(self):
80 """ 81 Unit-test for _get_float_remainder 82 """ 83 self.assertEquals(pytils.numeral._get_float_remainder(1.3), 84 '3') 85 self.assertEquals(pytils.numeral._get_float_remainder(2.35, 1), 86 '4') 87 self.assertEquals(pytils.numeral._get_float_remainder(123.1234567891), 88 '123456789') 89 self.assertEquals(pytils.numeral._get_float_remainder(2.353, 2), 90 '35') 91 self.assertEquals(pytils.numeral._get_float_remainder(0.01), 92 '01') 93 self.assertEquals(pytils.numeral._get_float_remainder(5), 94 '0')
95
97 """ 98 Unit-test for testing _get_float_remainder's exceptions 99 """ 100 self.assertRaises(ValueError, pytils.numeral._get_float_remainder, 101 2.998, 2) 102 self.assertRaises(TypeError, pytils.numeral._get_float_remainder, "1.23") 103 self.assertRaises(ValueError, pytils.numeral._get_float_remainder, -1.23)
104
105 -class RublesTestCase(unittest.TestCase):
106 """ 107 Test case for pytils.numeral.rubles 108 """ 109
110 - def testRubles(self):
111 """ 112 Unit-test for rubles 113 """ 114 self.assertEquals(pytils.numeral.rubles(10.01), 115 u"десять рублей одна копейка") 116 self.assertEquals(pytils.numeral.rubles(10.10), 117 u"десять рублей десять копеек") 118 self.assertEquals(pytils.numeral.rubles(2.353), 119 u"два рубля тридцать пять копеек") 120 self.assertEquals(pytils.numeral.rubles(2.998), 121 u"три рубля") 122 self.assertEquals(pytils.numeral.rubles(3), 123 u"три рубля") 124 self.assertEquals(pytils.numeral.rubles(3, True), 125 u"три рубля ноль копеек") 126 self.assertEquals(pytils.numeral.rubles(3l), 127 u"три рубля")
128
129 - def testRublesExceptions(self):
130 """ 131 Unit-test for testing rubles' exceptions 132 """ 133 self.assertRaises(TypeError, pytils.numeral.rubles, "3") 134 self.assertRaises(ValueError, pytils.numeral.rubles, -15)
135 136
137 -class InWordsTestCase(unittest.TestCase):
138 """ 139 Test case for pytils.numeral.in_words 140 """ 141
142 - def testInt(self):
143 """ 144 Unit-test for in_words_int 145 """ 146 self.assertEquals(pytils.numeral.in_words_int(10), u"десять") 147 self.assertEquals(pytils.numeral.in_words_int(5), u"пять") 148 self.assertEquals(pytils.numeral.in_words_int(102), u"сто два") 149 self.assertEquals(pytils.numeral.in_words_int(3521), 150 u"три тысячи пятьсот двадцать один") 151 self.assertEquals(pytils.numeral.in_words_int(3500), 152 u"три тысячи пятьсот") 153 self.assertEquals(pytils.numeral.in_words_int(5231000), 154 u"пять миллионов двести тридцать одна тысяча") 155 self.assertEquals(pytils.numeral.in_words_int(10l), u"десять")
156
157 - def testIntExceptions(self):
158 """ 159 Unit-test for testing in_words_int's exceptions 160 """ 161 self.assertRaises(TypeError, pytils.numeral.in_words_int, 2.5) 162 self.assertRaises(ValueError, pytils.numeral.in_words_int, -3)
163
164 - def testFloat(self):
165 """ 166 Unit-test for in_words_float 167 """ 168 self.assertEquals(pytils.numeral.in_words_float(10.0), 169 u"десять целых ноль десятых") 170 self.assertEquals(pytils.numeral.in_words_float(2.25), 171 u"две целых двадцать пять сотых") 172 self.assertEquals(pytils.numeral.in_words_float(0.01), 173 u"ноль целых одна сотая") 174 self.assertEquals(pytils.numeral.in_words_float(0.10), 175 u"ноль целых одна десятая")
176
177 - def testFloatExceptions(self):
178 """ 179 Unit-test for testing in_words_float's exceptions 180 """ 181 self.assertRaises(TypeError, pytils.numeral.in_words_float, '2') 182 self.assertRaises(TypeError, pytils.numeral.in_words_float, 2) 183 self.assertRaises(ValueError, pytils.numeral.in_words_float, -2.3)
184
185 - def testWithGenderOldStyle(self):
186 """ 187 Unit-test for in_words_float with gender (old-style, i.e. ints) 188 """ 189 self.assertEquals(pytils.numeral.in_words(21, 1), 190 u"двадцать один") 191 self.assertEquals(pytils.numeral.in_words(21, 2), 192 u"двадцать одна") 193 self.assertEquals(pytils.numeral.in_words(21, 3), 194 u"двадцать одно") 195 # на дробные пол не должен влиять - всегда в женском роде 196 self.assertEquals(pytils.numeral.in_words(21.0, 1), 197 u"двадцать одна целая ноль десятых") 198 self.assertEquals(pytils.numeral.in_words(21.0, 2), 199 u"двадцать одна целая ноль десятых") 200 self.assertEquals(pytils.numeral.in_words(21.0, 3), 201 u"двадцать одна целая ноль десятых") 202 self.assertEquals(pytils.numeral.in_words(21l, 1), 203 u"двадцать один")
204
205 - def testWithGender(self):
206 """ 207 Unit-test for in_words_float with gender (old-style, i.e. ints) 208 """ 209 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.MALE), 210 u"двадцать один") 211 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.FEMALE), 212 u"двадцать одна") 213 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.NEUTER), 214 u"двадцать одно") 215 # на дробные пол не должен влиять - всегда в женском роде 216 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.MALE), 217 u"двадцать одна целая ноль десятых") 218 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.FEMALE), 219 u"двадцать одна целая ноль десятых") 220 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.NEUTER), 221 u"двадцать одна целая ноль десятых") 222 self.assertEquals(pytils.numeral.in_words(21l, pytils.numeral.MALE), 223 u"двадцать один")
224 225
226 - def testCommon(self):
227 """ 228 Unit-test for general in_words 229 """ 230 self.assertEquals(pytils.numeral.in_words(10), u"десять") 231 self.assertEquals(pytils.numeral.in_words(5), u"пять") 232 self.assertEquals(pytils.numeral.in_words(102), u"сто два") 233 self.assertEquals(pytils.numeral.in_words(3521), 234 u"три тысячи пятьсот двадцать один") 235 self.assertEquals(pytils.numeral.in_words(3500), 236 u"три тысячи пятьсот") 237 self.assertEquals(pytils.numeral.in_words(5231000), 238 u"пять миллионов двести тридцать одна тысяча") 239 self.assertEquals(pytils.numeral.in_words(10.0), 240 u"десять целых ноль десятых") 241 self.assertEquals(pytils.numeral.in_words(2.25), 242 u"две целых двадцать пять сотых") 243 self.assertEquals(pytils.numeral.in_words(0.01), 244 u"ноль целых одна сотая") 245 self.assertEquals(pytils.numeral.in_words(0.10), 246 u"ноль целых одна десятая") 247 self.assertEquals(pytils.numeral.in_words(10l), u"десять")
248
249 - def testCommonExceptions(self):
250 """ 251 Unit-test for testing in_words' exceptions 252 """ 253 self.assertRaises(TypeError, pytils.numeral.in_words, "0.2") 254 self.assertRaises(TypeError, pytils.numeral.in_words, 0.2, "1") 255 self.assertRaises(ValueError, pytils.numeral.in_words, 0.2, 5) 256 self.assertRaises(ValueError, pytils.numeral.in_words, -2)
257 258
259 -class SumStringTestCase(unittest.TestCase):
260 """ 261 Test case for pytils.numeral.sum_string 262 """ 263
264 - def setUp(self):
265 """ 266 Setting up environment for tests 267 """ 268 self.variants_male = (u"гвоздь", u"гвоздя", u"гвоздей") 269 self.variants_female = (u"шляпка", u"шляпки", u"шляпок")
270
271 - def ckMaleOldStyle(self, amount, estimated):
272 """ 273 Checks sum_string with male gender with old-style genders (i.e. ints) 274 """ 275 self.assertEquals(pytils.numeral.sum_string(amount, 276 1, 277 self.variants_male), 278 estimated)
279
280 - def ckMale(self, amount, estimated):
281 """ 282 Checks sum_string with male gender 283 """ 284 self.assertEquals(pytils.numeral.sum_string(amount, 285 pytils.numeral.MALE, 286 self.variants_male), 287 estimated)
288 289
290 - def ckFemaleOldStyle(self, amount, estimated):
291 """ 292 Checks sum_string with female gender wuth old-style genders (i.e. ints) 293 """ 294 self.assertEquals(pytils.numeral.sum_string(amount, 295 2, 296 self.variants_female), 297 estimated)
298
299 - def ckFemale(self, amount, estimated):
300 """ 301 Checks sum_string with female gender 302 """ 303 self.assertEquals(pytils.numeral.sum_string(amount, 304 pytils.numeral.FEMALE, 305 self.variants_female), 306 estimated)
307
308 - def testSumStringOldStyle(self):
309 """ 310 Unit-test for sum_string with old-style genders 311 """ 312 self.ckMaleOldStyle(10, u"десять гвоздей") 313 self.ckMaleOldStyle(2, u"два гвоздя") 314 self.ckMaleOldStyle(31, u"тридцать один гвоздь") 315 self.ckFemaleOldStyle(10, u"десять шляпок") 316 self.ckFemaleOldStyle(2, u"две шляпки") 317 self.ckFemaleOldStyle(31, u"тридцать одна шляпка") 318 319 self.ckFemaleOldStyle(31l, u"тридцать одна шляпка") 320 321 self.assertEquals(u"одиннадцать негритят", 322 pytils.numeral.sum_string( 323 11, 324 1, 325 u"негритенок,негритенка,негритят" 326 ))
327
328 - def testSumString(self):
329 """ 330 Unit-test for sum_string 331 """ 332 self.ckMale(10, u"десять гвоздей") 333 self.ckMale(2, u"два гвоздя") 334 self.ckMale(31, u"тридцать один гвоздь") 335 self.ckFemale(10, u"десять шляпок") 336 self.ckFemale(2, u"две шляпки") 337 self.ckFemale(31, u"тридцать одна шляпка") 338 339 self.ckFemale(31l, u"тридцать одна шляпка") 340 341 self.assertEquals(u"одиннадцать негритят", 342 pytils.numeral.sum_string( 343 11, 344 pytils.numeral.MALE, 345 u"негритенок,негритенка,негритят" 346 ))
347
348 - def testSumStringExceptions(self):
349 """ 350 Unit-test for testing sum_string's exceptions 351 """ 352 self.assertRaises(TypeError, pytils.numeral.sum_string, 353 "1", 1) 354 self.assertRaises(TypeError, pytils.numeral.sum_string, 355 1, "1") 356 self.assertRaises(TypeError, pytils.numeral.sum_string, 357 1, "1", 23) 358 self.assertRaises(TypeError, pytils.numeral.sum_string, 359 1, pytils.numeral.MALE, (23,24,25)) 360 self.assertRaises(ValueError, pytils.numeral.sum_string, 361 1, pytils.numeral.MALE, (23,)) 362 self.assertRaises(ValueError, pytils.numeral.sum_string, 363 -1, pytils.numeral.MALE, u"any,bene,raba")
364 365 if __name__ == '__main__': 366 unittest.main() 367