R Under development (unstable) (2026-01-23 r89325 ucrt) -- "Unsuffered Consequences" Copyright (C) 2026 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(mfdb) > library(unittest, quietly = TRUE) > helpers <- c('utils/helpers.R', 'tests/utils/helpers.R') ; source(helpers[file.exists(helpers)]) > > g <- NULL > mdb <- fake_mdb() > > ok_group("Can generate objects", { + ok(ut_cmp_error( + mfdb_interval("l", c()), + "vect must at least be 2 items long")) + ok(ut_cmp_error( + mfdb_interval("l", c(1)), + "vect must at least be 2 items long")) + + ok(ut_cmp_identical( + class(mfdb_interval("l", c(1, 100))), + c("mfdb_interval", "mfdb_aggregate"))) + }) # Can generate objects ok - ut_cmp_error(mfdb_interval("l", c()), "vect must at least be ok - ut_cmp_error(mfdb_interval("l", c(1)), "vect must at least b ok - ut_cmp_identical(class(mfdb_interval("l", c(1, 100))), c("mf > > ok_group("Elements are named by prefixes", local({ + ok(ut_cmp_identical( + agg_summary(mdb, mfdb_interval("l", c(10,20,25,30)), 'col', 'out', data.frame(), 0), + list( + l10 = structure(call("seq", 10, 19), min = 10, max = 20), + l20 = structure(call("seq", 20, 24), min = 20, max = 25), + l25 = structure(call("seq", 25, 29), min = 25, max = 30)))) + ok(ut_cmp_identical( + agg_summary(mdb, mfdb_interval("l", c(5,15,25,30)), 'col', 'out', data.frame(), 0), + list( + l5 = structure(call("seq", 5, 14), min = 5, max = 15), + l15 = structure(call("seq", 15, 24), min = 15, max = 25), + l25 = structure(call("seq", 25, 29), min = 25, max = 30)))) + + ok(ut_cmp_identical( + agg_summary(mdb, mfdb_interval("l", c(5,15,25,30), open_ended = c('upper')), 'col', 'out', data.frame(), 0), + list( + l5 = structure(call("seq", 5, 14), min = 5, max = 15), + l15 = structure(call("seq", 15, 24), min = 15, max = 25), + l25 = structure(call("seq", 25, 29), min = 25, max = 30, max_open_ended = TRUE))), "agg_summary: open_ended=upper goes on final group") + + ok(ut_cmp_identical( + agg_summary(mdb, mfdb_interval("l", c(5,15,25,30), open_ended = c('lower')), 'col', 'out', data.frame(), 0), + list( + l5 = structure(call("seq", 5, 14), min = 5, max = 15, min_open_ended = TRUE), + l15 = structure(call("seq", 15, 24), min = 15, max = 25), + l25 = structure(call("seq", 25, 29), min = 25, max = 30))), "agg_summary: open_ended=lower goes on first group") + + ok(ut_cmp_identical( + agg_summary(mdb, mfdb_interval("l", c(5, 15), open_ended = c('lower', 'upper')), 'col', 'out', data.frame(), 0), + list( + l5 = structure( + call("seq", 5, 14), + min = 5, + max = 15, + min_open_ended = TRUE, + max_open_ended = TRUE))), "agg_summary: Can have both on a single group") + + + }, asNamespace('mfdb'))) # Elements are named by prefixes ok - ut_cmp_identical(agg_summary(mdb, mfdb_interval("l", c(10, 2 ok - ut_cmp_identical(agg_summary(mdb, mfdb_interval("l", c(5, 15 ok - agg_summary: open_ended=upper goes on final group ok - agg_summary: open_ended=lower goes on first group ok - agg_summary: Can have both on a single group > > ok_group("Can generate SQL", local({ + ok(ut_cmp_identical( + select_clause(mdb, mfdb_interval("l", c(10,20,30)), "col", "outname"), + "CASE WHEN col < CAST(20 AS REAL) THEN 'l10' WHEN col < CAST(30 AS REAL) THEN 'l20' ELSE 'l20' END AS outname"), + "Generated select clause") + + ok(ut_cmp_identical( + where_clause(mdb, mfdb_interval("l", c(10,20,25,30)), "col", "out"), + c("col >= CAST(10 AS REAL)", "col < CAST(30 AS REAL)")), + "Generated where clause") + ok(ut_cmp_identical( + where_clause(mdb, mfdb_interval("l", c(25,50)), "col", "out"), + c("col >= CAST(25 AS REAL)", "col < CAST(50 AS REAL)")), + "Generated where clause") + }, asNamespace('mfdb'))) # Can generate SQL ok - Generated select clause ok - Generated where clause ok - Generated where clause > > ok_group("Aggregates with open_ended mfdb_interval", local({ + g <<- mfdb_interval('l', c(10, 20, 100), open_ended = TRUE) + ok(ut_cmp_identical(capture.output(pre_query(NULL, g, "out")), c( + "NULL")), "Nothing happened pre_query") + ok(ut_cmp_identical(sample_clause(mdb, g, "col", "out"), "0"), "Sample clause") + ok(ut_cmp_identical(select_clause(mdb, g, "col", "out"), "CASE WHEN col < CAST(20 AS REAL) THEN 'l10' WHEN col < CAST(100 AS REAL) THEN 'l20' ELSE 'l20' END AS out"), "Select clause") + ok(ut_cmp_identical(from_clause(mdb, g, "col", "out"), c()), "From clause") + ok(ut_cmp_identical(where_clause(mdb, g, "col", "out"), "col >= CAST(10 AS REAL)"), "Where clause") + + g <<- mfdb_interval('l', c(10, 20, 100), open_ended = c('upper')) + ok(ut_cmp_identical(select_clause(mdb, g, "col", "out"), "CASE WHEN col < CAST(20 AS REAL) THEN 'l10' WHEN col < CAST(100 AS REAL) THEN 'l20' ELSE 'l20' END AS out"), "Select clause c('upper')") + + g <<- mfdb_interval('l', c(10, 20, 100), open_ended = c('lower')) + ok(ut_cmp_identical(select_clause(mdb, g, "col", "out"), "CASE WHEN col < CAST(20 AS REAL) THEN 'l10' WHEN col < CAST(100 AS REAL) THEN 'l20' ELSE 'l20' END AS out"), "Select clause c('lower')") + + g <<- mfdb_interval('l', c(10, 20, 100), open_ended = c('lower', 'upper')) + ok(ut_cmp_identical(select_clause(mdb, g, "col", "out"), "CASE WHEN col < CAST(20 AS REAL) THEN 'l10' WHEN col < CAST(100 AS REAL) THEN 'l20' ELSE 'l20' END AS out"), "Select clause c('lower', 'upper')") + + }, asNamespace('mfdb'))) # Aggregates with open_ended mfdb_interval ok - Nothing happened pre_query ok - Sample clause ok - Select clause ok - From clause ok - Where clause ok - Select clause c('upper') ok - Select clause c('lower') ok - Select clause c('lower', 'upper') > > proc.time() user system elapsed 0.54 0.09 0.62 1..19 # Looks like you passed all 19 tests.