def test_scheme_serialization_basic():
    preload, test_input = map(_stable_json_dump, [
        {'a': 123, 'b': 44, 'c': 92},
        {'a': 42, 'b': 44, 'c': 91},
    ])
    scheme = ZlibPlcdScheme('x_v1', preload)

    scheme_reconstructed = ZlibPlcdScheme.from_json_description_dict(
        scheme.json_description_dict()
    )

    assert len(scheme.compress(test_input)) == 20
    assert scheme_reconstructed.compress(test_input) == scheme.compress(test_input)
def test_compression_is_better_basic():
    """Checks that PLCD is better than nothing or vanilla
    zlib for a basic input case.
    """
    preload, test_input = map(_stable_json_dump, [
        {'a': 123, 'b': 44, 'c': 92},
        {'a': 42, 'b': 44, 'c': 91},
    ])
    scheme = ZlibPlcdScheme('x_v1', preload)

    assert len(test_input) == 27
    assert len(zlib.compress(test_input)) == 30
    assert len(scheme.compress(test_input)) == 20
def test_raises_if_bad_tag():
    """Check that assertions are raised if compressed data isn't tagged."""
    scheme = ZlibPlcdScheme('x_v1', '')
    with pytest.raises(ValueError):
        scheme.decompress('')
def test_compress_and_decompress():
    """Test that decompress(compress(x)) == x."""
    scheme = ZlibPlcdScheme('hi', 'fandangle')
    for input_str in ('catfood', 'fandangle2'):
        compressed = scheme.compress(input_str)
        assert scheme.decompress(compressed) == input_str