Skip to content

Commit 5b3c826

Browse files
touch-up esp. comments
1 parent e93508f commit 5b3c826

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

tests/testthat/test-ops64.R

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ test_that("Overflow edge cases for arithmetic and summary functions", {
173173

174174
overflow_warning = "NAs produced by integer64 overflow"
175175

176-
# 1. C-level overflow (exceeds LLONG_MAX or below LLONG_MIN)
176+
# True C-level overflow (above LLONG_MAX or below LLONG_MIN)
177177
expect_warning(expect_identical(max_val + 1L, NA_integer64_), overflow_warning)
178178
expect_warning(expect_identical(min_val + (-2L), NA_integer64_), overflow_warning)
179179
expect_warning(expect_identical(max_val - (-1L), NA_integer64_), overflow_warning)
@@ -183,23 +183,27 @@ test_that("Overflow edge cases for arithmetic and summary functions", {
183183
expect_warning(expect_identical(min_val * (-2L), NA_integer64_), overflow_warning)
184184
expect_warning(expect_identical(diff(c(max_val, min_val - 1L)), NA_integer64_), overflow_warning)
185185

186-
# 2. NA_INTEGER64 sentinel collision: mathematical result is exactly LLONG_MIN (-2^63).
187-
# C-level __builtin_*_overflow does NOT overflow, but bit64 treats LLONG_MIN as NA.
188-
# These must produce NA_integer64_ with an overflow warning.
186+
# R-specific overflow (result is exactly LLONG_MIN == NA_INTEGER64, so C arithmetic
187+
# works, but overflow is nevertheless reported as R's integer64 class has narrower range
189188
expect_warning(expect_identical(min_val + (-1L), NA_integer64_), overflow_warning)
190189
expect_warning(expect_identical(half_min + half_min, NA_integer64_), overflow_warning)
191190
expect_warning(expect_identical(min_val - 1L, NA_integer64_), overflow_warning)
192191
expect_warning(expect_identical(as.integer64(-2L) * half_max, NA_integer64_), overflow_warning)
193-
expect_warning(expect_identical(as.integer64("-2147483648") * as.integer64("4294967296"), NA_integer64_), overflow_warning)
192+
expect_warning(
193+
expect_identical(as.integer64("-2147483648") * as.integer64("4294967296"), NA_integer64_),
194+
overflow_warning
195+
)
194196
expect_warning(expect_identical(diff(c(as.integer64(1L), min_val)), NA_integer64_), overflow_warning)
195197
expect_warning(expect_identical(sum(min_val, -1L), NA_integer64_), overflow_warning)
196198
expect_warning(expect_identical(sum(c(half_min, half_min)), NA_integer64_), overflow_warning)
197199
expect_warning(expect_identical(prod(as.integer64(-2L), half_max), NA_integer64_), overflow_warning)
198200
expect_warning(expect_identical(cumsum(c(min_val, -1L)), c(min_val, NA_integer64_)), overflow_warning)
199-
expect_warning(expect_identical(cumprod(c(as.integer64(-2L), half_max)), c(as.integer64(-2L), NA_integer64_)), overflow_warning)
201+
expect_warning(
202+
expect_identical(cumprod(c(as.integer64(-2L), half_max)), c(as.integer64(-2L), NA_integer64_)),
203+
overflow_warning
204+
)
200205

201-
# 3. Boundary cases that are exactly on the representable range [-2^63 + 1, 2^63 - 1]
202-
# These must NOT overflow or warn.
206+
# Boundary cases that _don't_ overflow
203207
expect_identical(min_val + 0L, min_val)
204208
expect_identical(min_val + 1L, as.integer64("-9223372036854775806"))
205209
expect_identical(half_min + (half_min + 1L), min_val)
@@ -211,7 +215,7 @@ test_that("Overflow edge cases for arithmetic and summary functions", {
211215
expect_identical(sum(min_val, 0L), min_val)
212216
expect_identical(prod(min_val, 1L), min_val)
213217

214-
# 4. NA propagation: when NA_INTEGER64 is an input, it should return NA without warning
218+
# If NA is present, NA is returned without overflow
215219
expect_no_warning(expect_identical(NA_integer64_ + 1L, NA_integer64_))
216220
expect_no_warning(expect_identical(1L + NA_integer64_, NA_integer64_))
217221
expect_no_warning(expect_identical(NA_integer64_ - 1L, NA_integer64_))

0 commit comments

Comments
 (0)