Nothing
test_that("ellipsoid_params returns WGS84 values", {
params <- ellipsoid_params()
expect_type(params, "list")
expect_named(params, c("a", "f", "b", "e2", "ep2", "n", "area", "volume"))
# WGS84 equatorial radius
expect_equal(params$a, 6378137, tolerance = 1)
# WGS84 flattening
expect_equal(params$f, 1/298.257223563, tolerance = 1e-12)
# Semi-minor axis should be less than semi-major
expect_true(params$b < params$a)
# Area and volume should be positive
expect_true(params$area > 0)
expect_true(params$volume > 0)
})
test_that("ellipsoid_circle works correctly", {
result <- ellipsoid_circle(c(0, 45, 90))
expect_s3_class(result, "data.frame")
expect_named(result, c("lat", "radius", "quarter_meridian", "meridian_distance"))
expect_equal(nrow(result), 3)
# Radius at equator should equal semi-major axis
expect_equal(result$radius[1], 6378137, tolerance = 1)
# Radius at pole should be 0
expect_equal(result$radius[3], 0, tolerance = 1)
# Meridian distance should increase with latitude
expect_true(all(diff(result$meridian_distance) > 0))
# At pole, meridian_distance should equal quarter_meridian
expect_equal(result$meridian_distance[3], result$quarter_meridian[3], tolerance = 1)
})
test_that("ellipsoid_latitudes returns all types", {
result <- ellipsoid_latitudes(c(0, 45, 90))
expect_s3_class(result, "data.frame")
expect_named(result, c("lat", "parametric", "geocentric", "rectifying",
"authalic", "conformal", "isometric"))
expect_equal(nrow(result), 3)
# At equator, all latitudes should be 0
expect_equal(result$parametric[1], 0, tolerance = 1e-9)
expect_equal(result$geocentric[1], 0, tolerance = 1e-9)
expect_equal(result$rectifying[1], 0, tolerance = 1e-9)
# At pole, most latitudes should be 90
expect_equal(result$parametric[3], 90, tolerance = 1e-9)
expect_equal(result$geocentric[3], 90, tolerance = 1e-9)
expect_equal(result$rectifying[3], 90, tolerance = 1e-9)
})
test_that("ellipsoid_latitudes auxiliary latitudes differ from geographic", {
result <- ellipsoid_latitudes(45)
# At mid-latitudes, auxiliary latitudes should differ slightly from geographic
# Due to Earth's flattening
expect_false(result$parametric == 45)
expect_false(result$geocentric == 45)
# Geocentric latitude should be less than geographic (Earth is flattened)
expect_true(result$geocentric < 45)
})
test_that("ellipsoid_latitudes_inv inverts correctly", {
# Forward
fwd <- ellipsoid_latitudes(c(0, 30, 60, 90))
# Inverse parametric
inv_param <- ellipsoid_latitudes_inv(fwd$parametric, "parametric")
expect_equal(inv_param$geographic, c(0, 30, 60, 90), tolerance = 1e-9)
# Inverse geocentric
inv_geo <- ellipsoid_latitudes_inv(fwd$geocentric, "geocentric")
expect_equal(inv_geo$geographic, c(0, 30, 60, 90), tolerance = 1e-9)
# Inverse rectifying
inv_rect <- ellipsoid_latitudes_inv(fwd$rectifying, "rectifying")
expect_equal(inv_rect$geographic, c(0, 30, 60, 90), tolerance = 1e-9)
})
test_that("ellipsoid_latitudes_inv rejects invalid types", {
expect_error(ellipsoid_latitudes_inv(45, "invalid"), "type must be one of")
})
test_that("ellipsoid_curvature returns correct structure", {
result <- ellipsoid_curvature(c(0, 45, 90))
expect_s3_class(result, "data.frame")
expect_named(result, c("lat", "meridional", "transverse"))
expect_equal(nrow(result), 3)
# All radii should be positive
expect_true(all(result$meridional > 0))
expect_true(all(result$transverse > 0))
})
test_that("ellipsoid_curvature varies with latitude", {
result <- ellipsoid_curvature(c(0, 45, 90))
# Meridional radius increases from equator to pole
expect_true(result$meridional[3] > result$meridional[1])
# At equator, transverse radius equals semi-major axis
expect_equal(result$transverse[1], 6378137, tolerance = 1)
# At pole, meridional and transverse should be equal
expect_equal(result$meridional[3], result$transverse[3], tolerance = 1)
})
test_that("ellipsoid functions are vectorized", {
lats <- seq(0, 90, by = 10)
circle <- ellipsoid_circle(lats)
expect_equal(nrow(circle), length(lats))
latitudes <- ellipsoid_latitudes(lats)
expect_equal(nrow(latitudes), length(lats))
curvature <- ellipsoid_curvature(lats)
expect_equal(nrow(curvature), length(lats))
})
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.