contrib/python-zstandard/tests/test_cffi.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sun, 20 Nov 2016 16:56:21 -0800
changeset 30461 d195fa651b51
parent 30435 b86a448a2965
permissions -rw-r--r--
bdiff: don't check border condition in loop This is pretty much a copy of d500ddae7494, just to a different loop. The condition `p == plast` (`plast == a + len - 1`) was only true on the final iteration of the loop. So it was wasteful to check for it on every iteration. We decrease the iteration count by 1 and add an explicit check for `p == plast` after the loop. Again, we see modest wins. From the mozilla-unified repository: $ perfbdiff -m 3041e4d59df2 ! wall 0.035502 comb 0.040000 user 0.040000 sys 0.000000 (best of 100) ! wall 0.030480 comb 0.030000 user 0.030000 sys 0.000000 (best of 100) $ perfbdiff 0e9928989e9c --alldata --count 100 ! wall 4.097394 comb 4.100000 user 4.100000 sys 0.000000 (best of 3) ! wall 3.597798 comb 3.600000 user 3.600000 sys 0.000000 (best of 3) The 2nd example throws a total of ~3.3GB of data at bdiff. This change increases the throughput from ~811 MB/s to ~924 MB/s.

import io

try:
    import unittest2 as unittest
except ImportError:
    import unittest

import zstd

try:
    import zstd_cffi
except ImportError:
    raise unittest.SkipTest('cffi version of zstd not available')


class TestCFFIWriteToToCDecompressor(unittest.TestCase):
    def test_simple(self):
        orig = io.BytesIO()
        orig.write(b'foo')
        orig.write(b'bar')
        orig.write(b'foobar' * 16384)

        dest = io.BytesIO()
        cctx = zstd_cffi.ZstdCompressor()
        with cctx.write_to(dest) as compressor:
            compressor.write(orig.getvalue())

        uncompressed = io.BytesIO()
        dctx = zstd.ZstdDecompressor()
        with dctx.write_to(uncompressed) as decompressor:
            decompressor.write(dest.getvalue())

        self.assertEqual(uncompressed.getvalue(), orig.getvalue())