@@ -126,6 +126,22 @@ test_that("Fix for #128 (`compute_rank_mahalanobis` ignores index argument) hold
126126
127127})
128128
129+ is_scalar_multiple <- function (A , B ) {
130+ # Ensure dimensions match
131+ if (! all(dim(A ) == dim(B ))) {
132+ return (FALSE )
133+ }
134+
135+ # Find positions where B is non-zero to avoid division by zero
136+ non_zero_positions <- B != 0
137+
138+ # Compute element-wise ratio where B != 0
139+ ratios <- A [non_zero_positions ] / B [non_zero_positions ]
140+
141+ # Check if all ratios are (approximately) equal
142+ return (all(abs(ratios - ratios [1 ]) < 1e-8 ))
143+ }
144+
129145test_that(" compute_pooled_cov_rank_mahalanobis results match ordinary Mahalanobis's" , {
130146 # # nr number of samples
131147 nr <- 10L
@@ -138,10 +154,13 @@ test_that("compute_pooled_cov_rank_mahalanobis results match ordinary Mahalanobi
138154 df [df $ z == 0 , ' X' ] <- seq(1 , by = 2 , len = nr / 2 ) # odds
139155 df [df $ z == 1 , ' X' ] <- seq(2 , by = 2 , len = nr / 2 ) # evens
140156
141- expect_equivalent(match_on(z ~ . , data = df , method = " pooled_cov" ),
142- match_on(z ~ . , data = df , method = " mahalanobis" ))
157+ A <- match_on(z ~ . , data = df , method = " pooled_cov" )
158+ B <- match_on(z ~ . , data = df , method = " mahalanobis" )
159+ # Check if all ratios are (approximately) equal
160+ expect_true(is_scalar_multiple(A , B ))
143161
144162 ez <- exactMatch(z ~ . , data = df )
145- expect_equivalent(match_on(z ~ . , data = df , method = " pooled_cov" , within = ez ),
146- match_on(z ~ . , data = df , method = " mahalanobis" , within = ez ))
163+ A <- match_on(z ~ . , data = df , method = " pooled_cov" , within = ez )
164+ B <- match_on(z ~ . , data = df , method = " mahalanobis" , within = ez )
165+ expect_true(is_scalar_multiple(A , B ))
147166})
0 commit comments