(self)
| 394 | self.assertRaises(TypeError, F.from_number, B()) |
| 395 | |
| 396 | def testFromString(self): |
| 397 | self.assertEqual((5, 1), _components(F("5"))) |
| 398 | self.assertEqual((5, 1), _components(F("005"))) |
| 399 | self.assertEqual((3, 2), _components(F("3/2"))) |
| 400 | self.assertEqual((3, 2), _components(F("3 / 2"))) |
| 401 | self.assertEqual((3, 2), _components(F(" \n +3/2"))) |
| 402 | self.assertEqual((-3, 2), _components(F("-3/2 "))) |
| 403 | self.assertEqual((13, 2), _components(F(" 0013/002 \n "))) |
| 404 | self.assertEqual((16, 5), _components(F(" 3.2 "))) |
| 405 | self.assertEqual((16, 5), _components(F("003.2"))) |
| 406 | self.assertEqual((-16, 5), _components(F(" -3.2 "))) |
| 407 | self.assertEqual((-3, 1), _components(F(" -3. "))) |
| 408 | self.assertEqual((3, 5), _components(F(" .6 "))) |
| 409 | self.assertEqual((1, 3125), _components(F("32.e-5"))) |
| 410 | self.assertEqual((1000000, 1), _components(F("1E+06"))) |
| 411 | self.assertEqual((-12300, 1), _components(F("-1.23e4"))) |
| 412 | self.assertEqual((0, 1), _components(F(" .0e+0\t"))) |
| 413 | self.assertEqual((0, 1), _components(F("-0.000e0"))) |
| 414 | self.assertEqual((123, 1), _components(F("1_2_3"))) |
| 415 | self.assertEqual((41, 107), _components(F("1_2_3/3_2_1"))) |
| 416 | self.assertEqual((6283, 2000), _components(F("3.14_15"))) |
| 417 | self.assertEqual((6283, 2*10**13), _components(F("3.14_15e-1_0"))) |
| 418 | self.assertEqual((101, 100), _components(F("1.01"))) |
| 419 | self.assertEqual((101, 100), _components(F("1.0_1"))) |
| 420 | |
| 421 | self.assertRaisesMessage( |
| 422 | ZeroDivisionError, "Fraction(3, 0)", |
| 423 | F, "3/0") |
| 424 | |
| 425 | def check_invalid(s): |
| 426 | msg = "Invalid literal for Fraction: " + repr(s) |
| 427 | self.assertRaisesMessage(ValueError, msg, F, s) |
| 428 | |
| 429 | check_invalid("3/") |
| 430 | check_invalid("/2") |
| 431 | # Denominators don't need a sign. |
| 432 | check_invalid("3/+2") |
| 433 | check_invalid("3/-2") |
| 434 | # Imitate float's parsing. |
| 435 | check_invalid("+ 3/2") |
| 436 | check_invalid("- 3/2") |
| 437 | # Avoid treating '.' as a regex special character. |
| 438 | check_invalid("3a2") |
| 439 | # Don't accept combinations of decimals and rationals. |
| 440 | check_invalid("3/7.2") |
| 441 | check_invalid("3.2/7") |
| 442 | # No space around dot. |
| 443 | check_invalid("3 .2") |
| 444 | check_invalid("3. 2") |
| 445 | # No space around e. |
| 446 | check_invalid("3.2 e1") |
| 447 | check_invalid("3.2e 1") |
| 448 | # Fractional part don't need a sign. |
| 449 | check_invalid("3.+2") |
| 450 | check_invalid("3.-2") |
| 451 | # Only accept base 10. |
| 452 | check_invalid("0x10") |
| 453 | check_invalid("0x10/1") |
nothing calls this directly
no test coverage detected