Nothing
# test-cell-area.R
# Tests for cell_area() and the H3 virtual column fix
# =============================================================================
# ISEA cell_area()
# =============================================================================
test_that("cell_area() returns constant area for ISEA grids", {
grid <- hex_grid(area_km2 = 1000)
cells <- lonlat_to_cell(c(0, 10, 20), c(0, 45, 80), grid)
areas <- cell_area(cells, grid)
expect_true(is.numeric(areas))
expect_equal(length(areas), 3)
# All areas should be the same (equal-area property)
expect_true(all(areas == areas[1]))
# Area should match grid spec
expect_equal(unname(areas[1]), grid@area_km2)
})
test_that("cell_area() returns named vector for ISEA", {
grid <- hex_grid(area_km2 = 1000)
cells <- lonlat_to_cell(c(0, 10), c(45, 50), grid)
areas <- cell_area(cells, grid)
expect_true(!is.null(names(areas)))
expect_equal(length(names(areas)), 2)
})
test_that("cell_area() works with HexData and NULL cell_id", {
grid <- hex_grid(area_km2 = 1000)
df <- data.frame(lon = c(0, 10, 20), lat = c(45, 50, 55))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
areas <- cell_area(grid = result)
expect_equal(length(areas), nrow(df))
})
test_that("cell_area() errors when cell_id is NULL and grid is HexGridInfo", {
grid <- hex_grid(area_km2 = 1000)
expect_error(cell_area(grid = grid), "cell_id required")
})
# =============================================================================
# H3 cell_area()
# =============================================================================
skip_if_not_installed("sf")
test_that("cell_area() returns per-cell areas for H3", {
grid <- hex_grid(resolution = 5, type = "h3")
# Equator vs high latitude
cells <- lonlat_to_cell(c(0, 0), c(0, 80), grid)
areas <- cell_area(cells, grid)
expect_true(is.numeric(areas))
expect_equal(length(areas), 2)
# Areas should differ (H3 is NOT equal-area)
expect_false(areas[1] == areas[2])
# Both should be positive
expect_true(all(areas > 0))
})
test_that("cell_area() caching works for H3", {
grid <- hex_grid(resolution = 5, type = "h3")
cells <- lonlat_to_cell(c(0), c(45), grid)
# First call
a1 <- cell_area(cells, grid)
# Second call (should hit cache)
a2 <- cell_area(cells, grid)
expect_equal(a1, a2)
})
test_that("cell_area() deduplicates H3 cell IDs", {
grid <- hex_grid(resolution = 5, type = "h3")
# Same cell repeated
cells <- lonlat_to_cell(c(0, 0), c(45, 45), grid)
areas <- cell_area(cells, grid)
# Should still return 2 values (one per input)
expect_equal(length(areas), 2)
expect_equal(unname(areas[1]), unname(areas[2]))
})
test_that("cell_area() with HexData for H3", {
grid <- hex_grid(resolution = 8, type = "h3")
df <- data.frame(lon = c(0, 10), lat = c(45, 50))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
areas <- cell_area(grid = result)
expect_equal(length(areas), 2)
expect_true(all(areas > 0))
})
# =============================================================================
# H3 virtual column fix
# =============================================================================
test_that("$cell_area_km2 returns per-cell areas for H3 HexData", {
grid <- hex_grid(resolution = 5, type = "h3")
df <- data.frame(lon = c(0, 0), lat = c(0, 80))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
areas <- result$cell_area_km2
expect_equal(length(areas), 2)
# Areas should differ for equator vs polar
expect_false(areas[1] == areas[2])
})
test_that("[[cell_area_km2]] returns per-cell areas for H3 HexData", {
grid <- hex_grid(resolution = 5, type = "h3")
df <- data.frame(lon = c(0, 0), lat = c(0, 80))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
areas <- result[["cell_area_km2"]]
expect_equal(length(areas), 2)
expect_false(areas[1] == areas[2])
})
test_that("as.data.frame() returns per-cell areas for H3 HexData", {
grid <- hex_grid(resolution = 5, type = "h3")
df <- data.frame(lon = c(0, 0), lat = c(0, 80))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
out <- as.data.frame(result)
expect_true("cell_area_km2" %in% names(out))
# Should not be a single repeated value
expect_false(out$cell_area_km2[1] == out$cell_area_km2[2])
})
test_that("$cell_area_km2 still works for ISEA HexData", {
grid <- hex_grid(area_km2 = 1000)
df <- data.frame(lon = c(0, 10), lat = c(45, 50))
result <- hexify(df, lon = "lon", lat = "lat", grid = grid)
areas <- result$cell_area_km2
expect_equal(length(areas), 2)
# ISEA: all areas should be the same
expect_equal(areas[1], areas[2])
expect_equal(areas[1], grid@area_km2)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.