From @zwj|08 @end|ng |rom gm@||@com  Mon Aug 12 18:56:34 2019
From: @zwj|08 @end|ng |rom gm@||@com (Wang Jiefei)
Date: Mon, 12 Aug 2019 12:56:34 -0400
Subject: [Rd] ALTREP package interaction with testthat
Message-ID: <CAGiFhPP7kyoXh7=k_7T3aPOk2eJ93X=Yc_ybRbras6Mn5BpCpw@mail.gmail.com>

Hi



I found a weird problem in testthat while working with an ALTREP package.
The package name is AltWrapper. My ALTREP serialize function is called even
when I'm trying to serialize a non-ALTREP object.  Here is an example



```

context("altrep")

length_func<-function(x){

    return(length(x))

}

setAltClass(className = "test", classType = "real")

setAltMethod(className = "test", getLength = length_func)

testData = runif(10)

myAltrep = makeAltrep("test", testData)



test_that("Auto serialize", {

    browser()

    A = 10

    A_serialized=serialize(A,NULL)

    B = new.env()

    B_serialized=serialize(B,NULL)

})

```

There is nothing but two variables A and B in the test function. I use
browser() to stop and debug the code. Here is the weird thing, my package
function is called when I?m trying to serialize *A* and *B*:

```

Browse[1]> A = 10

Browse[1]> A_serialized=serialize(A,NULL)

Browse[1]> B = new.env()

Browse[1]> B_serialized=serialize(B,NULL)

serializing data

Auto serializing data

[1] "Internal serialize altWrapper function"

```

The output indicates that my package function is called. The function is
designed for an ALTREP object. Since *B* is not an ALTREP, I don?t
understand why the ALTREP related function has been called. Also, variable
A works find. It seems like R dispatches the serialize function according
to the variable type, but I am not sure if there is any way to see the
dispatching rules. Here are the things I have tried:

1. if I comment out the code that defines an ALTREP in my example, the bug
will disappear, so it might relate to the implementation of ALTREP.

2. If I run the test script in the global environment, R wouldn?t call the
internal function, it only happens when I call `devtools::test()`.


I am stuck here. I do not know if it is a bug of my package or testthat or
the ALTREP implementation of R or possibly the interaction between them. I
will appreciate if anyone can shed light on it. Here is the link to my
package test file:

https://github.com/Jiefei-Wang/AltWrapper/blob/master/tests/testthat/test_test.R




Best,

Jiefei

	[[alternative HTML version deleted]]



[Rd] ALTREP package interaction with testthat
Wang Jiefei