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 02f30e9d381802fac31a8d5fdb34db871245c4f9..78cd2455f69d491617cfcd785433d0a652900ac7 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,7 @@ +rffi.dotCModifiedArguments <- function(data) { + .C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data)) +} + rffi.addInt <- function(a, b) { .Call("addInt", as.integer(a), as.integer(b), PACKAGE = "testrffi") } diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c index cf5d7e5a1ab59411236af089b0e37331f108c838..bc25f656cd1659c47f2d76463e8542f75c3883ba 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c @@ -27,6 +27,18 @@ #include <Rdefines.h> #include <Rinternals.h> +void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) { + for (int i = 0; i < len[0]; i++) { + idata[i] ++; + } + for (int i = 0; i < len[0]; i++) { + rdata[i] *= 0.2; + } + for (int i = 0; i < len[0]; i++) { + ldata[i] = ldata[i] == 0 ? 1 : 0; + } +} + SEXP addInt(SEXP a, SEXP b) { int aInt = INTEGER_VALUE(a); int bInt = INTEGER_VALUE(b); 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 6ce0a9f33589fd4abde403ec48bead89d35e807a..1b48a7f485dde8e375dd15c92857ef91b419d69f 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 @@ -102649,6 +102649,32 @@ In cor(cbind(c(1, 1, 1), c(1, 1, 1))) : the standard deviation is zero [1,] 10+0i -4+0i [2,] -2+0i 0+0i +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(NULL) +Error in complete.cases(object) : + no input has determined the number of cases + +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(c()) +Error in complete.cases(object) : + no input has determined the number of cases + +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(c(1,2,3)) +[1] 1 2 3 + +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(c(1,NA,3)) +Error in na.fail.default(c(1, NA, 3)) : missing values in object + +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(c(1L, 2L)) +[1] 1 2 + +##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail +#na.fail(c(NA, 2L)) +Error in na.fail.default(c(NA, 2L)) : missing values in object + ##com.oracle.truffle.r.test.library.stats.TestStats.testQgamma #{ p <- (1:9)/10 ; qgamma(p, shape=1) } [1] 0.1053605 0.2231436 0.3566749 0.5108256 0.6931472 0.9162907 1.2039728 @@ -103278,6 +103304,21 @@ attr(,"foo") [,1] [,2] [2,] 2 4 +##com.oracle.truffle.r.test.library.utils.TestUtils.testMethods +#methods(plot) + [1] plot.HoltWinters* plot.TukeyHSD* plot.acf* + [4] plot.data.frame* plot.decomposed.ts* plot.default + [7] plot.dendrogram* plot.density* plot.ecdf +[10] plot.factor* plot.formula* plot.function +[13] plot.hclust* plot.histogram* plot.isoreg* +[16] plot.lm* plot.medpolish* plot.mlm* +[19] plot.ppr* plot.prcomp* plot.princomp* +[22] plot.profile.nls* plot.spec* plot.stepfun +[25] plot.stl* plot.table* plot.ts +[28] plot.tskernel* + + Non-visible functions are asterisked + ##com.oracle.truffle.r.test.parser.TestParser.testNegativePow #10^(1+1) [1] 100 @@ -103325,7 +103366,13 @@ attr(,"foo") [7] 0.35201276 0.16919220 0.93579263 0.26084486 ##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFICall -#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); detach("package:testrffi"); list(r1, r2, v) } +#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L); detach("package:testrffi"); list(r1) } +[[1]] +[1] 5 + + +##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFICall +#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); v2 <- rffi.dotCModifiedArguments(c(0,1,2,3)); detach("package:testrffi"); list(r1, r2, v, v2) } [[1]] [1] 5 @@ -103335,6 +103382,20 @@ attr(,"foo") [[3]] [1] 0 1 2 3 4 +[[4]] +[[4]][[1]] +[1] 4 + +[[4]][[2]] +[1] 1 2 3 4 + +[[4]][[3]] +[1] 0.0 0.2 0.4 0.6 + +[[4]][[4]] +[1] TRUE FALSE FALSE FALSE + + ##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFIExternal #{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.dotExternalAccessArgs(1L, 3, c(1,2,3), c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi"); list(r1) } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java index e45f100967c42d6818904a95f405fc7e2e631878..1f82ac178685f0e4c006e18dd91f424d8c57acd0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java @@ -633,7 +633,7 @@ public class TestBase { return TestOutputManager.prepareResult(result, keepTrailingWhiteSpace); } - protected static boolean generatingExpected() { + public static boolean generatingExpected() { return expectedOutputManager.generate; } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java index 5ae65c4ab235d6471db4e2ae3ab7bd460b06cb00..9d8cea5dfc0887a00a9ce328d5006c0196ae781c 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java @@ -20,9 +20,8 @@ public class TestBuiltin_solve extends TestBase { @Test public void testsolve1() { - assertEval(Ignored.Unknown, - "argv <- structure(list(a = structure(c(1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1), .Dim = c(5L, 5L))), .Names = 'a');" - + "do.call('solve', argv)"); + assertEval("argv <- structure(list(a = structure(c(1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1), .Dim = c(5L, 5L))), .Names = 'a');" + + "do.call('solve', argv)"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java index a3b56f92e7b48bdd9897cc6dd5e4ae72018b98b1..e653d0792ec07a16cacc582330fd565c6f6f7875 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java @@ -24,6 +24,8 @@ package com.oracle.truffle.r.test.generate; import java.io.*; +import com.oracle.truffle.r.test.TestBase; + /** * A non-interactive one-shot invocation of GnuR that is robust, if slow, in the face of * multiple-line output. @@ -62,6 +64,12 @@ public class GnuROneShotRSession implements RSession { } public String eval(String expression) { + if (expression.contains("library(") && !TestBase.generatingExpected()) { + System.out.println("=============================================="); + System.out.println("LIBRARY LOADING WHILE CREATING EXPECTED OUTPUT"); + System.out.println("creating expected output for these tests only works during test output"); + System.out.println("generation (mx rtestgen), and will otherwise create corrupted output."); + } try { Process p = createGnuR(); InputStream gnuRoutput = p.getInputStream(); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java index e15ad1a22a01d64ef9e15e915d678681d768e35e..e4d3f362393915411867a9d99f4d75314f62842e 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java @@ -118,4 +118,13 @@ public class TestStats extends TestBase { assertEval(Ignored.Unknown, "{ round( rcauchy(3, scale=4, location=1:3), digits = 5 ) }"); } + @Test + public void testNaFail() { + assertEval("na.fail(c(1,2,3))"); + assertEval("na.fail(c(1L, 2L))"); + assertEval(Output.ContainsError, "na.fail(c(1,NA,3))"); + assertEval(Output.ContainsError, "na.fail(c(NA, 2L))"); + assertEval(Output.ContainsError, "na.fail(c())"); + assertEval(Output.ContainsError, "na.fail(NULL)"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java index df98c9685c8fdde77c755a43a6ad0328d32fec7c..53a46d033f8bc3c310085bd8ea63291c4391696e 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java @@ -39,4 +39,8 @@ public class TestUtils extends TestBase { assertEval("{x<-matrix(c(1,2,3,4),2,2); head(x,1);}"); } + @Test + public void testMethods() { + assertEval("methods(plot)"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java index 1c51cc1b2c06a035ba520ecb0dff26e1850d4d6f..66e7464e4a9b64e46bea6fb57b36b368aa7b9eef 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java @@ -55,9 +55,11 @@ public class TestRFFIPackage extends TestRPackages { @Test public void testLoadTestRFFICall() { - assertEval(TestBase.template( - "{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); detach(\"package:testrffi\"); list(r1, r2, v) }", + assertEval(TestBase.template("{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L); detach(\"package:testrffi\"); list(r1) }", new String[]{packagePaths.rpackagesLibs.toString()})); + assertEval(TestBase.template( + "{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); v2 <- rffi.dotCModifiedArguments(c(0,1,2,3)); " + + "detach(\"package:testrffi\"); list(r1, r2, v, v2) }", new String[]{packagePaths.rpackagesLibs.toString()})); } @Test