Skip to content

Commit 3c044ce

Browse files
authored
deactivate froll tests (#7429)
* deactivate froll tests * change activation logic * add optional parameter and move batch tests * make batch tests optional * change var name and dont run optional on github * deactivate optional for R-CMD-check on github
1 parent f1aab37 commit 3c044ce

File tree

7 files changed

+367
-339
lines changed

7 files changed

+367
-339
lines changed

.github/workflows/R-CMD-check-occasional.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ jobs:
4242

4343
env:
4444
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
45+
RUN_ALL_DATATABLE_TESTS: yes
4546

4647
steps:
4748
- name: Set locale

.gitlab-ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ variables:
1313
TZ: "UTC" ## to avoid 'Failed to create bus connection' from timedatectl via Sys.timezone() on Docker with R 3.4.
1414
## Setting TZ for all GLCI jobs to isolate them from timezone. We could have a new GLCI job to test under
1515
## a non-UTC timezone, although, that's what we do routinely in dev.
16+
RUN_ALL_DATATABLE_TESTS: "yes" ## run optional tests in CI
1617
R_REL_VERSION: "4.5" # only raise when RTOOLS for REL is available
1718
R_REL_WIN_BIN: "https://cloud.r-project.org/bin/windows/base/old/4.5.0/R-4.5.0-win.exe"
1819
R_DEV_VERSION: "4.6"

R/test.data.table.R

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=FALSE, showProgress=interactive()&&!silent, testPattern=NULL,
2-
memtest=Sys.getenv("TEST_DATA_TABLE_MEMTEST", 0L), memtest.id=NULL) {
3-
stopifnot(isTRUEorFALSE(verbose), isTRUEorFALSE(silent), isTRUEorFALSE(showProgress))
2+
memtest=Sys.getenv("TEST_DATA_TABLE_MEMTEST", 0L), memtest.id=NULL, optional=FALSE) {
3+
stopifnot(isTRUEorFALSE(verbose), isTRUEorFALSE(silent), isTRUEorFALSE(showProgress), isTRUEorFALSE(optional))
4+
5+
# Skip optional tests unless RUN_ALL_DATATABLE_TESTS is set
6+
if (optional && Sys.getenv("RUN_ALL_DATATABLE_TESTS") != "yes") {
7+
return(invisible(TRUE))
8+
}
9+
410
memtest = as.integer(memtest)
511
stopifnot(length(memtest)==1L, memtest %in% 0:2)
612
memtest.id = as.integer(memtest.id)

inst/tests/froll.Rraw

Lines changed: 0 additions & 336 deletions
Original file line numberDiff line numberDiff line change
@@ -2304,339 +2304,3 @@ test(6015.907, frolladapt(c(1L,3L,2L), 2L), error="be sorted, have no duplicates
23042304
test(6015.908, frolladapt(c(1L,2L,2L), 2L), error="be sorted, have no duplicates, have no NAs")
23052305
test(6015.909, frolladapt(c(1L,2L,NA_integer_), 2L), error="be sorted, have no duplicates, have no NAs") ## loop that checks for sorted will detect NAs as well, except for first element
23062306
test(6015.910, frolladapt(c(NA_integer_,1L,2L), 2L), error="be sorted, have no duplicates, have no NAs") ## first NA is detected by extra check
2307-
2308-
## batch validation
2309-
set.seed(108)
2310-
makeNA = function(x, ratio=0.1, nf=FALSE) {
2311-
n = as.integer(length(x) * ratio)
2312-
id = sample(length(x), n)
2313-
if (!nf) {
2314-
x[id] = NA
2315-
} else {
2316-
x[id[1:(n/4)]] = NA
2317-
x[id[(n/4+1):(n/2)]] = NaN
2318-
x[id[(n/2+1):(3*n/4)]] = -Inf
2319-
x[id[(3*n/4+1):n]] = +Inf
2320-
}
2321-
x
2322-
}
2323-
## against base to verify exactness of non-finite values, not handled in zoo
2324-
rollfun = function(x, n, FUN, fill=NA_real_, na.rm=FALSE, nf.rm=FALSE, partial=FALSE) {
2325-
ans = rep(fill, nx<-length(x))
2326-
f = match.fun(FUN)
2327-
if (nf.rm) x[is.infinite(x)] = NA_real_
2328-
for (i in seq_along(x)) {
2329-
ans[i] = if (n==0)
2330-
f(x[integer()], na.rm=na.rm)
2331-
else if (i >= n)
2332-
f(x[(i-n+1L):i], na.rm=na.rm)
2333-
else if (partial)
2334-
f(x[max((i-n+1), 1L):i], na.rm=na.rm)
2335-
else
2336-
as.double(fill)
2337-
}
2338-
ans
2339-
}
2340-
base_compare = function(x, n, funs=c("mean","sum","max","min","prod","median","var","sd"), algos=c("fast","exact")) {
2341-
num.step = 0.0001
2342-
for (fun in funs) {
2343-
for (na.rm in c(FALSE, TRUE)) {
2344-
for (fill in c(NA_real_, 0)) {
2345-
for (partial in c(FALSE,TRUE)) {
2346-
for (has.nf in c(NA,TRUE,FALSE)) {
2347-
if (identical(has.nf, FALSE)) {
2348-
if (na.rm)
2349-
next ## errors "not make sense"
2350-
if (any(!is.finite(x)))
2351-
next ## do not test warnings (mean, sum) or incorrect expect results (max)
2352-
}
2353-
for (algo in algos) {
2354-
num <<- num + num.step
2355-
eval(substitute( # so we can have values displayed in output/log rather than variables
2356-
test(.num, ignore.warning="no non-missing arguments",
2357-
rollfun(x, n, FUN=.fun, fill=.fill, na.rm=.na.rm, partial=.partial),
2358-
froll(.fun, x, n, fill=.fill, na.rm=.na.rm, algo=.algo, partial=.partial, has.nf=.has.nf)),
2359-
list(.num=num, .fun=fun, .fill=fill, .na.rm=na.rm, .algo=algo, .partial=partial, .has.nf=has.nf)
2360-
))
2361-
}
2362-
}
2363-
num <<- num + num.step
2364-
eval(substitute( # so we can have values displayed in output/log rather than variables
2365-
test(.num, ignore.warning="no non-missing arguments",
2366-
frollapply(x, n, FUN=match.fun(.fun), fill=.fill, na.rm=.na.rm, partial=.partial),
2367-
froll(.fun, x, n, fill=.fill, na.rm=.na.rm, partial=.partial)),
2368-
list(.num=num, .fun=fun, .fill=fill, .na.rm=na.rm, .partial=partial)
2369-
))
2370-
}
2371-
}
2372-
}
2373-
}
2374-
}
2375-
num = 7000.0
2376-
x = rnorm(1e3); n = 50
2377-
base_compare(x, n)
2378-
x = rnorm(1e3+1); n = 50 ## uneven len
2379-
base_compare(x, n)
2380-
x = rnorm(1e3); n = 51 ## uneven window
2381-
base_compare(x, n)
2382-
x = rnorm(1e3+1); n = 51
2383-
base_compare(x, n)
2384-
x = sort(rnorm(1e3)); n = 50 ## inc
2385-
base_compare(x, n)
2386-
x = sort(rnorm(1e3+1)); n = 50
2387-
base_compare(x, n)
2388-
x = sort(rnorm(1e3)); n = 51
2389-
base_compare(x, n)
2390-
x = sort(rnorm(1e3+1)); n = 51
2391-
base_compare(x, n)
2392-
x = rev(sort(rnorm(1e3))); n = 50 ## desc
2393-
base_compare(x, n)
2394-
x = rev(sort(rnorm(1e3+1))); n = 50
2395-
base_compare(x, n)
2396-
x = rev(sort(rnorm(1e3))); n = 51
2397-
base_compare(x, n)
2398-
x = rev(sort(rnorm(1e3+1))); n = 51
2399-
base_compare(x, n)
2400-
x = rep(rnorm(1), 1e3); n = 50 ## const
2401-
base_compare(x, n)
2402-
x = rep(rnorm(1), 1e3+1); n = 50
2403-
base_compare(x, n)
2404-
x = rep(rnorm(1), 1e3); n = 51
2405-
base_compare(x, n)
2406-
x = rep(rnorm(1), 1e3+1); n = 51
2407-
base_compare(x, n)
2408-
num = 7100.0
2409-
## random NA non-finite
2410-
x = makeNA(rnorm(1e3), nf=TRUE); n = 50
2411-
base_compare(x, n)
2412-
x = makeNA(rnorm(1e3+1), nf=TRUE); n = 50
2413-
base_compare(x, n)
2414-
x = makeNA(rnorm(1e3), nf=TRUE); n = 51
2415-
base_compare(x, n)
2416-
x = makeNA(rnorm(1e3+1), nf=TRUE); n = 51
2417-
base_compare(x, n)
2418-
x = makeNA(rnorm(1e3), nf=TRUE); n = 0
2419-
base_compare(x, n)
2420-
2421-
#### against zoo
2422-
if (requireNamespace("zoo", quietly=TRUE)) {
2423-
drollapply = function(...) as.double(zoo::rollapply(...)) # rollapply is not consistent in data type of answer, force to double
2424-
zoo_compare = function(x, n, funs=c("mean","sum","max","min","prod","median","var","sd"), algos=c("fast","exact")) {
2425-
num.step = 0.0001
2426-
#### fun, align, na.rm, fill, algo, partial
2427-
for (fun in funs) {
2428-
for (align in c("right","center","left")) {
2429-
for (na.rm in c(FALSE, TRUE)) {
2430-
for (fill in c(NA_real_, 0)) {
2431-
for (partial in c(FALSE,TRUE)) {
2432-
if (partial && align=="center")
2433-
next ## not implemented
2434-
for (has.nf in c(NA,TRUE,FALSE)) {
2435-
if (identical(has.nf, FALSE)) {
2436-
if (na.rm)
2437-
next ## errors "not make sense"
2438-
if (any(!is.finite(x)))
2439-
next ## do not test warnings (mean, sum, prod) or incorrect expect results (max, min, median)
2440-
}
2441-
for (algo in algos) {
2442-
num <<- num + num.step
2443-
eval(substitute( # so we can have values displayed in output/log rather than variables
2444-
test(.num, ignore.warning="no non-missing arguments",
2445-
drollapply(x, n, FUN=.fun, fill=.fill, align=.align, na.rm=.na.rm, partial=.partial),
2446-
froll(.fun, x, n, align=.align, fill=.fill, na.rm=.na.rm, algo=.algo, partial=.partial, has.nf=.has.nf)),
2447-
list(.num=num, .fun=fun, .align=align, .fill=fill, .na.rm=na.rm, .algo=algo, .partial=partial, .has.nf=has.nf)
2448-
))
2449-
}
2450-
}
2451-
num <<- num + num.step
2452-
eval(substitute( # so we can have values displayed in output/log rather than variables
2453-
test(.num, ignore.warning="no non-missing arguments",
2454-
frollapply(x, n, FUN=.fun, fill=.fill, align=.align, na.rm=.na.rm, partial=.partial),
2455-
froll(.fun, x, n, align=.align, fill=.fill, na.rm=.na.rm, partial=.partial)),
2456-
list(.num=num, .fun=fun, .align=align, .fill=fill, .na.rm=na.rm, .partial=partial)
2457-
))
2458-
}
2459-
}
2460-
}
2461-
}
2462-
}
2463-
}
2464-
num = 7200.0
2465-
## no NA
2466-
x = rnorm(1e3); n = 50 # x even, n even
2467-
zoo_compare(x, n)
2468-
x = rnorm(1e3+1); n = 50 # x odd, n even
2469-
zoo_compare(x, n)
2470-
x = rnorm(1e3); n = 51 # x even, n odd
2471-
zoo_compare(x, n)
2472-
x = rnorm(1e3+1); n = 51 # x odd, n odd
2473-
zoo_compare(x, n)
2474-
## leading and trailing NAs
2475-
x = c(rep(NA, 60), rnorm(1e3), rep(NA, 60)); n = 50
2476-
zoo_compare(x, n)
2477-
x = c(rep(NA, 60), rnorm(1e3+1), rep(NA, 60)); n = 50
2478-
zoo_compare(x, n)
2479-
x = c(rep(NA, 60), rnorm(1e3), rep(NA, 60)); n = 51
2480-
zoo_compare(x, n)
2481-
x = c(rep(NA, 60), rnorm(1e3+1), rep(NA, 60)); n = 51
2482-
zoo_compare(x, n)
2483-
## random NA
2484-
x = makeNA(rnorm(1e3)); n = 50
2485-
zoo_compare(x, n)
2486-
x = makeNA(rnorm(1e3+1)); n = 50
2487-
zoo_compare(x, n)
2488-
x = makeNA(rnorm(1e3)); n = 51
2489-
zoo_compare(x, n)
2490-
x = makeNA(rnorm(1e3+1)); n = 51
2491-
zoo_compare(x, n)
2492-
}
2493-
#### adaptive moving average compare
2494-
arollfun = function(FUN, x, n, na.rm=FALSE, align=c("right","left"), fill=NA, nf.rm=FALSE, partial=FALSE) {
2495-
# adaptive moving average in R
2496-
stopifnot((nx<-length(x))==length(n))
2497-
align = match.arg(align)
2498-
ans = rep(fill, nx)
2499-
if (nf.rm) x[is.infinite(x)] = NA_real_
2500-
f = match.fun(FUN)
2501-
if (align=="right") {
2502-
for (i in seq_along(x)) {
2503-
if (n[i] == 0)
2504-
ans[i] = f(x[integer()], na.rm=na.rm)
2505-
else if (i >= n[i])
2506-
ans[i] = f(x[(i-n[i]+1L):i], na.rm=na.rm)
2507-
else if (partial)
2508-
ans[i] = f(x[1L:i], na.rm=na.rm)
2509-
}
2510-
} else {
2511-
for (i in seq_along(x)) {
2512-
if (n[i] == 0)
2513-
ans[i] = f(x[integer()], na.rm=na.rm)
2514-
else if (i <= nx-n[i]+1)
2515-
ans[i] = f(x[i:(i+n[i]-1L)], na.rm=na.rm)
2516-
else if (partial)
2517-
ans[i] = f(x[i:length(x)], na.rm=na.rm)
2518-
}
2519-
}
2520-
ans
2521-
}
2522-
afun_compare = function(x, n, funs=c("mean","sum","max","min","prod","median","var","sd"), algos=c("fast","exact")) {
2523-
num.step = 0.0001
2524-
#### fun, align, na.rm, fill, algo
2525-
for (fun in funs) {
2526-
for (align in c("right","left")) {
2527-
for (na.rm in c(FALSE, TRUE)) {
2528-
for (fill in c(NA_real_, 0)) {
2529-
for (partial in c(FALSE, TRUE)) {
2530-
for (has.nf in c(NA, TRUE, FALSE)) {
2531-
if (identical(has.nf, FALSE)) {
2532-
if (na.rm) {
2533-
next
2534-
} ## errors "not make sense"
2535-
if (any(!is.finite(x))) {
2536-
next
2537-
} ## do not test warnings (mean, sum, prod) or incorrect expect results (max, min, median)
2538-
}
2539-
for (algo in algos) {
2540-
num <<- num + num.step
2541-
eval(substitute(
2542-
test(.num,
2543-
ignore.warning = "no non-missing arguments",
2544-
arollfun(.fun, x, n, fill = .fill, na.rm = .na.rm, align = .align, partial=.partial),
2545-
froll(.fun, x, n, fill=.fill, na.rm=.na.rm, algo=.algo, adaptive=TRUE, align=.align, has.nf=.has.nf, partial=.partial)
2546-
),
2547-
list(.num = num, .fun = fun, .fill = fill, .na.rm = na.rm, .algo = algo, .align = align, .partial=partial, .has.nf = has.nf)
2548-
))
2549-
}
2550-
}
2551-
}
2552-
num <<- num + num.step
2553-
eval(substitute(
2554-
test(.num, ignore.warning="no non-missing arguments",
2555-
frollapply(x, n, FUN=match.fun(.fun), fill=.fill, na.rm=.na.rm, adaptive=TRUE, align=.align),
2556-
froll(.fun, x, n, fill=.fill, na.rm=.na.rm, adaptive=TRUE, align=.align)),
2557-
list(.num=num, .fun=fun, .fill=fill, .na.rm=na.rm, .align=align)
2558-
))
2559-
}
2560-
}
2561-
}
2562-
}
2563-
}
2564-
num = 7300.0
2565-
x = rnorm(1e3); n = sample(50, length(x), TRUE)
2566-
afun_compare(x, n)
2567-
x = rnorm(1e3+1); n = sample(50, length(x), TRUE) ## uneven len
2568-
afun_compare(x, n)
2569-
x = rnorm(1e3); n = sample(51, length(x), TRUE) ## uneven window
2570-
afun_compare(x, n)
2571-
x = rnorm(1e3+1); n = sample(51, length(x), TRUE)
2572-
afun_compare(x, n)
2573-
x = sort(rnorm(1e3)); n = sample(50, length(x), TRUE) ## inc
2574-
afun_compare(x, n)
2575-
x = sort(rnorm(1e3+1)); n = sample(50, length(x), TRUE)
2576-
afun_compare(x, n)
2577-
x = sort(rnorm(1e3)); n = sample(51, length(x), TRUE)
2578-
afun_compare(x, n)
2579-
x = sort(rnorm(1e3+1)); n = sample(51, length(x), TRUE)
2580-
afun_compare(x, n)
2581-
x = rev(sort(rnorm(1e3))); n = sample(50, length(x), TRUE) ## desc
2582-
afun_compare(x, n)
2583-
x = rev(sort(rnorm(1e3+1))); n = sample(50, length(x), TRUE)
2584-
afun_compare(x, n)
2585-
x = rev(sort(rnorm(1e3))); n = sample(51, length(x), TRUE)
2586-
afun_compare(x, n)
2587-
x = rev(sort(rnorm(1e3+1))); n = sample(51, length(x), TRUE)
2588-
afun_compare(x, n)
2589-
x = rep(rnorm(1), 1e3); n = sample(50, length(x), TRUE) ## const
2590-
afun_compare(x, n)
2591-
x = rep(rnorm(1), 1e3+1); n = sample(50, length(x), TRUE)
2592-
afun_compare(x, n)
2593-
x = rep(rnorm(1), 1e3); n = sample(51, length(x), TRUE)
2594-
afun_compare(x, n)
2595-
x = rep(rnorm(1), 1e3+1); n = sample(51, length(x), TRUE)
2596-
afun_compare(x, n)
2597-
num = 7400.0
2598-
#### no NA
2599-
x = rnorm(1e3); n = sample(50, length(x), TRUE) # x even, n even
2600-
afun_compare(x, n)
2601-
x = rnorm(1e3+1); n = sample(50, length(x), TRUE) # x odd, n even
2602-
afun_compare(x, n)
2603-
x = rnorm(1e3); n = sample(51, length(x), TRUE) # x even, n odd
2604-
afun_compare(x, n)
2605-
x = rnorm(1e3+1); n = sample(51, length(x), TRUE) # x odd, n odd
2606-
afun_compare(x, n)
2607-
x = rnorm(1e3); n = sample(0:49, length(x), TRUE) # x even, n even
2608-
afun_compare(x, n)
2609-
#### leading and trailing NAs
2610-
x = c(rep(NA, 60), rnorm(1e3), rep(NA, 60)); n = sample(50, length(x), TRUE)
2611-
afun_compare(x, n)
2612-
x = c(rep(NA, 60), rnorm(1e3+1), rep(NA, 60)); n = sample(50, length(x), TRUE)
2613-
afun_compare(x, n)
2614-
x = c(rep(NA, 60), rnorm(1e3), rep(NA, 60)); n = sample(51, length(x), TRUE)
2615-
afun_compare(x, n)
2616-
x = c(rep(NA, 60), rnorm(1e3+1), rep(NA, 60)); n = sample(51, length(x), TRUE)
2617-
afun_compare(x, n)
2618-
x = c(rep(NA, 60), rnorm(1e3), rep(NA, 60)); n = sample(0:49, length(x), TRUE)
2619-
afun_compare(x, n)
2620-
#### random NA
2621-
x = makeNA(rnorm(1e3)); n = sample(50, length(x), TRUE)
2622-
afun_compare(x, n)
2623-
x = makeNA(rnorm(1e3+1)); n = sample(50, length(x), TRUE)
2624-
afun_compare(x, n)
2625-
x = makeNA(rnorm(1e3)); n = sample(51, length(x), TRUE)
2626-
afun_compare(x, n)
2627-
x = makeNA(rnorm(1e3+1)); n = sample(51, length(x), TRUE)
2628-
afun_compare(x, n)
2629-
x = makeNA(rnorm(1e3)); n = sample(0:49, length(x), TRUE)
2630-
afun_compare(x, n)
2631-
#### random NA non-finites
2632-
x = makeNA(rnorm(1e3), nf=TRUE); n = sample(50, length(x), TRUE)
2633-
afun_compare(x, n)
2634-
x = makeNA(rnorm(1e3+1), nf=TRUE); n = sample(50, length(x), TRUE)
2635-
afun_compare(x, n)
2636-
x = makeNA(rnorm(1e3), nf=TRUE); n = sample(51, length(x), TRUE)
2637-
afun_compare(x, n)
2638-
x = makeNA(rnorm(1e3+1), nf=TRUE); n = sample(51, length(x), TRUE)
2639-
afun_compare(x, n)
2640-
x = makeNA(rnorm(1e3), nf=TRUE); n = sample(0:49, length(x), TRUE)
2641-
afun_compare(x, n)
2642-
rm(num)

0 commit comments

Comments
 (0)