diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R index 8e15953f3a70a2f7c332323f727420743c6a5387..54c5c79209d12d65cbee830a6d24a19af28e9fc4 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R @@ -1,3 +1,6 @@ +.onUnload <- function(libpath) + library.dynam.unload("testrffi", libpath) + rffi.dotCModifiedArguments <- function(data) { .C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data)) } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 7336777a881f7bc6696caf0ac122b716143cccde..334667a09750ed2dd53d1e11e952edf071e8f1b6 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -116047,15 +116047,15 @@ Error: unexpected '*' in: [1] TRUE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI1# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.addInt(2L, 3L); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.addInt(2L, 3L); detach("package:testrffi", unload=T); x } [1] 5 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI10# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); a <- c(1L,2L,3L); x <- rffi.iterate_iptr(a); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); a <- c(1L,2L,3L); x <- rffi.iterate_iptr(a); detach("package:testrffi", unload=T); x } [1] 1 2 3 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI11# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotCModifiedArguments(c(0,1,2,3)); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotCModifiedArguments(c(0,1,2,3)); detach("package:testrffi", unload=T); x } [[1]] [1] 4 @@ -116070,7 +116070,7 @@ Error: unexpected '*' in: ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI12# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotExternalAccessArgs(1L, 3, c(1,2,3), c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotExternalAccessArgs(1L, 3, c(1,2,3), c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi", unload=T); x } [[1]] [[1]][[1]] NULL @@ -116129,7 +116129,7 @@ NULL ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI13# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotExternalAccessArgs(x=1L, 3, c(1,2,3), y=c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.dotExternalAccessArgs(x=1L, 3, c(1,2,3), y=c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi", unload=T); x } [[1]] [[1]][[1]] x @@ -116188,68 +116188,68 @@ NULL ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI14# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.invoke12(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.invoke12(); detach("package:testrffi", unload=T); x } [1] 12 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI15# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.TYPEOF(3L); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.TYPEOF(3L); detach("package:testrffi", unload=T); x } [1] 13 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI16# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString("hello"); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString("hello"); detach("package:testrffi", unload=T); x } [1] TRUE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI17# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString(NULL); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString(NULL); detach("package:testrffi", unload=T); x } [1] FALSE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI18# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.interactive(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.interactive(); detach("package:testrffi", unload=T); x } [1] FALSE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI19# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- 1; x <- rffi.findVar(x, globalenv()); detach("package:testrffi"); x } -Error: could not find function "rffi.findVar" +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- 1; x <- rffi.findvar("x", globalenv()); detach("package:testrffi", unload=T); x } +[1] 1 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI2# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.addDouble(2, 3); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.addDouble(2, 3); detach("package:testrffi", unload=T); x } [1] 5 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI3# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.populateIntVector(5); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.populateIntVector(5); detach("package:testrffi", unload=T); x } [1] 0 1 2 3 4 ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI4# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.populateLogicalVector(5); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.populateLogicalVector(5); detach("package:testrffi", unload=T); x } [1] TRUE NA FALSE FALSE FALSE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI5# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.mkStringFromChar(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.mkStringFromChar(); detach("package:testrffi", unload=T); x } [1] "hello" ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI6# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.mkStringFromBytes(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.mkStringFromBytes(); detach("package:testrffi", unload=T); x } [1] "hello" ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI7# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null(); detach("package:testrffi", unload=T); x } NULL ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI7C# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null.C(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null.C(); detach("package:testrffi", unload=T); x } NULL ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI7E# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null.E(); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.null.E(); detach("package:testrffi", unload=T); x } Error in .Call("null", PACKAGE = "foo") : "null" not available for .Call() for package "foo" ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI8# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString(character(0)); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.isRString(character(0)); detach("package:testrffi", unload=T); x } [1] TRUE ##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI9# -#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); a <- c(1L,2L,3L); x <- rffi.iterate_iarray(a); detach("package:testrffi"); x } +#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); a <- c(1L,2L,3L); x <- rffi.iterate_iarray(a); detach("package:testrffi", unload=T); x } [1] 1 2 3 ##com.oracle.truffle.r.test.rffi.TestUserRNG.testUserRNG# diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rffi/TestRFFIPackage.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rffi/TestRFFIPackage.java index bbd3eb494137e31efa92a924a92201042f1a02cb..40270c5de51f4b35661184065b85a52780d0e742 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rffi/TestRFFIPackage.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rffi/TestRFFIPackage.java @@ -43,8 +43,13 @@ public class TestRFFIPackage extends TestRPackages { tearDownUninstallTestPackages(TEST_PACKAGES); } + /** + * This is somewhat expensive to do per test, but the only alternative is to put all the + * micro-tests in one big test. It might be that this should be switched to an R file-based + * approach as the number of tests increase. + */ private void assertEvalWithLibWithSetup(String setup, String test) { - assertEval(TestBase.template("{ library(\"testrffi\", lib.loc = \"%0\"); " + setup + "x <- " + test + "; detach(\"package:testrffi\"); x }", new String[]{TestRPackages.libLoc()})); + assertEval(TestBase.template("{ library(\"testrffi\", lib.loc = \"%0\"); " + setup + "x <- " + test + "; detach(\"package:testrffi\", unload=T); x }", new String[]{TestRPackages.libLoc()})); } private void assertEvalWithLib(String test) { @@ -153,6 +158,6 @@ public class TestRFFIPackage extends TestRPackages { @Test public void testRFFI19() { - assertEvalWithLibWithSetup("x <- 1; ", "rffi.findVar(x, globalenv())"); + assertEvalWithLibWithSetup("x <- 1; ", "rffi.findvar(\"x\", globalenv())"); } }