## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(fig.width=8, fig.height=4, fig.align = "center") 

## -----------------------------------------------------------------------------
library(brotli)
library(ggplot2)

# Example data
myfile <- file.path(R.home(), "COPYING")
x <- readBin(myfile, raw(), file.info(myfile)$size)

# The usual suspects
y1 <- memCompress(x, "gzip")
y2 <- memCompress(x, "bzip2")
y3 <- memCompress(x, "xz")
y4 <- brotli_compress(x)

## -----------------------------------------------------------------------------
stopifnot(identical(x, memDecompress(y1, "gzip")))
stopifnot(identical(x, memDecompress(y2, "bzip2")))
stopifnot(identical(x, memDecompress(y3, "xz")))
stopifnot(identical(x, brotli_decompress(y4)))

## -----------------------------------------------------------------------------
# Combine data
alldata <- data.frame (
  algo = c("gzip", "bzip2", "xz (lzma2)", "brotli"),
  ratio = c(length(y1), length(y2), length(y3), length(y4)) / length(x)
)

ggplot(alldata, aes(x = algo, fill = algo, y = ratio)) + 
  geom_bar(color = "white", stat = "identity") +
  xlab("") + ylab("Compressed ratio (less is better)")

## ----eval = require(microbenchmark)-------------------------------------------
# library(microbenchmark)
# bm <- microbenchmark(
#   memDecompress(y1, "gzip"),
#   memDecompress(y2, "bzip2"),
#   memDecompress(y3, "xz"),
#   brotli_decompress(y4),
#   times = 1000
# )
# 
# alldata$decompression <- summary(bm)$median
# ggplot(alldata, aes(x = algo, fill = algo, y = decompression)) +
#   geom_bar(color = "white", stat = "identity") +
#   xlab("") + ylab("Decompression time (less is better)")

## ----eval = require(microbenchmark)-------------------------------------------
# library(microbenchmark)
# bm <- microbenchmark(
#   memCompress(x, "gzip"),
#   memCompress(x, "bzip2"),
#   memCompress(x, "xz"),
#   brotli_compress(x),
#   times = 20
# )
# 
# alldata$compression <- summary(bm)$median
# ggplot(alldata, aes(x = algo, fill = algo, y = compression)) +
#   geom_bar(color = "white", stat = "identity") +
#   xlab("") + ylab("Compression time (less is better)")

