diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index a7da809..e485fdd 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -621,7 +621,7 @@
 
     def test_bug1601501(self):
         # SF bug #1601501: check that the codec works with a buffer
-        str(b"\xef\xbb\xbf", "utf-8-sig")
+        self.assertEquals(str(b"\xef\xbb\xbf", "utf-8-sig"), "")
 
     def test_bom(self):
         d = codecs.getincrementaldecoder("utf-8-sig")()
diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py
index b3d478d..dca48b1 100644
--- a/Lib/test/test_memoryview.py
+++ b/Lib/test/test_memoryview.py
@@ -5,8 +5,166 @@
 
 import unittest
 import test.support
+import sys
 
-class MemoryviewTest(unittest.TestCase):
+
+class CommonMemoryTests:
+    #
+    # Tests common to direct memoryviews and sliced memoryviews
+    #
+
+    base_object = b"abcdef"
+
+    def check_getitem_with_type(self, tp):
+        b = tp(self.base_object)
+        oldrefcount = sys.getrefcount(b)
+        m = self._view(b)
+        self.assertEquals(m[0], b"a")
+        self.assert_(isinstance(m[0], bytes), type(m[0]))
+        self.assertEquals(m[5], b"f")
+        self.assertEquals(m[-1], b"f")
+        self.assertEquals(m[-6], b"a")
+        # Bounds checking
+        self.assertRaises(IndexError, lambda: m[6])
+        self.assertRaises(IndexError, lambda: m[-7])
+        self.assertRaises(IndexError, lambda: m[sys.maxsize])
+        self.assertRaises(IndexError, lambda: m[-sys.maxsize])
+        # Type checking
+        self.assertRaises(TypeError, lambda: m[None])
+        self.assertRaises(TypeError, lambda: m[0.0])
+        self.assertRaises(TypeError, lambda: m["a"])
+        m = None
+        self.assertEquals(sys.getrefcount(b), oldrefcount)
+
+    def test_getitem_readonly(self):
+        self.check_getitem_with_type(bytes)
+
+    def test_getitem_writable(self):
+        self.check_getitem_with_type(bytearray)
+
+    def test_setitem_readonly(self):
+        b = self.base_object
+        oldrefcount = sys.getrefcount(b)
+        m = self._view(b)
+        def setitem(value):
+            m[0] = value
+        self.assertRaises(TypeError, setitem, b"a")
+        self.assertRaises(TypeError, setitem, 65)
+        self.assertRaises(TypeError, setitem, memoryview(b"a"))
+        m = None
+        self.assertEquals(sys.getrefcount(b), oldrefcount)
+
+    def test_setitem_writable(self):
+        b = bytearray(self.base_object)
+        oldrefcount = sys.getrefcount(b)
+        m = self._view(b)
+        m[0] = b"0"
+        self._check_contents(b, b"0bcdef")
+        m[1:3] = b"12"
+        self._check_contents(b, b"012def")
+        m[1:1] = b""
+        self._check_contents(b, b"012def")
+        m[:] = b"abcdef"
+        self._check_contents(b, b"abcdef")
+
+        # Overlapping copies of a view into itself
+        m[0:3] = m[2:5]
+        self._check_contents(b, b"cdedef")
+        m[:] = b"abcdef"
+        m[2:5] = m[0:3]
+        self._check_contents(b, b"ababcf")
+
+        def setitem(key, value):
+            m[key] = value
+        # Bounds checking
+        self.assertRaises(IndexError, setitem, 6, b"a")
+        self.assertRaises(IndexError, setitem, -7, b"a")
+        self.assertRaises(IndexError, setitem, sys.maxsize, b"a")
+        self.assertRaises(IndexError, setitem, -sys.maxsize, b"a")
+        # Wrong index/slice types
+        self.assertRaises(TypeError, setitem, 0.0, b"a")
+        self.assertRaises(TypeError, setitem, (0,), b"a")
+        self.assertRaises(TypeError, setitem, "a", b"a")
+        # Trying to resize the memory object
+        self.assertRaises(ValueError, setitem, 0, b"")
+        self.assertRaises(ValueError, setitem, 0, b"ab")
+        self.assertRaises(ValueError, setitem, slice(1,1), b"a")
+        self.assertRaises(ValueError, setitem, slice(0,2), b"a")
+
+        m = None
+        self.assertEquals(sys.getrefcount(b), oldrefcount)
+
+    def test_len(self):
+        self.assertEquals(len(self._view(self.base_object)), 6)
+
+    def test_tobytes(self):
+        m = self._view(self.base_object)
+        b = m.tobytes()
+        self.assertEquals(b, b"abcdef")
+        self.assert_(isinstance(b, bytes), type(b))
+
+    def test_tolist(self):
+        m = self._view(self.base_object)
+        l = m.tolist()
+        self.assertEquals(l, list(b"abcdef"))
+
+    def test_compare(self):
+        # memoryviews can compare for equality with other objects
+        # having the buffer interface.
+        m = self._view(self.base_object)
+        for tp in (bytes, bytearray):
+            self.assertTrue(m == tp(b"abcdef"))
+            self.assertFalse(m != tp(b"abcdef"))
+            self.assertFalse(m == tp(b"abcde"))
+            self.assertTrue(m != tp(b"abcde"))
+            self.assertFalse(m == tp(b"abcde1"))
+            self.assertTrue(m != tp(b"abcde1"))
+        self.assertTrue(m == m)
+        self.assertTrue(m == m[:])
+        self.assertTrue(m[0:6] == m[:])
+        self.assertFalse(m[0:5] == m)
+
+        # Comparison with objects which don't support the buffer API
+        self.assertFalse(m == "abc")
+        self.assertTrue(m != "abc")
+        self.assertFalse("abc" == m)
+        self.assertTrue("abc" != m)
+
+        # Unordered comparisons
+        for c in (m, b"abcdef"):
+            self.assertRaises(TypeError, lambda: m < c)
+            self.assertRaises(TypeError, lambda: c <= m)
+            self.assertRaises(TypeError, lambda: m >= c)
+            self.assertRaises(TypeError, lambda: c > m)
+
+    def check_attributes_with_type(self, tp):
+        b = tp(self.base_object)
+        m = self._view(b)
+        self.assertEquals(m.format, 'B')
+        self.assertEquals(m.itemsize, 1)
+        self.assertEquals(m.ndim, 1)
+        self.assertEquals(m.shape, (6,))
+        self.assertEquals(m.size, 6)
+        self.assertEquals(m.strides, (1,))
+        self.assertEquals(m.suboffsets, None)
+        return m
+
+    def test_attributes_readonly(self):
+        m = self.check_attributes_with_type(bytes)
+        self.assertEquals(m.readonly, True)
+
+    def test_attributes_writable(self):
+        m = self.check_attributes_with_type(bytearray)
+        self.assertEquals(m.readonly, False)
+
+
+class MemoryviewTest(unittest.TestCase, CommonMemoryTests):
+
+    def _view(self, obj):
+        return memoryview(obj)
+
+    def _check_contents(self, obj, contents):
+        self.assertEquals(obj, contents)
 
     def test_constructor(self):
         ob = b'test'
@@ -17,8 +175,38 @@
         self.assertRaises(TypeError, memoryview, argument=ob)
         self.assertRaises(TypeError, memoryview, ob, argument=True)
 
+
+class MemorySliceTest(unittest.TestCase, CommonMemoryTests):
+    base_object = b"XabcdefY"
+
+    def _view(self, obj):
+        m = memoryview(obj)
+        return m[1:7]
+
+    def _check_contents(self, obj, contents):
+        self.assertEquals(obj[1:7], contents)
+
+    def test_refs(self):
+        m = memoryview(b"ab")
+        oldrefcount = sys.getrefcount(m)
+        m[1:2]
+        self.assertEquals(sys.getrefcount(m), oldrefcount)
+
+
+class MemorySliceSliceTest(unittest.TestCase, CommonMemoryTests):
+    base_object = b"XabcdefY"
+
+    def _view(self, obj):
+        m = memoryview(obj)
+        return m[:7][1:]
+
+    def _check_contents(self, obj, contents):
+        self.assertEquals(obj[1:7], contents)
+
+
 def test_main():
-    test.support.run_unittest(MemoryviewTest)
+    test.support.run_unittest(
+        MemoryviewTest, MemorySliceTest, MemorySliceSliceTest)
 
 
 if __name__ == "__main__":
