diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index 59fa3eb..1967c48 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -6,6 +6,11 @@
 import unittest
 import os
 
+try:
+    import _testcapi
+except ImportError:
+    _testcapi = None
+
 class IntTestCase(unittest.TestCase):
     def test_ints(self):
         # Test the full range of Python ints.
@@ -316,6 +321,65 @@
         self.check_unmarshallable(bytearray(size))
 
 
+@test_support.cpython_only
+@unittest.skipUnless(_testcapi, 'requires _testcapi')
+class CAPI_TestCase(unittest.TestCase):
+
+    def test_write_long_to_file(self):
+        for v in range(marshal.version + 1):
+            _testcapi.pymarshal_write_long_to_file(0x12345678, test_support.TESTFN, v)
+            with open(test_support.TESTFN, 'rb') as f:
+                data = f.read()
+            test_support.unlink(test_support.TESTFN)
+            self.assertEqual(data, b'\x78\x56\x34\x12')
+
+    def test_write_object_to_file(self):
+        obj = ('\u20ac', b'abc', 123, 45.6, 7+8j, 'long line '*1000)
+        for v in range(marshal.version + 1):
+            _testcapi.pymarshal_write_object_to_file(obj, test_support.TESTFN, v)
+            with open(test_support.TESTFN, 'rb') as f:
+                data = f.read()
+            test_support.unlink(test_support.TESTFN)
+            self.assertEqual(marshal.loads(data), obj)
+
+    def test_read_short_from_file(self):
+        with open(test_support.TESTFN, 'wb') as f:
+            f.write(b'\x34\x12xxxx')
+        r, p = _testcapi.pymarshal_read_short_from_file(test_support.TESTFN)
+        test_support.unlink(test_support.TESTFN)
+        self.assertEqual(r, 0x1234)
+        self.assertEqual(p, 2)
+
+    def test_read_long_from_file(self):
+        with open(test_support.TESTFN, 'wb') as f:
+            f.write(b'\x78\x56\x34\x12xxxx')
+        r, p = _testcapi.pymarshal_read_long_from_file(test_support.TESTFN)
+        test_support.unlink(test_support.TESTFN)
+        self.assertEqual(r, 0x12345678)
+        self.assertEqual(p, 4)
+
+    def test_read_last_object_from_file(self):
+        obj = ('\u20ac', b'abc', 123, 45.6, 7+8j)
+        for v in range(marshal.version + 1):
+            data = marshal.dumps(obj, v)
+            with open(test_support.TESTFN, 'wb') as f:
+                f.write(data + b'xxxx')
+            r, p = _testcapi.pymarshal_read_last_object_from_file(test_support.TESTFN)
+            test_support.unlink(test_support.TESTFN)
+            self.assertEqual(r, obj)
+
+    def test_read_object_from_file(self):
+        obj = ('\u20ac', b'abc', 123, 45.6, 7+8j)
+        for v in range(marshal.version + 1):
+            data = marshal.dumps(obj, v)
+            with open(test_support.TESTFN, 'wb') as f:
+                f.write(data + b'xxxx')
+            r, p = _testcapi.pymarshal_read_object_from_file(test_support.TESTFN)
+            test_support.unlink(test_support.TESTFN)
+            self.assertEqual(r, obj)
+            self.assertEqual(p, len(data))
+
+
 def test_main():
     test_support.run_unittest(IntTestCase,
                               FloatTestCase,
@@ -325,6 +389,7 @@
                               ExceptionTestCase,
                               BugsTestCase,
                               LargeValuesTestCase,
+                              CAPI_TestCase,
                              )
 
 if __name__ == "__main__":
