#' #' Header for all (concatenated) test files #' #' Require spatstat.geom #' Obtain environment variable controlling tests. #' #' $Revision: 1.5 $ $Date: 2020/04/30 05:31:37 $ require(spatstat.geom) FULLTEST <- (nchar(Sys.getenv("SPATSTAT_TEST", unset="")) > 0) ALWAYS <- TRUE cat(paste("--------- Executing", if(FULLTEST) "** ALL **" else "**RESTRICTED** subset of", "test code -----------\n")) #' #' tests/ppp.R #' #' $Revision: 1.14 $ $Date: 2022/08/27 04:49:32 $ #' #' Untested cases in ppp() or associated code local({ ## X <- runifpoint(10, letterR) ## Y <- runifpoint(10, complement.owin(letterR)) Bin <- owin(c(2.15, 2.45), c(0.85, 3.0)) Bout <- owin(c(2.75, 2.92), c(0.85, 1.4)) X <- runifrect(10, Bin)[letterR] Y <- runifrect(10, Bout)[complement.owin(letterR)] if(FULLTEST) { #' test handling of points out-of-bounds df <- rbind(as.data.frame(X), as.data.frame(Y)) A <- ppp(df$x, df$y, window=letterR, marks=1:20) #' test handling of points with bad coordinates df$x[1:3] <- c(Inf, NA, NaN) df$y[18:20] <- c(Inf, NA, NaN) B <- ppp(df$x, df$y, window=letterR, marks=1:20) D <- ppp(df$x, df$y, window=letterR, marks=data.frame(id=1:20, u=runif(20))) #' test print/summary/plot methods on these bad objects print(A) print(B) print(D) print(summary(A)) print(summary(B)) print(summary(D)) plot(A) plot(B) plot(D) plot(attr(A, "rejects")) plot(attr(B, "rejects")) plot(attr(D, "rejects")) #' subset operator --- cases not covered elsewhere #' subset index is a logical image Z <- distmap(letterR, invert=TRUE) V <- (Z > 0.2) XV <- X[V] #' multiple columns of marks fun3 <- finpines[1:3] #' multiple columns of marks, one of which is a factor U <- finpines marks(U)[,2] <- factor(c(rep("A", 60), rep("B", npoints(U)-60))) UU <- U[1:3, drop=TRUE] #' cut.ppp CU <- cut(U, "height") CU <- cut(U, breaks=3) #' cases of [<-.ppp set.seed(999) X <- cells B <- square(0.2) X[B] <- runifrect(3, B) #' checking 'value' Y <- flipxy(X) X[B] <- Y[square(0.3)] ## deprecated use of second argument X[,1:4] <- runifrect(3) # deprecated X[,B] <- runifrect(3, B) # deprecated X[1:3, B] <- runifrect(20) A <- superimpose(cells, X, W="convex") A <- superimpose(cells, X, W=ripras) B <- superimpose(concatxy(cells), concatxy(X), W=NULL) ## superimpose.splitppp Y <- superimpose(split(amacrine)) ## catch outdated usage of scanpp d <- system.file("rawdata", "amacrine", package="spatstat.data") if(nzchar(d)) { W <- owin(c(0, 1060/662), c(0, 1)) Y <- scanpp("amacrine.txt", dir=d, window=W, multitype=TRUE) print(Y) } ## (bad) usage of cobble.xy xx <- runif(10) yy <- runif(10) W1 <- cobble.xy(xx, yy) W2 <- cobble.xy(xx, yy, boundingbox) Wnope <- cobble.xy(xx, yy, function(x,y) {cbind(x,y)}, fatal=FALSE) ## as.data.frame.ppplist Z <- runifrect(3, nsim=4) Z[[2]] <- Z[[2]][1] Z[[3]] <- Z[[3]][FALSE] d <- as.data.frame(Z) } }) # # tests/ppx.R # # Test operations for ppx objects # # $Revision: 1.9 $ $Date: 2020/12/04 04:49:40 $ # local({ if(ALWAYS) { ## make data df <- data.frame(x=c(1,2,2,1)/4, y=c(1,2,3,1)/4, z=c(2,3,4,3)/5) X <- ppx(data=df, coord.type=rep("s", 3), domain=box3()) } if(ALWAYS) { #' methods involving C code unique(X) duplicated(X) anyDuplicated(X) multiplicity(X) uniquemap(X) } if(FULLTEST) { #' general tests print(X) summary(X) plot(X) domain(X) unitname(X) <- c("metre", "metres") unitname(X) #' subset operator X[integer(0)] Y <- X %mark% data.frame(a=df$x, b=1:4) Y[1:2] Y[FALSE] marks(Y) <- as.data.frame(marks(Y)) Y[integer(0)] Y[1:2] Y[FALSE] } if(FULLTEST) { #' two dimensional A <- ppx(data=df[,1:2], coord.type=rep("s", 2), domain=square(1)) plot(A) B <- ppx(data=df[,1:2], coord.type=rep("s", 2), domain=NULL) plot(B) #' one dimensional E <- ppx(data=data.frame(x=runif(10))) plot(E) #' bug stopifnot(identical(unmark(chicago[1]), unmark(chicago)[1])) #' ppx with zero points U <- chicago[integer(0)] V <- U %mark% 1 V <- U %mark% factor("a") #' simplify lower-dimensional patterns X3 <- ppx(data=df, coord.type=rep("s", 3), domain=box3(), simplify=TRUE) stopifnot(is.pp3(X3)) X2 <- ppx(data=df[,1:2], coord.type=rep("s", 2), domain=square(1), simplify=TRUE) stopifnot(is.ppp(X2)) #' marks<-.ppx M <- as.matrix(X) marks(X) <- df[,1] marks(X) <- df[,integer(0)] } if(FULLTEST) { ## ............ from Ege .......................... ## Tests for shift: ## Check ppp and ppx shift are the same X <- cells Y <- ppx(coords(cells), domain = boxx(0:1,0:1)) Xs <- shift(X, vec = c(1,1)) Ys <- shift(Y, vec = c(1,1)) stopifnot(all.equal(coords(Xs), coords(Ys), check.attributes = FALSE)) stopifnot(all.equal(domain(Xs), as.owin(domain(Ys)), check.attributes = FALSE)) ## Check a single numeric for vec in shift.ppx stopifnot(identical(Ys, shift(Y, vec = 1))) ## Tests for scale: dat <- data.frame(x=1:3, y=1:3, m=letters[1:3]) xrange <- yrange <- c(0,4) cent <- c(2,2) scal <- c(5,5) X <- as.ppp(dat, W = owin(xrange, yrange)) Xscaled <- affine(shift(X, vec = -cent), mat = diag(1/scal)) ## Check ppx without domain: Y <- ppx(dat, coord.type = c("spatial", "spatial", "mark")) Yscaled <- scale(Y, center = cent, scale = scal) stopifnot(all.equal(coords(Xscaled), coords(Yscaled), check.attributes = FALSE)) ## Check ppx with domain: Y$domain <- boxx(xrange, yrange) Yscaled <- scale(Y, center = cent, scale = scal) stopifnot(all.equal(as.boxx(Window(Xscaled)), domain(Yscaled), check.attributes = FALSE)) ## Tests for intersect.boxx: ## Should be unit 2D box: A <- intersect.boxx(boxx(c(-1,1),c(0,2)), boxx(c(0,3),c(0,1))) stopifnot(identical(A, boxx(c(0,1),c(0,1)))) ## Should be empty (NULL) B <- intersect.boxx(boxx(c(-1,1),c(0,2)), boxx(c(0,3),c(0,1)), boxx(c(1,2), c(-1,1))) stopifnot(is.null(B)) ## Should be unit 3D box: C <- intersect.boxx(boxx(c(-1,1),c(0,2),c(-1,1)), boxx(c(0,3),c(0,1),c(0,4))) stopifnot(identical(C, boxx(c(0,1),c(0,1),c(0,1)))) ## Should be empty (NULL) D <- intersect.boxx(boxx(c(-1,1),c(0,2),c(-1,1)), boxx(c(0,3),c(0,1),c(0,4)), NULL) stopifnot(is.null(D)) ## Tests for [.boxx with clip: ## Check ppp and ppx subset with clip are the same X <- cells WX <- shift(domain(X), vec = c(.5,.5)) X2 <- X[WX, clip=TRUE] Y <- ppx(coords(X), domain = boxx(c(0,1),c(0,1))) WY <- shift(domain(Y), vec = c(.5,.5)) Y2 <- Y[WY, clip=TRUE] stopifnot(all.equal(coords(X2), coords(Y2), check.attributes = FALSE)) stopifnot(all.equal(domain(X2), as.owin(domain(Y2)))) } })