anchor.diff:  %%%          module provides a gen_server API, which wraps the queue for use
   %%%          in multi-process applications.
   %%%          The queue is stored in a memory-mapped file, and it automatically
  -%%%          grows if the messages are not dequeued from the queue.
  +%%%          grows if the messages are not dequeued from the queue.  Messages
  +%%%          stored in the queue can be compressed using variable compression
  +%%%          level controlled by the argument to the `push/3' function.
   %%%          See test cases at the end of this module for sample use cases.
   %%% @author  Serge Aleynikov
   %%% @end
  
positive.code:   ?assertError(failed,     try_pop(Mem, fun(3) -> erlang:error(failed) end)),
    ?assertMatch({3, true},  read_head(Mem, true)),
    ?assertEqual(nil,        pop(Mem)),
    ?assertEqual({112,112,112,1024}, header(Mem)),
    ?assert(purge(Mem)),
    ?assert(is_empty(Mem)),
    
    ?assertEqual([], [R || R <- [push(Mem, I) || I <- [a,b,1,2]], R /= ok]),
    ?assertEqual([a,b,1,2], lists:reverse(pop(Mem, [], fun(I,S) -> {cont, [I | S]} end))),
    ?assert(is_empty(Mem)),
    ?assertEqual(ok, flush(Mem)).
  
  file_size()             -> file_size(element(2, os:type())).
  
negative.code: 
  %% @doc Push a term to the queue. This function has a constant-time complexity.
  push(Mem, Term) ->
    push(Mem, Term, 0).
  
  %% @doc Push a term to the queue. This function has a constant-time complexity.
  %% `Compression' is the compression level from `0' to `9', where `0' is no compression.
  push(Mem, Term, Compression) when is_integer(Compression), Compression >= 0, Compression < 10 ->
    Bin = term_to_binary(Term, [{compressed, 0}, {minor_version, 2}]),
    Sz0 = byte_size(Bin)+8,
    Pad = Sz0 rem 8,
    Sz  = Sz0 + Pad,
  