[datatable-help] Streamlining unit tests with test_that

Tom Short tshort.rlists at gmail.com
Tue Nov 30 21:48:39 CET 2010


On Tue, Nov 30, 2010 at 3:35 PM, Tom Short <tshort.rlists at gmail.com> wrote:
> On Tue, Nov 30, 2010 at 3:13 PM, Tom Short <tshort.rlists at gmail.com> wrote:
>> On Tue, Nov 30, 2010 at 2:45 PM, Steve Lianoglou
>> <mailinglist.honeypot at gmail.com> wrote:
>>> Hi,
>>>
>>> So I mentioned in my last email that I'm going to get back to this
>>> later, but I'm a bit OCD when I have what seems like low-hanging-fruit
>>> so I'm trying to figure this out.
>>>
>>> I also mentioned I think the problem I'm seeing has something to do
>>> with the "cedta" business. While fixing this case will help me move
>>> the test over, perhaps it will also help to better address the
>>> side-effects cedta has with other things like Imports, Depends,
>>> etc.(?)
>>>
>>> So, download this simple test file:
>>>
>>> http://cbio.mskcc.org/~lianos/files/scratch/datatable-test.R
>>>
>>> Note that the first call to sys.source works fine, but I think it
>>> should work with the second case.
>>>
>>> Start an R session, and:
>>>
>>> R> library(data.table)
>>> R> sys.source("/path/to/datatable-test.R", .GlobalEnv) ## this works
>>> R> sys.source("/path/to/datatable-test.R", new.env(parent=.GlobalEnv))
>>> Error in `[.data.frame`(x, i, j) : object 'v' not found
>>>
>>> Does it seem reasonable to you that it should work in the second example?
>
> It looks like library() uses sys.source, and topenv() ends up pointing
> at the environment enclosing the package. If test_that also uses
> sys.source, I'm not sure cedta work. topenv() can't tell if it's in a
> package or some other environment. Maybe we could include a hidden
> variable in the top-level environment that lets cedta know that it's
> aware of data.tables.

Cludgy, but this datatable-test.R works:

assign(".Depends", "data.table", envir = topenv())
TESTDT = data.table(a=as.integer(c(1,3,4,4,4,4,7)),
                    b=as.integer(c(5,5,6,6,9,9,2)),
                    v=1:7)
setkey(TESTDT,a,b)
x <- TESTDT[SJ(4,6), v, mult="first"]

- Tom


More information about the datatable-help mailing list