test_that("We can replace parts if they have an equivalent unit", {
x <- 1:4 * as_units("km")
y <- c(3000, 4000) * as_units("m")
z <- 5000 * as_units("m")
x[3:4] <- y
x[[5]] <- z
expect_length(x, 5)
expect_equal(as.numeric(x), 1:5)
expect_equal(as.character(units(x)), "km")
})
test_that("We can't replace parts if they have different unit", {
x <- 1:4 * as_units("km")
y <- c(3000, 4000) * as_units("s")
z <- 5000 * as_units("s")
expect_error(x[3:4] <- y)
expect_error(x[[5]] <- z)
})
test_that("We can concatenate units if they have the same unit", {
x <- 1:4 * as_units("m")
y <- 5:8 * as_units("m")
z <- c(x, y)
expect_equal(length(z), length(x) + length(y))
expect_equal(x, z[1:4])
expect_equal(y, z[1:4 + 4])
})
test_that("We can't concatenate units if they have different units", {
x <- 1:4 * as_units("m")
y <- 5:8 * as_units("s")
expect_error(c(x, y))
})
test_that("We can concatenate units if their units can be converted", {
x <- 1:4 * as_units("m")
y <- 5:8 * as_units("km")
z <- c(x, y)
expect_equal(length(z), length(x) + length(y))
expect_equal(as.character(units(z)), "m")
expect_equal(x, z[1:4])
expect_equal(set_units(y, units(as_units("m")), mode = "standard"), z[1:4 + 4])
})
test_that("We can use diff on a units object", {
x = 1:10 * as_units("m")
y = rep(1,9) * as_units("m")
expect_equal(diff(x), y)
})
test_that("parse_unit works", {
kg = as_units("kg")
m = as_units("m")
s = as_units("s")
u0 = kg/m/m/s
u = as_units("kg m-2 s-1", implicit_exponents = TRUE)
expect_equal(u, u0)
J = as_units("J")
u0 = make_units(kg*kg*kg*m*m*J/s/s/s/s/s)
u = as_units("kg3 m2 s-5 J", implicit_exponents = TRUE)
expect_equal(u, u0)
})
test_that("deparse_unit works", {
str = "kg m-2 s-1"
u = as_units(str, implicit_exponents = TRUE)
str0 = deparse_unit(u)
expect_equal(str, str0)
})
test_that("set_units(x, u) is a short form for x * make_units(u)", {
expect_equal(set_units(1:10, m/s), 1:10 * make_units(m/s))
x = set_units(1:5, m/s)
y = x
units(y) = set_units(1, km/h)
expect_identical(y, set_units(x, km/h))
})
test_that("rep.units works", {
expect_equal(rep(set_units(1:2, m/s), 2), set_units(c(1,2,1,2), m/s))
})
test_that("set_units works with symbols in character data, and resolves names", {
skip_on_cran()
deg = paste0(enc2native(intToUtf8(176)), "C")
expect_equal(set_units(1:2, deg, mode = "standard"), set_units(1:2, "degree_C", mode = "standard"))
expect_equal(set_units(1:2, deg, mode = "standard"), set_units(1:2, "degree_Celsius", mode = "standard"))
expect_equal(set_units(1:2, "degree_C", mode = "standard"), set_units(1:2, "degree_Celsius", mode = "standard"))
expect_equal(set_units(1:2, degree_C), set_units(1:2, degree_Celsius))
expect_equal(set_units(1:2, deg, mode = "standard"), set_units(1:2, degree_Celsius))
x = set_units(1:3, km)
y <- set_units(x, "meter", mode = "standard")
expect_equal(y, set_units(c(1000,2000,3000), m))
})
test_that("all.equal works", {
expect_false(isTRUE(all.equal(set_units(1, m), 1)))
expect_true(all.equal(set_units(1, m/s), set_units(3.6, km/h)))
expect_true(all.equal(set_units(3.6, km/h), set_units(1, m/s)))
expect_true(set_units(1, m/s) == set_units(3.6, km/h))
expect_false(set_units(3.6, km/h) == set_units(1, m/s)) # see R FAQ 7.31
expect_true(set_units(1e-20, g) < set_units(1e-10, g)) # see #351
})
test_that("seq works", {
expect_equal(
seq(to = set_units(10, m), by = set_units(1, m), length.out = 5),
set_units(seq(to = 10, by = 1, length.out = 5), m)
)
expect_equal(
seq(set_units(10, m), by = set_units(1, m), length.out = 5),
set_units(seq(10, by = 1, length.out = 5), m)
)
expect_equal(
seq(set_units(10, m), set_units(19, m)),
set_units(seq(10, 19), m)
)
expect_equal(
seq(set_units(10, m), set_units(.02, km)),
set_units(seq(10, 20), m)
)
})
test_that("str works", {
expect_snapshot({
str(set_units(1/1:3, m/s))
})
})
test_that("subsetting keeps pillar attribute (#275)", {
x <- set_units(1:3, m)
attr(x, "pillar") <- "bar"
expect_equal(attr(x[1:2], "pillar"), "bar")
expect_equal(attr(x[[1]], "pillar"), "bar")
})
test_that("duplicated-related methods work as expected", {
x <- set_units(1:4, m)
expect_equal(duplicated(x), duplicated(drop_units(x)))
expect_equal(anyDuplicated(x), anyDuplicated(drop_units(x)))
expect_equal(unique(x), x)
x <- set_units(rep(c(1, 2), 2), m)
expect_equal(duplicated(x), duplicated(drop_units(x)))
expect_equal(anyDuplicated(x), anyDuplicated(drop_units(x)))
expect_equal(unique(x), x[1:2])
x <- set_units(matrix(rep(c(1, 2), 2), 2, byrow=TRUE), m)
expect_equal(duplicated(x), duplicated(drop_units(x)))
expect_equal(anyDuplicated(x), anyDuplicated(drop_units(x)))
expect_equal(unique(x), x[1, , drop=FALSE])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.