Skip to content

Commit

Permalink
Implement "Fraction.is_integer()", following python/cpython#100488
Browse files Browse the repository at this point in the history
  • Loading branch information
scoder committed Jan 25, 2023
1 parent 3d12e40 commit f10e073
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/quicktions.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,10 @@ cdef class Fraction:
else:
return cls(digits, pow10(-exp))

def is_integer(self):
"""Return True if the Fraction is an integer."""
return self._denominator == 1

def as_integer_ratio(self):
"""Return the integer ratio as a tuple.
Expand Down
13 changes: 13 additions & 0 deletions src/test_fractions.py
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,19 @@ def testFromDecimal(self):
ValueError, "Cannot convert sNaN to Fraction.",
F.from_decimal, Decimal("snan"))

def test_is_integer(self):
self.assertTrue(F(1, 1).is_integer())
self.assertTrue(F(-1, 1).is_integer())
self.assertTrue(F(1, -1).is_integer())
self.assertTrue(F(2, 2).is_integer())
self.assertTrue(F(-2, 2).is_integer())
self.assertTrue(F(2, -2).is_integer())

self.assertFalse(F(1, 2).is_integer())
self.assertFalse(F(-1, 2).is_integer())
self.assertFalse(F(1, -2).is_integer())
self.assertFalse(F(-1, -2).is_integer())

def test_as_integer_ratio(self):
self.assertEqual(F(4, 6).as_integer_ratio(), (2, 3))
self.assertEqual(F(-4, 6).as_integer_ratio(), (-2, 3))
Expand Down

0 comments on commit f10e073

Please sign in to comment.