From 26ebd91d8e4481152388c23298827e2ef693c445 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Mon, 4 Jan 2016 13:32:38 +0100 Subject: [PATCH] add (failing) test for serialize bug to vanilla package --- .../src/com/oracle/truffle/r/parser/R.g | 4 ++-- .../packages/vanilla/vanilla/NAMESPACE | 1 + .../packages/vanilla/vanilla/R/vanilla.R | 6 ++++++ .../truffle/r/test/ExpectedTestOutput.test | 4 ++++ .../src/com/oracle/truffle/r/test/TestBase.java | 3 ++- .../r/test/rpackages/TestVanillaPackage.java | 16 +++++++++++++++- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g index 81001b6840..0015efa635 100644 --- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g +++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2015, Oracle and/or its affiliates + * Copyright (c) 2013, 2016, Oracle and/or its affiliates * * All rights reserved. */ @@ -493,7 +493,7 @@ expr_subset [ASTNode i] returns [ASTNode v] | (t=AT n_ name=id { $v = FieldAccess.create(sourceSection("expr_subset/AT", $t, name), FieldOperator.AT, i, name.getText()); }) | (t=LBRAKET subset=args y=RBRAKET { $v = Call.create(sourceSection("expr_subset/LBRAKET", $t, $y), CallOperator.SUBSET, i, subset); }) | (t=LBB subscript=args RBRAKET y=RBRAKET { $v = Call.create(sourceSection("expr_subset/LBB", $t, $y), CallOperator.SUBSCRIPT, i, subscript); }) - // Must use RBRAKET twice instead of RBB beacause this is possible: a[b[1]] + // Must use RBRAKET twice instead of RBB because this is possible: a[b[1]] | (t=LPAR a=args y=RPAR { $v = Call.create(sourceSection("expr_subset/LPAR", $t, $y), i, a); }) //| { $v = i; } ; diff --git a/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/NAMESPACE b/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/NAMESPACE index 16685286e4..4583db56a0 100644 --- a/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/NAMESPACE +++ b/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/NAMESPACE @@ -1 +1,2 @@ export(vanilla) +export(functionTest) diff --git a/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/R/vanilla.R b/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/R/vanilla.R index 19c05192f9..68f189d615 100644 --- a/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/R/vanilla.R +++ b/com.oracle.truffle.r.test.native/packages/vanilla/vanilla/R/vanilla.R @@ -1,2 +1,8 @@ vanilla <- function() print("A vanilla R package") + +functionTest <- function(x, y) { + x[5] <- 1 + y[2] <- x[5] + (1+y[2]):10 +} \ No newline at end of file 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 420e641b21..94b8aa5479 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 @@ -103649,3 +103649,7 @@ NULL [1] "A vanilla R package" [1] "A vanilla R package" +##com.oracle.truffle.r.test.rpackages.TestVanillaPackage.testSimpleFunction +#{ library("vanilla", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r <- functionTest(c(1,2,3,4,5,6),8:10); detach("package:vanilla"); r } +[1] 2 3 4 5 6 7 8 9 10 + 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 1f82ac1786..113bf5793e 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 @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2015, Oracle and/or its affiliates + * Copyright (c) 2013, 2016, Oracle and/or its affiliates * * All rights reserved. */ @@ -56,6 +56,7 @@ public class TestBase { ParserErrorFormatting("tests that fail because of the formatting of parser error messages"), WrongCaller("tests that fail because the caller source is wrong in an error or warning"), ParserError("tests that fail because of bugs in the parser"), + ImplementationError("tests that fail because of bugs in other parts of the runtime"), SideEffects("tests that are ignored because they would interfere with other tests"), MissingWarning("tests that fail because of missing warnings"), MissingBuiltin("tests that fail because of missing builtins"), diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestVanillaPackage.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestVanillaPackage.java index 0cac5d339a..455287c488 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestVanillaPackage.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestVanillaPackage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,4 +58,18 @@ public class TestVanillaPackage extends TestRPackages { assertEval(TestBase.template("{ library(\"vanilla\", lib.loc = \"%0\"); r <- vanilla(); detach(\"package:vanilla\"); r }", new String[]{packagePaths.rpackagesLibs.toString()})); } + @Test + public void testSimpleFunction() { + /* + * This test fails because FastR doesn't install the package correctly. In particular, the + * ReplacementNode serializes "y[x] <- z" to "`[<-`(y, x, z)", where it should create + * "y <- `[<-`(y, x, z)" (i.e., it doesn't actually change the variable). This causes + * replacements that are part of lazy-loaded library functions to have no effect if the + * package in question was installed using FastR. + */ + assertEval(Ignored.ImplementationError, + TestBase.template("{ library(\"vanilla\", lib.loc = \"%0\"); r <- functionTest(c(1,2,3,4,5,6),8:10); detach(\"package:vanilla\"); r }", + new String[]{packagePaths.rpackagesLibs.toString()})); + } + } -- GitLab