tests/testthat/test-handle.R

test_that("wk_handle() works for grd_rct", {
  expect_identical(
    wk_handle(grd(nx = 1, ny = 1), wk::wkt_writer()),
    wkt("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))")
  )
})

test_that("wk_handle() works for grd_xy", {
  expect_identical(
    wk_handle(grd(nx = 1, ny = 1, type = "centers"), wk::wkt_writer()),
    wkt("POINT (0.5 0.5)")
  )
})


test_that("as_xy() works for grd objects", {
  grid_empty <- grd(nx = 0, ny = 0)
  expect_identical(as_xy(grid_empty), xy(crs = NULL))

  grid1 <- grd(nx = 1, ny = 1)
  expect_identical(as_xy(grid1), xy(0.5, 0.5))

  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_xy(data)

  # order should match the internal ordering of data
  # (column major unless specified)
  expect_identical(
    as_xy(grd_xy(data)),
    c(
      xy(0, 1),
      xy(0, 0),
      xy(1, 1),
      xy(1, 0),
      xy(2, 1),
      xy(2, 0)
    )
  )

  # order should still be top left -> bottom right
  # even with flipped initial bbox
  expect_identical(
    as_xy(grd_xy(data, rct(0, 0, -2, -1))),
    c(
      xy(-2, 0),
      xy(-2, -1),
      xy(-1, 0),
      xy(-1, -1),
      xy(0, 0),
      xy(0, -1)
    )
  )

  expect_identical(as_xy(as_grd_rct(grid)), as_xy(grid))
})

test_that("as_xy() works for row-major grd objects", {
  grid_empty <- grd(nx = 0, ny = 0)
  attr(grid_empty$data, "grd_data_order") <- c("x", "y")
  expect_identical(as_xy(grid_empty), xy(crs = NULL))

  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_xy(data)
  attr(grid$data, "grd_data_order") <- c("x", "y")

  expect_identical(
    as_xy(grid),
    c(
      xy(0, 1),
      xy(1, 1),
      xy(2, 1),
      xy(0, 0),
      xy(1, 0),
      xy(2, 0)
    )
  )

  expect_identical(as_xy(as_grd_rct(grid)), as_xy(grid))
})

test_that("as_xy() works for flipped grd objects", {
  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_xy(data)
  attr(grid$data, "grd_data_order") <- c("-y", "-x")

  expect_identical(
    as_xy(grid),
    c(
      xy(2, 0),
      xy(2, 1),
      xy(1, 0),
      xy(1, 1),
      xy(0, 0),
      xy(0, 1)
    )
  )

  attr(grid$data, "grd_data_order") <- c("-x", "-y")
  expect_identical(
    as_xy(grid),
    c(
      xy(2, 0),
      xy(1, 0),
      xy(0, 0),
      xy(2, 1),
      xy(1, 1),
      xy(0, 1)
    )
  )
})

test_that("as_rct() works for grd objects", {
  grid_empty <- grd(nx = 0, ny = 0)
  expect_identical(as_rct(grid_empty), rct(crs = NULL))

  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_rct(data)

  # order should match the internal ordering of data
  # (column major unless specified)
  expect_identical(
    as_rct(grid),
    c(
      rct(0, 1, 1, 2),
      rct(0, 0, 1, 1),
      rct(1, 1, 2, 2),
      rct(1, 0, 2, 1),
      rct(2, 1, 3, 2),
      rct(2, 0, 3, 1)
    )
  )

  expect_identical(
    as_rct(grd_rct(data, rct(0, 0, -3, -2))),
    c(
      rct(-3, -1, -2, 0),
      rct(-3, -2, -2, -1),
      rct(-2, -1, -1, 0),
      rct(-2, -2, -1, -1),
      rct(-1, -1, 0, 0),
      rct(-1, -2, 0, -1)
    )
  )

  expect_identical(as_rct(as_grd_xy(grid)), as_rct(grid))
})

test_that("as_rct() works for row-major grd objects", {
  grid_empty <- grd(nx = 0, ny = 0)
  attr(grid_empty$data, "grd_data_order") <- c("x", "y")
  expect_identical(as_rct(grid_empty), rct(crs = NULL))

  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_rct(data)
  attr(grid$data, "grd_data_order") <- c("x", "y")

  # order should match the internal ordering of data
  # (row major unless specified)
  expect_identical(
    as_rct(grid),
    c(
      rct(0, 1, 1, 2),
      rct(1, 1, 2, 2),
      rct(2, 1, 3, 2),
      rct(0, 0, 1, 1),
      rct(1, 0, 2, 1),
      rct(2, 0, 3, 1)
    )
  )

  expect_identical(as_rct(as_grd_xy(grid)), as_rct(grid))
})

test_that("as_rct() works for flipped grd objects", {
  data <- matrix(0:5, nrow = 2, ncol = 3)
  grid <- grd_rct(data)
  attr(grid$data, "grd_data_order") <- c("-y", "-x")

  # order should match the internal ordering of data
  # (row major unless specified)
  expect_identical(
    as_rct(grid),
    c(
      rct(2, 0, 3, 1),
      rct(2, 1, 3, 2),
      rct(1, 0, 2, 1),
      rct(1, 1, 2, 2),
      rct(0, 0, 1, 1),
      rct(0, 1, 1, 2)
    )
  )

  attr(grid$data, "grd_data_order") <- c("-x", "-y")

  # order should match the internal ordering of data
  # (row major unless specified)
  expect_identical(
    as_rct(grid),
    c(
      rct(2, 0, 3, 1),
      rct(1, 0, 2, 1),
      rct(0, 0, 1, 1),
      rct(2, 1, 3, 2),
      rct(1, 1, 2, 2),
      rct(0, 1, 1, 2)
    )
  )
})
paleolimbot/grd documentation built on Dec. 22, 2021, 6:38 a.m.