From c4db7b87e39231a4304c32eb2773706c6759a8e0 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Fri, 9 Dec 2016 12:07:42 -0800 Subject: [PATCH] testrffi: add library unload; fix findvar test --- .../packages/testrffi/testrffi/R/testrffi.R | 3 ++ .../truffle/r/test/ExpectedTestOutput.test | 44 +++++++++---------- .../truffle/r/test/rffi/TestRFFIPackage.java | 9 +++- 3 files changed, 32 insertions(+), 24 deletions(-) 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 8e15953f3a..54c5c79209 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 7336777a88..334667a097 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 bbd3eb4941..40270c5de5 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())"); } } -- GitLab