Objects that compare equal automatically pass or fail assertAlmostEqual and assertNotAlmostEqual tests on unittest.TestCase. Issue 6567.
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index a2d4478..61c4308 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -733,6 +733,9 @@
       compare equal, the test will fail with the explanation given by *msg*, or
       :const:`None`.
 
+      .. versionchanged:: 2.7
+         Objects that compare equal are automatically almost equal.
+
       .. deprecated:: 2.7
          :meth:`failUnlessAlmostEqual`.
 
@@ -749,6 +752,9 @@
       compare equal, the test will fail with the explanation given by *msg*, or
       :const:`None`.
 
+      .. versionchanged:: 2.7
+         Objects that compare equal automatically fail.
+
       .. deprecated:: 2.7
          :meth:`failIfAlmostEqual`.
 
diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst
index 9a3b3e6..6089d33 100644
--- a/Doc/whatsnew/2.7.rst
+++ b/Doc/whatsnew/2.7.rst
@@ -505,6 +505,10 @@
     differences.  :meth:`assertDictContainsSubset` checks whether
     all of the key/value pairs in *first* are found in *second*.
 
+  * :meth:`assertAlmostEqual` and :meth:`assertNotAlmostEqual` short-circuit
+    (automatically pass or fail without checking decimal places) if the objects
+    are equal.
+
   * A new hook, :meth:`addTypeEqualityFunc` takes a type object and a
     function.  The :meth:`assertEqual` method will use the function
     when both of the objects being compared are of the specified type.
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py
index 5c3921d..2fab7de 100644
--- a/Lib/test/test_unittest.py
+++ b/Lib/test/test_unittest.py
@@ -2989,6 +2989,11 @@
         self.assertRaises(self.failureException,
                           self.assertNotAlmostEqual, 0, .1+.1j, places=0)
 
+        self.assertAlmostEqual(float('inf'), float('inf'))
+        self.assertRaises(self.failureException, self.assertNotAlmostEqual,
+                          float('inf'), float('inf'))
+
+
     def test_assertRaises(self):
         def _raise(e):
             raise e
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index d52bc8d..cac2842 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -457,7 +457,13 @@
 
            Note that decimal places (from zero) are usually not the same
            as significant digits (measured from the most signficant digit).
+
+           If the two objects compare equal then they will automatically
+           compare almost equal.
         """
+        if first == second:
+            # shortcut for ite
+            return
         if round(abs(second-first), places) != 0:
             standardMsg = '%r != %r within %r places' % (first, second, places)
             msg = self._formatMessage(msg, standardMsg)
@@ -470,8 +476,10 @@
 
            Note that decimal places (from zero) are usually not the same
            as significant digits (measured from the most signficant digit).
+
+           Objects that are equal automatically fail.
         """
-        if round(abs(second-first), places) == 0:
+        if (first == second) or round(abs(second-first), places) == 0:
             standardMsg = '%r == %r within %r places' % (first, second, places)
             msg = self._formatMessage(msg, standardMsg)
             raise self.failureException(msg)