Skip to content

Commit 4b4ea7f

Browse files
Gemini: more tests for coverage
1 parent a83b8e2 commit 4b4ea7f

3 files changed

Lines changed: 48 additions & 0 deletions

File tree

tests/testthat/test-integer64.R

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ test_that("integer64 coercion to/from other types works for NA", {
5959
expect_identical(as.integer64(NA_integer_), NA_integer64_)
6060
expect_identical(as.integer64(NA_real_), NA_integer64_)
6161
expect_identical(as.integer64(NA_character_), NA_integer64_)
62+
63+
# Boundary and warning conditions for conversions
64+
expect_warning(as.double(as.integer64("18014398509481984")), "integer precision lost while converting to double")
65+
expect_warning(as.integer(as.integer64(2)^33), "NAs produced by integer overflow")
66+
expect_warning(
67+
as.integer64(structure(paste(rep("1", 65), collapse=""), class="bitstring")),
68+
"bitstrings longer than 64 bytes converted to NA"
69+
)
70+
expect_identical(mean(as.integer64(1:5), na.rm = FALSE), as.integer64(3L))
6271
})
6372

6473
test_that("integer64 coercion to/from factor types works", {

tests/testthat/test-matrix64.R

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,41 @@ test_that("matrix multiplication", {
274274
expect_identical(matrix(x, 1L)%*%matrix(x, ncol=1L), matrix(NA_integer64_, 1L, 1L)),
275275
"NAs produced by integer64 overflow"
276276
)
277+
expect_warning(
278+
expect_identical(matrix(4e9, 1L, 1L)%*%matrix(x, ncol=1L), matrix(NA_integer64_, 1L, 1L)),
279+
"NAs produced by integer64 overflow"
280+
)
281+
expect_warning(
282+
expect_identical(matrix(x, 1L)%*%matrix(4e9, ncol=1L), matrix(NA_integer64_, 1L, 1L)),
283+
"NAs produced by integer64 overflow"
284+
)
277285

278286
# warning in summation part
279287
x = rep_len(as.integer64("3000000000"), 2L) # x**2 < 2^63, but 2 * x**2 > 2^63
280288
expect_warning(
281289
expect_identical(matrix(x, 1L)%*%matrix(x, ncol=1L), matrix(NA_integer64_, 1L, 1L)),
282290
"NAs produced by integer64 overflow"
283291
)
292+
expect_warning(
293+
expect_identical(matrix(c(3e9, 3e9), 1L, 2L)%*%matrix(x, ncol=1L), matrix(NA_integer64_, 1L, 1L)),
294+
"NAs produced by integer64 overflow"
295+
)
296+
expect_warning(
297+
expect_identical(matrix(x, 1L)%*%matrix(c(3e9, 3e9), ncol=1L), matrix(NA_integer64_, 1L, 1L)),
298+
"NAs produced by integer64 overflow"
299+
)
300+
301+
# NA propagation in matrix multiplication
302+
m_na64 = matrix(c(as.integer64(1L), NA_integer64_), 1L, 2L)
303+
m_val64 = matrix(as.integer64(c(1L, 1L)), 2L, 1L)
304+
m_na_dbl = matrix(c(1.0, NA_real_), 1L, 2L)
305+
m_val_dbl = matrix(c(1.0, 1.0), 2L, 1L)
306+
307+
expect_no_warning(expect_identical(m_na64 %*% m_val64, matrix(NA_integer64_, 1L, 1L)))
308+
expect_no_warning(expect_identical(m_na_dbl %*% m_val64, matrix(NA_integer64_, 1L, 1L)))
309+
expect_no_warning(expect_identical(m_na64 %*% m_val_dbl, matrix(NA_integer64_, 1L, 1L)))
310+
expect_no_warning(expect_identical(t(m_val_dbl) %*% matrix(c(as.integer64(1L), NA_integer64_), 2L, 1L), matrix(NA_integer64_, 1L, 1L)))
311+
expect_no_warning(expect_identical(t(m_val64) %*% matrix(c(1.0, NA_real_), 2L, 1L), matrix(NA_integer64_, 1L, 1L)))
284312

285313
})
286314

tests/testthat/test-ops64.R

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,22 @@ test_that("Overflow edge cases for arithmetic and summary functions", {
223223
expect_no_warning(expect_identical(NA_integer64_ * 2L, NA_integer64_))
224224
expect_no_warning(expect_identical(2L * NA_integer64_, NA_integer64_))
225225
expect_no_warning(expect_identical(sum(NA_integer64_), NA_integer64_))
226+
expect_no_warning(expect_identical(sum(c(as.integer64(1L), NA_integer64_), na.rm = FALSE), NA_integer64_))
227+
expect_no_warning(expect_identical(sum(c(as.integer64(1:2), NA_integer64_), na.rm = TRUE), as.integer64(3L)))
228+
expect_warning(expect_identical(sum(c(max_val, as.integer64(1L), NA_integer64_), na.rm = TRUE), NA_integer64_), overflow_warning)
226229
expect_no_warning(expect_identical(prod(NA_integer64_), NA_integer64_))
230+
expect_no_warning(expect_identical(prod(c(as.integer64(1L), NA_integer64_), na.rm = FALSE), NA_integer64_))
231+
expect_no_warning(expect_identical(prod(c(as.integer64(2:3), NA_integer64_), na.rm = TRUE), as.integer64(6L)))
232+
expect_warning(expect_identical(prod(c(max_val, as.integer64(2L), NA_integer64_), na.rm = TRUE), NA_integer64_), overflow_warning)
227233
expect_no_warning(expect_identical(cumsum(c(NA_integer64_, 1L)), c(NA_integer64_, NA_integer64_)))
228234
expect_no_warning(expect_identical(cumprod(c(NA_integer64_, 1L)), c(NA_integer64_, NA_integer64_)))
229235
expect_no_warning(expect_identical(diff(c(NA_integer64_, as.integer64(1L))), NA_integer64_))
230236
expect_no_warning(expect_identical(diff(c(as.integer64(1L), NA_integer64_)), NA_integer64_))
237+
238+
# Vectorized operations with partial overflow
239+
expect_warning(expect_identical(c(max_val, as.integer64(1L)) + 1L, c(NA_integer64_, as.integer64(2L))), overflow_warning)
240+
expect_warning(expect_identical(c(min_val, as.integer64(1L)) - 1L, c(NA_integer64_, as.integer64(0L))), overflow_warning)
241+
expect_warning(expect_identical(c(max_val, as.integer64(1L)) * 2L, c(NA_integer64_, as.integer64(2L))), overflow_warning)
231242
})
232243

233244
test_that("Logical operators", {

0 commit comments

Comments
 (0)