library(cluster)

tools::assertWarning(eh <- ellipsoidhull(cbind(x=1:4, y = 1:4)), verbose=TRUE) #singular
eh ## center ok, shape "0 volume" --> Warning
stopifnot(volume(eh) == 0)

set.seed(157)
for(n in 4:10) { ## n=2 and 3 still differ -- platform dependently!
    cat("n = ",n,"\n")
    x2 <- rnorm(n)
    print(ellipsoidhull(cbind(1:n, x2)))
    print(ellipsoidhull(cbind(1:n, x2, 4*x2 + rnorm(n))))
}

set.seed(1)
x <- rt(100, df = 4)
y <- 100 + 5 * x + rnorm(100)
ellipsoidhull(cbind(x,y))
z <- 10  - 8 * x + y + rnorm(100)
(e3 <- ellipsoidhull(cbind(x,y,z)))
d3o <- cbind(x,y + rt(100,3), 2 * x^2 + rt(100, 2))
(e. <- ellipsoidhull(d3o, ret.sq = TRUE))
stopifnot(all.equal(e.$sqdist,
		    with(e., mahalanobis(d3o, center=loc, cov=cov)),
		    tol = 1e-13))
d5 <- cbind(d3o, 2*abs(y)^1.5 + rt(100,3), 3*x - sqrt(abs(y)))
(e5 <- ellipsoidhull(d5, ret.sq = TRUE))
tail(sort(e5$sqdist)) ## 4 values 5.00039 ... 5.0099

(e5.1e77 <- ellipsoidhull(1e77*d5))
stopifnot(# proof correct scaling c^5
    all.equal(volume(e5.1e77, log=TRUE) - volume(e5, log=TRUE),
              ncol(d5) *  77* log(10))
)
