@@ -5,12 +5,12 @@ require(spatstat.sparse)
55ALWAYS <- FULLTEST <- TRUE
66# ' tests/sparse3Darrays.R
77# ' Basic tests of code in sparse3Darray.R and sparsecommon.R
8- # ' $Revision: 1.32 $ $Date: 2023/06/23 02:34:57 $
8+ # ' $Revision: 1.33 $ $Date: 2026/04/27 06:49:58 $
99
1010if (! exists(" ALWAYS" )) ALWAYS <- TRUE
1111if (! exists(" FULLTEST" )) FULLTEST <- ALWAYS
1212
13- if (ALWAYS ) { # fundamental, C code
13+ if (ALWAYS ) { # fundamental R and/or C code
1414local({
1515 # ' forming arrays
1616
@@ -106,7 +106,18 @@ local({
106106 stop(" Incorrect answer from marginSumsSparse" )
107107 }
108108
109- }
109+ # ' check strategy for avoiding compressed representation of symmetric matrix
110+ A <- matrix (c(10 , 0 , 0 , 1 ,
111+ 0 , 20 , 2 , 7 ,
112+ 0 , 2 , 30 , 0 ,
113+ 1 , 7 , 0 , 40 ),
114+ 4 ,4 )
115+ As <- as(A , " sparseMatrix" )
116+ dfA <- SparseEntries(As )
117+ if (nrow(dfA ) != sum(A != 0 ))
118+ stop(paste(" SparseEntries() does not correctly handle" ,
119+ " the compressed representation of a symmetric matrix" ))
120+ }
110121})
111122
112123
@@ -325,19 +336,35 @@ local({
325336 Mmap3 <- mapSparseEntries(Mempty , 1 , matrix (1 : 10 , 5 , 2 ), across = 3 )
326337
327338 # ' -------------- sparselinalg.R -------------------------
328- U <- aperm(M ,c(3 ,1 ,2 )) # 2 x 5 x 5
329- UU <- sumsymouterSparse(U , dbg = TRUE )
330- w <- matrix (0 , 5 , 5 )
331- w [cbind(1 : 3 ,2 : 4 )] <- 0.5
332- w <- as(w , " sparseMatrix" )
333- UU <- sumsymouterSparse(U , w , dbg = TRUE )
334- Uempty <- sparse3Darray(dims = c(2 ,5 ,5 ))
335- UU <- sumsymouterSparse(Uempty , w , dbg = TRUE )
339+ Us <- aperm(M ,c(3 ,1 ,2 )) # 2 x 5 x 5, sparse3Darray
340+ Um <- as.array(Us )
341+ wm <- matrix (0 , 5 , 5 )
342+ wm [cbind(1 : 3 ,2 : 4 )] <- 0.5
343+ ws <- as(wm , " sparseMatrix" )
344+ bm <- wm + t(wm )
345+ bs <- as(as(bm , " symmetricMatrix" ), " sparseMatrix" )
346+ # # run different cases
347+ UUm <- sumsymouter(Um )
348+ UUs <- sumsymouterSparse(Us , dbg = TRUE )
349+ UUwm <- sumsymouter(Um , wm )
350+ UUws <- sumsymouterSparse(Us , ws , dbg = TRUE )
351+ UUbm <- sumsymouter(Um , bm )
352+ UUbs <- sumsymouterSparse(Us , bs )
353+ Vempty <- sparse3Darray(dims = c(2 ,5 ,5 ))
354+ VVws <- sumsymouterSparse(Vempty , ws )
355+ VVwm <- sumsymouter(as.array(Vempty ), wm )
336356 # ' complex
337- Ucom <- U + U * 1i
338- UU <- sumsymouterSparse(Ucom )
339- UU <- sumsymouterSparse(Ucom , w )
340- # '
357+ Ucom <- Us + Us * 1i
358+ UUc <- sumsymouter(Ucom )
359+ UUcw <- sumsymouter(Ucom , wm )
360+ # # check validity
361+ if (! all(UUs == UUm ))
362+ stop(" sumsymouter(x): sparse and non-sparse algorithms disagree" )
363+ if (! all(UUws == UUwm ))
364+ stop(" sumsymouter(x, w): sparse and non-sparse algorithms disagree" )
365+ if (! all(UUbs == UUbm ))
366+ stop(paste(" sumsymouter(x, w): sparse and non-sparse algorithms disagree" ,
367+ " when w is symmetric" ))
341368 }
342369
343370 # # 1 x 1 x 1 arrays
0 commit comments