Backport fast alternate io.BytesIO implementation.
Merged r62778, r62779, r62802, r62806, r62807, r62808, r62809, r62844,
r62846, r62952, r62956.
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index e193834..b93ce02 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -97,7 +97,7 @@
         self.assertEqual(f.seek(-1, 2), 13)
         self.assertEqual(f.tell(), 13)
         self.assertEqual(f.truncate(12), 12)
-        self.assertEqual(f.tell(), 13)
+        self.assertEqual(f.tell(), 12)
         self.assertRaises(TypeError, f.seek, 0.0)
 
     def read_ops(self, f, buffered=False):
@@ -142,7 +142,7 @@
         self.assertEqual(f.tell(), self.LARGE + 2)
         self.assertEqual(f.seek(0, 2), self.LARGE + 2)
         self.assertEqual(f.truncate(self.LARGE + 1), self.LARGE + 1)
-        self.assertEqual(f.tell(), self.LARGE + 2)
+        self.assertEqual(f.tell(), self.LARGE + 1)
         self.assertEqual(f.seek(0, 2), self.LARGE + 1)
         self.assertEqual(f.seek(-1, 2), self.LARGE)
         self.assertEqual(f.read(2), b"x")
@@ -726,6 +726,7 @@
             txt.write("BB\nCCC\n")
             txt.write("X\rY\r\nZ")
             txt.flush()
+            self.assertEquals(buf.closed, False)
             self.assertEquals(buf.getvalue(), expected)
 
     def testNewlines(self):
@@ -806,7 +807,8 @@
                 txt = io.TextIOWrapper(buf, encoding="ascii", newline=newline)
                 txt.write(data)
                 txt.close()
-                self.assertEquals(buf.getvalue(), expected)
+                self.assertEquals(buf.closed, True)
+                self.assertRaises(ValueError, buf.getvalue)
         finally:
             os.linesep = save_linesep