{
    std::cerr
        << "Num tokens: " << num_tokens
        << ", Avg literal length: " << static_cast<double>(sum_literal_lengths) / num_tokens
        << ", Avg match length: " << static_cast<double>(sum_match_lengths) / num_tokens
        << ", Avg match offset: " << static_cast<double>(sum_match_offsets) / num_tokens
        << ", Offset < 8 ratio: " << static_cast<double>(count_match_offset_less_8) / num_tokens
        << ", Offset < 16 ratio: " << static_cast<double>(count_match_offset_less_16) / num_tokens
        << ", Match replicate itself: " << static_cast<double>(count_match_replicate_itself) / num_tokens
        << "\n";
}
void statistics(
    const char * const source,
    char * const dest,
    size_t dest_size,
    StreamStatistics & stat)
{
    const UInt8 * ip = reinterpret_cast<const UInt8 *>(source);
    UInt8 * op = reinterpret_cast<UInt8 *>(dest);
    UInt8 * const output_end = op + dest_size;
    while (true)
    {
        size_t length;