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://www.pyobject.ru/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 102 2007-07-12 12:33:36Z the.pythy $" 
 21  __url__ = "$URL: https://pythy.googlecode.com/svn/tags/pytils/0_2_2/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 """ 71 Tests new-style variants 72 """ 73 self.assertEquals( 74 pytils.numeral.choose_plural(1,u"гвоздь,гвоздя, гвоздей"), 75 u"гвоздь") 76 self.assertEquals( 77 pytils.numeral.choose_plural(5,u"гвоздь, гвоздя, гвоздей\, шпунтов"), 78 u"гвоздей, шпунтов")
79
80 -class GetPluralTestCase(unittest.TestCase):
81 """ 82 Test case for get_plural 83 """
84 - def testGetPlural(self):
85 """ 86 Test regular get_plural 87 """ 88 self.assertEquals( 89 pytils.numeral.get_plural(1, u"комментарий, комментария, комментариев"), 90 u"1 комментарий") 91 self.assertEquals( 92 pytils.numeral.get_plural(0, u"комментарий, комментария, комментариев"), 93 u"0 комментариев")
94
95 - def testGetPluralAbsence(self):
96 """ 97 Test get_plural with absence 98 """ 99 self.assertEquals( 100 pytils.numeral.get_plural(1, u"комментарий, комментария, комментариев", 101 u"без комментариев"), 102 u"1 комментарий") 103 self.assertEquals( 104 pytils.numeral.get_plural(0, u"комментарий, комментария, комментариев", 105 u"без комментариев"), 106 u"без комментариев")
107
108 - def testGetPluralLegacy(self):
109 """ 110 Test _get_plural_legacy 111 """ 112 self.assertEquals( 113 pytils.numeral._get_plural_legacy(1, u"комментарий, комментария, комментариев"), 114 u"1 комментарий") 115 self.assertEquals( 116 pytils.numeral._get_plural_legacy(0, u"комментарий, комментария, комментариев"), 117 u"0 комментариев") 118 self.assertEquals( 119 pytils.numeral._get_plural_legacy(1, u"комментарий, комментария, комментариев, без комментариев"), 120 u"1 комментарий") 121 self.assertEquals( 122 pytils.numeral._get_plural_legacy(0, u"комментарий, комментария, комментариев, без комментариев"), 123 u"без комментариев")
124 125
126 -class GetFloatRemainderTestCase(unittest.TestCase):
127 """ 128 Test case for pytils.numeral._get_float_remainder 129 """ 130
131 - def testFloatRemainder(self):
132 """ 133 Unit-test for _get_float_remainder 134 """ 135 self.assertEquals(pytils.numeral._get_float_remainder(1.3), 136 '3') 137 self.assertEquals(pytils.numeral._get_float_remainder(2.35, 1), 138 '4') 139 self.assertEquals(pytils.numeral._get_float_remainder(123.1234567891), 140 '123456789') 141 self.assertEquals(pytils.numeral._get_float_remainder(2.353, 2), 142 '35') 143 self.assertEquals(pytils.numeral._get_float_remainder(0.01), 144 '01') 145 self.assertEquals(pytils.numeral._get_float_remainder(5), 146 '0')
147
149 """ 150 Unit-test for testing _get_float_remainder's exceptions 151 """ 152 self.assertRaises(ValueError, pytils.numeral._get_float_remainder, 153 2.998, 2) 154 self.assertRaises(TypeError, pytils.numeral._get_float_remainder, "1.23") 155 self.assertRaises(ValueError, pytils.numeral._get_float_remainder, -1.23)
156
157 -class RublesTestCase(unittest.TestCase):
158 """ 159 Test case for pytils.numeral.rubles 160 """ 161
162 - def testRubles(self):
163 """ 164 Unit-test for rubles 165 """ 166 self.assertEquals(pytils.numeral.rubles(10.01), 167 u"десять рублей одна копейка") 168 self.assertEquals(pytils.numeral.rubles(10.10), 169 u"десять рублей десять копеек") 170 self.assertEquals(pytils.numeral.rubles(2.353), 171 u"два рубля тридцать пять копеек") 172 self.assertEquals(pytils.numeral.rubles(2.998), 173 u"три рубля") 174 self.assertEquals(pytils.numeral.rubles(3), 175 u"три рубля") 176 self.assertEquals(pytils.numeral.rubles(3, True), 177 u"три рубля ноль копеек") 178 self.assertEquals(pytils.numeral.rubles(3l), 179 u"три рубля")
180
181 - def testRublesExceptions(self):
182 """ 183 Unit-test for testing rubles' exceptions 184 """ 185 self.assertRaises(TypeError, pytils.numeral.rubles, "3") 186 self.assertRaises(ValueError, pytils.numeral.rubles, -15)
187 188
189 -class InWordsTestCase(unittest.TestCase):
190 """ 191 Test case for pytils.numeral.in_words 192 """ 193
194 - def testInt(self):
195 """ 196 Unit-test for in_words_int 197 """ 198 self.assertEquals(pytils.numeral.in_words_int(10), u"десять") 199 self.assertEquals(pytils.numeral.in_words_int(5), u"пять") 200 self.assertEquals(pytils.numeral.in_words_int(102), u"сто два") 201 self.assertEquals(pytils.numeral.in_words_int(3521), 202 u"три тысячи пятьсот двадцать один") 203 self.assertEquals(pytils.numeral.in_words_int(3500), 204 u"три тысячи пятьсот") 205 self.assertEquals(pytils.numeral.in_words_int(5231000), 206 u"пять миллионов двести тридцать одна тысяча") 207 self.assertEquals(pytils.numeral.in_words_int(10l), u"десять")
208
209 - def testIntExceptions(self):
210 """ 211 Unit-test for testing in_words_int's exceptions 212 """ 213 self.assertRaises(TypeError, pytils.numeral.in_words_int, 2.5) 214 self.assertRaises(ValueError, pytils.numeral.in_words_int, -3)
215
216 - def testFloat(self):
217 """ 218 Unit-test for in_words_float 219 """ 220 self.assertEquals(pytils.numeral.in_words_float(10.0), 221 u"десять целых ноль десятых") 222 self.assertEquals(pytils.numeral.in_words_float(2.25), 223 u"две целых двадцать пять сотых") 224 self.assertEquals(pytils.numeral.in_words_float(0.01), 225 u"ноль целых одна сотая") 226 self.assertEquals(pytils.numeral.in_words_float(0.10), 227 u"ноль целых одна десятая")
228
229 - def testFloatExceptions(self):
230 """ 231 Unit-test for testing in_words_float's exceptions 232 """ 233 self.assertRaises(TypeError, pytils.numeral.in_words_float, '2') 234 self.assertRaises(TypeError, pytils.numeral.in_words_float, 2) 235 self.assertRaises(ValueError, pytils.numeral.in_words_float, -2.3)
236
237 - def testWithGenderOldStyle(self):
238 """ 239 Unit-test for in_words_float with gender (old-style, i.e. ints) 240 """ 241 self.assertEquals(pytils.numeral.in_words(21, 1), 242 u"двадцать один") 243 self.assertEquals(pytils.numeral.in_words(21, 2), 244 u"двадцать одна") 245 self.assertEquals(pytils.numeral.in_words(21, 3), 246 u"двадцать одно") 247 # на дробные пол не должен влиять - всегда в женском роде 248 self.assertEquals(pytils.numeral.in_words(21.0, 1), 249 u"двадцать одна целая ноль десятых") 250 self.assertEquals(pytils.numeral.in_words(21.0, 2), 251 u"двадцать одна целая ноль десятых") 252 self.assertEquals(pytils.numeral.in_words(21.0, 3), 253 u"двадцать одна целая ноль десятых") 254 self.assertEquals(pytils.numeral.in_words(21l, 1), 255 u"двадцать один")
256
257 - def testWithGender(self):
258 """ 259 Unit-test for in_words_float with gender (old-style, i.e. ints) 260 """ 261 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.MALE), 262 u"двадцать один") 263 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.FEMALE), 264 u"двадцать одна") 265 self.assertEquals(pytils.numeral.in_words(21, pytils.numeral.NEUTER), 266 u"двадцать одно") 267 # на дробные пол не должен влиять - всегда в женском роде 268 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.MALE), 269 u"двадцать одна целая ноль десятых") 270 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.FEMALE), 271 u"двадцать одна целая ноль десятых") 272 self.assertEquals(pytils.numeral.in_words(21.0, pytils.numeral.NEUTER), 273 u"двадцать одна целая ноль десятых") 274 self.assertEquals(pytils.numeral.in_words(21l, pytils.numeral.MALE), 275 u"двадцать один")
276 277
278 - def testCommon(self):
279 """ 280 Unit-test for general in_words 281 """ 282 self.assertEquals(pytils.numeral.in_words(10), u"десять") 283 self.assertEquals(pytils.numeral.in_words(5), u"пять") 284 self.assertEquals(pytils.numeral.in_words(102), u"сто два") 285 self.assertEquals(pytils.numeral.in_words(3521), 286 u"три тысячи пятьсот двадцать один") 287 self.assertEquals(pytils.numeral.in_words(3500), 288 u"три тысячи пятьсот") 289 self.assertEquals(pytils.numeral.in_words(5231000), 290 u"пять миллионов двести тридцать одна тысяча") 291 self.assertEquals(pytils.numeral.in_words(10.0), 292 u"десять целых ноль десятых") 293 self.assertEquals(pytils.numeral.in_words(2.25), 294 u"две целых двадцать пять сотых") 295 self.assertEquals(pytils.numeral.in_words(0.01), 296 u"ноль целых одна сотая") 297 self.assertEquals(pytils.numeral.in_words(0.10), 298 u"ноль целых одна десятая") 299 self.assertEquals(pytils.numeral.in_words(10l), u"десять")
300
301 - def testCommonExceptions(self):
302 """ 303 Unit-test for testing in_words' exceptions 304 """ 305 self.assertRaises(TypeError, pytils.numeral.in_words, "0.2") 306 self.assertRaises(TypeError, pytils.numeral.in_words, 0.2, "1") 307 self.assertRaises(ValueError, pytils.numeral.in_words, 0.2, 5) 308 self.assertRaises(ValueError, pytils.numeral.in_words, -2)
309 310
311 -class SumStringTestCase(unittest.TestCase):
312 """ 313 Test case for pytils.numeral.sum_string 314 """ 315
316 - def setUp(self):
317 """ 318 Setting up environment for tests 319 """ 320 self.variants_male = (u"гвоздь", u"гвоздя", u"гвоздей") 321 self.variants_female = (u"шляпка", u"шляпки", u"шляпок")
322
323 - def ckMaleOldStyle(self, amount, estimated):
324 """ 325 Checks sum_string with male gender with old-style genders (i.e. ints) 326 """ 327 self.assertEquals(pytils.numeral.sum_string(amount, 328 1, 329 self.variants_male), 330 estimated)
331
332 - def ckMale(self, amount, estimated):
333 """ 334 Checks sum_string with male gender 335 """ 336 self.assertEquals(pytils.numeral.sum_string(amount, 337 pytils.numeral.MALE, 338 self.variants_male), 339 estimated)
340 341
342 - def ckFemaleOldStyle(self, amount, estimated):
343 """ 344 Checks sum_string with female gender wuth old-style genders (i.e. ints) 345 """ 346 self.assertEquals(pytils.numeral.sum_string(amount, 347 2, 348 self.variants_female), 349 estimated)
350
351 - def ckFemale(self, amount, estimated):
352 """ 353 Checks sum_string with female gender 354 """ 355 self.assertEquals(pytils.numeral.sum_string(amount, 356 pytils.numeral.FEMALE, 357 self.variants_female), 358 estimated)
359
361 """ 362 Unit-test for sum_string with old-style genders 363 """ 364 self.ckMaleOldStyle(10, u"десять гвоздей") 365 self.ckMaleOldStyle(2, u"два гвоздя") 366 self.ckMaleOldStyle(31, u"тридцать один гвоздь") 367 self.ckFemaleOldStyle(10, u"десять шляпок") 368 self.ckFemaleOldStyle(2, u"две шляпки") 369 self.ckFemaleOldStyle(31, u"тридцать одна шляпка") 370 371 self.ckFemaleOldStyle(31l, u"тридцать одна шляпка") 372 373 self.assertEquals(u"одиннадцать негритят", 374 pytils.numeral.sum_string( 375 11, 376 1, 377 u"негритенок,негритенка,негритят" 378 ))
379
380 - def testSumString(self):
381 """ 382 Unit-test for sum_string 383 """ 384 self.ckMale(10, u"десять гвоздей") 385 self.ckMale(2, u"два гвоздя") 386 self.ckMale(31, u"тридцать один гвоздь") 387 self.ckFemale(10, u"десять шляпок") 388 self.ckFemale(2, u"две шляпки") 389 self.ckFemale(31, u"тридцать одна шляпка") 390 391 self.ckFemale(31l, u"тридцать одна шляпка") 392 393 self.assertEquals(u"одиннадцать негритят", 394 pytils.numeral.sum_string( 395 11, 396 pytils.numeral.MALE, 397 u"негритенок,негритенка,негритят" 398 ))
399
400 - def testSumStringExceptions(self):
401 """ 402 Unit-test for testing sum_string's exceptions 403 """ 404 self.assertRaises(TypeError, pytils.numeral.sum_string, 405 "1", 1) 406 self.assertRaises(TypeError, pytils.numeral.sum_string, 407 1, "1") 408 self.assertRaises(TypeError, pytils.numeral.sum_string, 409 1, "1", 23) 410 self.assertRaises(TypeError, pytils.numeral.sum_string, 411 1, pytils.numeral.MALE, (23,24,25)) 412 self.assertRaises(ValueError, pytils.numeral.sum_string, 413 1, pytils.numeral.MALE, (23,)) 414 self.assertRaises(ValueError, pytils.numeral.sum_string, 415 -1, pytils.numeral.MALE, u"any,bene,raba")
416 417 if __name__ == '__main__': 418 unittest.main() 419