diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 4ad0061..1f8df38 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -131,22 +131,28 @@
         assert sys.path[0] == self.directory, 'Missing path'
         del sys.path[0]
 
-    def test_pep3147_paths(self):
-        # Ensure that the default behavior of compileall's CLI is to create
-        # PEP 3147 pyc/pyo files.
-        retcode = subprocess.call(
-            (sys.executable, '-m', 'compileall', '-q', self.pkgdir))
-        self.assertEqual(retcode, 0)
-        # Verify the __pycache__ directory contents.
-        cachedir = os.path.join(self.pkgdir, '__pycache__')
-        self.assertTrue(os.path.exists(cachedir))
-        ext = ('pyc' if __debug__ else 'pyo')
-        expected = sorted(base.format(imp.get_tag(), ext) for base in
-                          ('__init__.{}.{}', 'bar.{}.{}'))
-        self.assertEqual(sorted(os.listdir(cachedir)), expected)
-        # Make sure there are no .pyc files in the source directory.
-        self.assertFalse([pyc_file for pyc_file in os.listdir(self.pkgdir)
-                          if pyc_file.endswith(ext)])
+    # Ensure that the default behavior of compileall's CLI is to create
+    # PEP 3147 pyc/pyo files.
+    for name, ext, switch in [
+        ('normal', 'pyc', []),
+        ('optimize', 'pyo', ['-O']),
+        ('doubleoptimize', 'pyo', ['-OO'])
+    ]:
+        def f(self, ext=ext, switch=switch):
+            retcode = subprocess.call(
+                [sys.executable] + switch +
+                ['-m', 'compileall', '-q', self.pkgdir])
+            self.assertEqual(retcode, 0)
+            # Verify the __pycache__ directory contents.
+            cachedir = os.path.join(self.pkgdir, '__pycache__')
+            self.assertTrue(os.path.exists(cachedir))
+            expected = sorted(base.format(imp.get_tag(), ext) for base in
+                              ('__init__.{}.{}', 'bar.{}.{}'))
+            self.assertEqual(sorted(os.listdir(cachedir)), expected)
+            # Make sure there are no .pyc files in the source directory.
+            self.assertFalse([pyc_file for pyc_file in os.listdir(self.pkgdir)
+                              if pyc_file.endswith(ext)])
+        locals()['test_pep3147_paths_' + name] = f
 
     def test_legacy_paths(self):
         # Ensure that with the proper switch, compileall leaves legacy
@@ -157,10 +163,7 @@
         # Verify the __pycache__ directory contents.
         cachedir = os.path.join(self.pkgdir, '__pycache__')
         self.assertFalse(os.path.exists(cachedir))
-        ext = ('pyc' if __debug__ else 'pyo')
-        expected = [base.format(ext) for base in ('__init__.{}', 'bar.{}')]
-        expected.extend(['__init__.py', 'bar.py'])
-        expected.sort()
+        expected = sorted(['__init__.py', '__init__.pyc', 'bar.py', 'bar.pyc'])
         self.assertEqual(sorted(os.listdir(self.pkgdir)), expected)
 
     def test_multiple_runs(self):
