Issue #8294: Allow float and Decimal arguments in Fraction constructor.
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index a24fcd3..7f0c428 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -12,6 +12,11 @@
F = fractions.Fraction
gcd = fractions.gcd
+# decorator for skipping tests on non-IEEE 754 platforms
+requires_IEEE_754 = unittest.skipUnless(
+ float.__getformat__("double").startswith("IEEE"),
+ "test requires IEEE 754 doubles")
+
class DummyFloat(object):
"""Dummy float class for testing comparisons with Fractions"""
@@ -137,13 +142,33 @@
self.assertRaisesMessage(ZeroDivisionError, "Fraction(12, 0)",
F, 12, 0)
- self.assertRaises(TypeError, F, 1.5)
self.assertRaises(TypeError, F, 1.5 + 3j)
self.assertRaises(TypeError, F, "3/2", 3)
self.assertRaises(TypeError, F, 3, 0j)
self.assertRaises(TypeError, F, 3, 1j)
+ @requires_IEEE_754
+ def testInitFromFloat(self):
+ self.assertEquals((5, 2), _components(F(2.5)))
+ self.assertEquals((0, 1), _components(F(-0.0)))
+ self.assertEquals((3602879701896397, 36028797018963968),
+ _components(F(0.1)))
+ self.assertRaises(TypeError, F, float('nan'))
+ self.assertRaises(TypeError, F, float('inf'))
+ self.assertRaises(TypeError, F, float('-inf'))
+
+ def testInitFromDecimal(self):
+ self.assertEquals((11, 10),
+ _components(F(Decimal('1.1'))))
+ self.assertEquals((7, 200),
+ _components(F(Decimal('3.5e-2'))))
+ self.assertEquals((0, 1),
+ _components(F(Decimal('.000e20'))))
+ self.assertRaises(TypeError, F, Decimal('nan'))
+ self.assertRaises(TypeError, F, Decimal('snan'))
+ self.assertRaises(TypeError, F, Decimal('inf'))
+ self.assertRaises(TypeError, F, Decimal('-inf'))
def testFromString(self):
self.assertEquals((5, 1), _components(F("5")))