| Index: third_party/pexpect/tests/test_performance.py
|
| diff --git a/third_party/pexpect/tests/test_performance.py b/third_party/pexpect/tests/test_performance.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7be0cf65927e3ff872bfac258f917039db36caa8
|
| --- /dev/null
|
| +++ b/third_party/pexpect/tests/test_performance.py
|
| @@ -0,0 +1,107 @@
|
| +#!/usr/bin/env python
|
| +'''
|
| +PEXPECT LICENSE
|
| +
|
| + This license is approved by the OSI and FSF as GPL-compatible.
|
| + http://opensource.org/licenses/isc-license.txt
|
| +
|
| + Copyright (c) 2012, Noah Spurrier <noah@noah.org>
|
| + PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
|
| + PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
|
| + COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
|
| + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
| + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
| + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
| + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
| + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
| + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
| + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
| +
|
| +'''
|
| +from __future__ import print_function
|
| +
|
| +import unittest, time, sys
|
| +import platform
|
| +import pexpect
|
| +from . import PexpectTestCase
|
| +
|
| +# This isn't exactly a unit test, but it fits in nicely with the rest of the tests.
|
| +
|
| +class PerformanceTestCase (PexpectTestCase.PexpectTestCase):
|
| +
|
| + '''Testing the performance of expect, with emphasis on wading through long
|
| + inputs. '''
|
| +
|
| + if sys.version_info[0] >= 3:
|
| + @staticmethod
|
| + def _iter_n(n):
|
| + s = 'for n in range(1, %d+1): print(n)' % n
|
| + return s.encode('ascii')
|
| +
|
| + else:
|
| + @staticmethod
|
| + def _iter_n(n):
|
| + return 'for n in range(1, %d+1): print(n)' % n
|
| +
|
| + def plain_range(self, n):
|
| + e = pexpect.spawn('python', timeout=100)
|
| + self.assertEqual(e.expect(b'>>>'), 0)
|
| + e.sendline(self._iter_n(n))
|
| + self.assertEqual(e.expect(br'\.{3}'), 0)
|
| + e.sendline(b'')
|
| + self.assertEqual(e.expect([b'inquisition', '%d' % n]), 1)
|
| +
|
| + def window_range(self, n):
|
| + e = pexpect.spawn('python', timeout=100)
|
| + self.assertEqual(e.expect(b'>>>'), 0)
|
| + e.sendline(self._iter_n(n))
|
| + self.assertEqual(e.expect(r'\.{3}'), 0)
|
| + e.sendline(b'')
|
| + self.assertEqual(e.expect([b'inquisition', '%d' % n], searchwindowsize=20), 1)
|
| +
|
| + def exact_range(self, n):
|
| + e = pexpect.spawn('python', timeout=100)
|
| + self.assertEqual(e.expect_exact([b'>>>']), 0)
|
| + e.sendline(self._iter_n(n))
|
| + self.assertEqual(e.expect_exact([b'...']), 0)
|
| + e.sendline(b'')
|
| + self.assertEqual(e.expect_exact([b'inquisition', '%d' % n],timeout=520), 1)
|
| +
|
| + def ewin_range(self, n):
|
| + e = pexpect.spawn('python', timeout=100)
|
| + self.assertEqual(e.expect_exact([b'>>>']), 0)
|
| + e.sendline(self._iter_n(n))
|
| + self.assertEqual(e.expect_exact([b'...']), 0)
|
| + e.sendline(b'')
|
| + self.assertEqual(e.expect_exact([b'inquisition', '%d' % n], searchwindowsize=20), 1)
|
| +
|
| + def faster_range(self, n):
|
| + e = pexpect.spawn('python', timeout=100)
|
| + self.assertEqual(e.expect(b'>>>'), 0)
|
| + e.sendline(('list(range(1, %d+1))' % n).encode('ascii'))
|
| + self.assertEqual(e.expect([b'inquisition', '%d' % n]), 1)
|
| +
|
| + def test_100000(self):
|
| + if platform.python_implementation() == 'PyPy':
|
| + raise unittest.SkipTest("This test fails on PyPy because of REPL differences")
|
| + print()
|
| + start_time = time.time()
|
| + self.plain_range (100000)
|
| + print("100000 calls to plain_range:", (time.time() - start_time))
|
| + start_time = time.time()
|
| + self.window_range(100000)
|
| + print("100000 calls to window_range:", (time.time() - start_time))
|
| + start_time = time.time()
|
| + self.exact_range (100000)
|
| + print("100000 calls to exact_range:", (time.time() - start_time))
|
| + start_time = time.time()
|
| + self.ewin_range (100000)
|
| + print("100000 calls to ewin_range:", (time.time() - start_time))
|
| + start_time = time.time()
|
| + self.faster_range(100000)
|
| + print("100000 calls to faster_range:", (time.time() - start_time))
|
| +
|
| +if __name__ == "__main__":
|
| + unittest.main()
|
| +
|
| +suite = unittest.makeSuite(PerformanceTestCase,'test')
|
|
|