Skip to content

Commit 3bf23a6

Browse files
Gemini: suggested test cases
1 parent 657e8c5 commit 3bf23a6

1 file changed

Lines changed: 62 additions & 3 deletions

File tree

tests/testthat/test-ops64.R

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,8 @@ test_that("Edge cases for character/factor comparisons work", {
388388
})
389389

390390
test_that("power with integer64", {
391+
overflow_warning = "NAs produced by integer64 overflow"
392+
391393
# within integer range
392394
x = as.integer(sqrt(.Machine$integer.max))
393395
x = seq(-x, x)
@@ -397,7 +399,64 @@ test_that("power with integer64", {
397399
# within integer64 range, which fails with double exponent
398400
expect_identical(as.integer64("2147483650")^2L, as.integer64("4611686027017322500"))
399401
expect_identical(as.integer64("-2147483650")^2L, as.integer64("4611686027017322500"))
400-
expect_identical(as.integer64("94906267")^2L, as.integer64("94906267")*as.integer64("94906267"))
401-
402-
expect_warning(expect_identical(as.integer64("2147483650")^3L, NA_integer64_), "NAs produced by integer64 overflow")
402+
expect_identical(as.integer64("94906267")^2L, as.integer64("94906267") * as.integer64("94906267"))
403+
404+
# integer64 base with integer64 exponent
405+
expect_identical(as.integer64(10) ^ as.integer64(3), as.integer64(1000))
406+
expect_identical(as.integer64("2147483650") ^ as.integer64(2), as.integer64("4611686027017322500"))
407+
expect_identical(as.integer64(2) ^ 62L, as.integer64("4611686018427387904"))
408+
expect_identical(as.integer64(2) ^ as.integer64(62), as.integer64("4611686018427387904"))
409+
expect_identical(as.integer64(3) ^ 39L, as.integer64("4052555153018976267"))
410+
411+
# Special bases: 0, 1, -1
412+
expect_identical(as.integer64(0) ^ 0L, as.integer64(1L))
413+
expect_identical(as.integer64(0) ^ 1L, as.integer64(0L))
414+
expect_identical(as.integer64(0) ^ 5L, as.integer64(0L))
415+
expect_warning(expect_identical(as.integer64(0) ^ (-1L), NA_integer64_))
416+
417+
expect_identical(as.integer64(1) ^ 0L, as.integer64(1L))
418+
expect_identical(as.integer64(1) ^ 100L, as.integer64(1L))
419+
expect_identical(as.integer64(1) ^ (-5L), as.integer64(1L))
420+
expect_identical(as.integer64(1) ^ lim.integer64()[2L], as.integer64(1L))
421+
422+
expect_identical(as.integer64(-1) ^ 0L, as.integer64(1L))
423+
expect_identical(as.integer64(-1) ^ 1L, as.integer64(-1L))
424+
expect_identical(as.integer64(-1) ^ 2L, as.integer64(1L))
425+
expect_identical(as.integer64(-1) ^ 3L, as.integer64(-1L))
426+
expect_identical(as.integer64(-1) ^ (-1L), as.integer64(-1L))
427+
expect_identical(as.integer64(-1) ^ (-2L), as.integer64(1L))
428+
expect_identical(as.integer64(-1) ^ (-3L), as.integer64(-1L))
429+
expect_identical(as.integer64(-1) ^ lim.integer64()[2L], as.integer64(-1L))
430+
431+
# Negative exponents with |base| >= 2
432+
expect_identical(as.integer64(2) ^ (-1L), as.integer64(0L))
433+
expect_identical(as.integer64(2) ^ (-5L), as.integer64(0L))
434+
expect_identical(as.integer64(-2) ^ (-1L), as.integer64(0L))
435+
436+
# Overflow detection with both odd and even exponents
437+
expect_warning(expect_identical(as.integer64("2147483650") ^ 3L, NA_integer64_), overflow_warning)
438+
expect_warning(expect_identical(as.integer64(100000) ^ 8L, NA_integer64_), overflow_warning)
439+
expect_warning(expect_identical(as.integer64(2) ^ 63L, NA_integer64_), overflow_warning)
440+
expect_warning(expect_identical(as.integer64(2) ^ 64L, NA_integer64_), overflow_warning)
441+
expect_warning(expect_identical(as.integer64(3) ^ 40L, NA_integer64_), overflow_warning)
442+
expect_warning(expect_identical(as.integer64(3) ^ 64L, NA_integer64_), overflow_warning)
443+
expect_warning(expect_identical(lim.integer64()[1L] ^ 2L, NA_integer64_), overflow_warning)
444+
expect_warning(expect_identical(lim.integer64()[2L] ^ 2L, NA_integer64_), overflow_warning)
445+
446+
# Missing values and empty inputs
447+
expect_no_warning(expect_identical(NA_integer64_ ^ 2L, NA_integer64_))
448+
expect_no_warning(expect_identical(as.integer64(2) ^ NA_integer_, NA_integer64_))
449+
expect_no_warning(expect_identical(as.integer64(2) ^ NA_integer64_, NA_integer64_))
450+
expect_no_warning(expect_identical(as.integer64(2) ^ NA_real_, NA_integer64_))
451+
expect_identical(integer64(0) ^ 2L, integer64(0))
452+
expect_identical(as.integer64(2) ^ integer(0), integer64(0))
453+
expect_identical(integer64(0) ^ integer(0), integer64(0))
454+
455+
# Vectorization and recycling
456+
expect_identical(c(as.integer64(2), as.integer64(3)) ^ 2L, as.integer64(c(4, 9)))
457+
expect_identical(as.integer64(2) ^ c(1L, 2L, 3L), as.integer64(c(2, 4, 8)))
458+
expect_warning(
459+
expect_identical(c(as.integer64(2), as.integer64(2)) ^ c(2L, 64L), c(as.integer64(4), NA_integer64_)),
460+
overflow_warning
461+
)
403462
})

0 commit comments

Comments
 (0)