tests/tinytests/test-inspect.r

local({
  #test_that("h5_inspect validates inputs and handles errors", {
  file <- tempfile(fileext = ".h5")
  
  # Create a group (not a dataset)
  h5_create_group(file, "my_group")
  
  # Ensure it throws the expected error when inspecting a group
  expect_error(
    h5_inspect(file, "my_group"), 
    "Target must be a dataset"
  )
  
  unlink(file)
})

local({
  #test_that("h5_inspect handles uncompressed scalars and print formatting", {
  file <- tempfile(fileext = ".h5")
  
  # Rank-0 Scalar (Bypasses chunking and compression entirely)
  h5_write(I(42L), file, "scalar_val")
  res <- h5_inspect(file, "scalar_val")
  
  expect_inherits(res, "inspect")
  expect_inherits(res, "list")
  expect_equal(res$layout, "contiguous") # Rank 0 defaults to contiguous
  expect_null(res$chunk_dims)
  expect_equal(length(res$filters), 0)
  
  out <- capture.output(print(res))
  expect_true(any(grepl("None \\(Uncompressed\\)", out)))
  expect_true(any(grepl("Chunks:\\s+N/A", out)))
  
  # --- Mock Size Formatting to Hit 100% Coverage on fmt_bytes ---
  res$uncompressed_size <- 0
  res$storage_size      <- 500
  out_b <- capture.output(print(res))
  expect_true(any(grepl("0 B", out_b)))
  expect_true(any(grepl("500.00 B", out_b)))
  
  res$uncompressed_size <- 1024 * 15.5      # 15.5 KB
  res$storage_size      <- 1024^2 * 4.2     # 4.2 MB
  out_mb <- capture.output(print(res))
  expect_true(any(grepl("15.50 KB", out_mb)))
  expect_true(any(grepl("4.20 MB", out_mb)))
  
  res$uncompressed_size <- 1024^3 * 1.8     # 1.8 GB
  res$storage_size      <- 1024^4 * 2.1     # 2.1 TB
  out_tb <- capture.output(print(res))
  expect_true(any(grepl("1.80 GB", out_tb)))
  expect_true(any(grepl("2.10 TB", out_tb)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect detects standard compressors and fletcher32", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(rnorm(400), 20, 20)
  
  # Standard GZIP with Checksum
  opts <- h5_compression("gzip-6", checksum = TRUE)
  h5_write(dat, file, "gzip_chk", compress = opts)
  
  res <- h5_inspect(file, "gzip_chk")
  expect_equal(res$layout, "chunked")
  
  out <- capture.output(print(res))
  expect_true(any(grepl("gzip -> fletcher32", out)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect decodes SZIP variations", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(1L:2500L, 50, 50)
  
  h5_write(dat, file, "szip_ec", compress = "szip-ec")
  out_ec <- capture.output(print(h5_inspect(file, "szip_ec")))
  expect_true(any(grepl("szip-ec", out_ec)))
  
  h5_write(dat, file, "szip_nn", compress = "szip-nn")
  out_nn <- capture.output(print(h5_inspect(file, "szip_nn")))
  expect_true(any(grepl("szip-nn", out_nn)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect decodes Bitshuffle internal pipelines", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(1L:2500L, 50, 50)
  
  h5_write(dat, file, "bshuf_lz4", compress = "bshuf-lz4")
  out_lz4 <- capture.output(print(h5_inspect(file, "bshuf_lz4")))
  expect_true(any(grepl("bitshuffle -> lz4", out_lz4)))
  
  h5_write(dat, file, "bshuf_zstd", compress = "bshuf-zstd-3")
  out_zstd <- capture.output(print(h5_inspect(file, "bshuf_zstd")))
  expect_true(any(grepl("bitshuffle -> zstd", out_zstd)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect decodes Blosc1 and Blosc2 pre-filters", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(rnorm(2500), 50, 50)
  
  # Blosc1 (Legacy)
  h5_write(dat, file, "blosc1", compress = "blosc1-lz4-5")
  out_b1 <- capture.output(print(h5_inspect(file, "blosc1")))
  expect_true(any(grepl("blosc \\[.*shuffle -> lz4hc\\]", out_b1)))
  
  # Blosc2 with Delta filter
  opts_delta <- h5_compression("blosc2-zstd-5", blosc2_delta = TRUE)
  h5_write(dat, file, "b2_delta", compress = opts_delta)
  out_b2d <- capture.output(print(h5_inspect(file, "b2_delta")))
  expect_true(any(grepl("blosc2 \\[bitshuffle -> delta -> zstd\\]", out_b2d)))
  
  # Blosc2 with Truncate filter
  opts_trunc <- h5_compression("blosc2-ndlz", blosc2_truncate = 10)
  h5_write(dat, file, "b2_trunc", compress = opts_trunc)
  out_b2t <- capture.output(print(h5_inspect(file, "b2_trunc")))
  expect_true(any(grepl("trunc\\(bits=10\\)", out_b2t)))
  expect_true(any(grepl("ndlz", out_b2t)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect decodes ZFP standalone and Blosc2 modes", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(rnorm(2500), 50, 50)
  
  # Standalone ZFP Rate
  h5_write(dat, file, "zfp_rate", compress = "zfp-rate-16")
  out_rate <- capture.output(print(h5_inspect(file, "zfp_rate")))
  # Standalone ZFP does not get the bracket expansion
  expect_true(any(grepl("Pipeline: zfp", out_rate))) 
  
  # ZFP embedded inside Blosc2
  h5_write(dat, file, "b2_zfp", compress = "blosc2-zfp-prec-12")
  out_b2zfp <- capture.output(print(h5_inspect(file, "b2_zfp")))
  expect_true(any(grepl("blosc2 \\[zfp-prec\\]", out_b2zfp)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect detects Scale-Offset integer and float packing", {
  file <- tempfile(fileext = ".h5")
  
  # Integer Packing
  dat_int <- matrix(1L:1000L, 50, 20)
  opts_int <- h5_compression("gzip-5", int_packing = 16)
  h5_write(dat_int, file, "so_int", compress = opts_int)
  out_int <- capture.output(print(h5_inspect(file, "so_int")))
  expect_true(any(grepl("scaleoffset -> gzip", out_int)))
  
  # Float Rounding
  dat_flt <- matrix(rnorm(1000), 50, 20)
  opts_flt <- h5_compression("zstd-3", float_rounding = 3)
  h5_write(dat_flt, file, "so_flt", compress = opts_flt)
  out_flt <- capture.output(print(h5_inspect(file, "so_flt")))
  expect_true(any(grepl("scaleoffset -> zstd", out_flt)))
  
  unlink(file)
})

local({
  #test_that("h5_inspect decodes legacy and unconfigurable compressors", {
  file <- tempfile(fileext = ".h5")
  dat <- matrix(1L:2500L, 50, 50)
  
  h5_write(dat, file, "lzf", compress = "lzf")
  expect_true(any(grepl("lzf", capture.output(print(h5_inspect(file, "lzf"))))))
  
  h5_write(dat, file, "snappy", compress = "snappy")
  expect_true(any(grepl("snappy", capture.output(print(h5_inspect(file, "snappy"))))))
  
  h5_write(dat, file, "bzip2", compress = "bzip2-4")
  expect_true(any(grepl("bzip2", capture.output(print(h5_inspect(file, "bzip2"))))))
  
  unlink(file)
})

Try the h5lite package in your browser

Any scripts or data that you put into this service are public.

h5lite documentation built on May 19, 2026, 1:07 a.m.