diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java index 893f3a0ac9477681f093d9ac8ad0b33e67806510..64469c9a6a1e3f344225d90e6dddd5ff25a551db 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java @@ -22,10 +22,13 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.api.frame.*; import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.nodes.access.*; import com.oracle.truffle.r.nodes.builtin.*; +import com.oracle.truffle.r.nodes.unary.*; import com.oracle.truffle.r.runtime.*; import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; @@ -35,8 +38,69 @@ public abstract class AsVector extends RBuiltinNode { private static final String[] PARAMETER_NAMES = new String[]{"x", "mode"}; - // @Child protected AsComplex asComplex; - // @Child protected AsLogical asLogical; + @Child private CastIntegerNode castInteger; + @Child private CastDoubleNode castDouble; + @Child private CastComplexNode castComplex; + @Child private CastLogicalNode castLogical; + @Child private CastStringNode castString; + @Child private CastRawNode castRaw; + @Child private CastListNode castList; + + private RIntVector castInteger(VirtualFrame frame, Object operand) { + if (castInteger == null) { + CompilerDirectives.transferToInterpreter(); + castInteger = adoptChild(CastIntegerNodeFactory.create(null, false, false)); + } + return (RIntVector) castInteger.executeIntVector(frame, operand); + } + + private RDoubleVector castDouble(VirtualFrame frame, Object operand) { + if (castDouble == null) { + CompilerDirectives.transferToInterpreter(); + castDouble = adoptChild(CastDoubleNodeFactory.create(null, false, false)); + } + return (RDoubleVector) castDouble.executeDoubleVector(frame, operand); + } + + private RComplexVector castComplex(VirtualFrame frame, Object operand) { + if (castComplex == null) { + CompilerDirectives.transferToInterpreter(); + castComplex = adoptChild(CastComplexNodeFactory.create(null, false, false)); + } + return (RComplexVector) castComplex.executeComplexVector(frame, operand); + } + + private RLogicalVector castLogical(VirtualFrame frame, Object operand) { + if (castLogical == null) { + CompilerDirectives.transferToInterpreter(); + castLogical = adoptChild(CastLogicalNodeFactory.create(null, false, false)); + } + return (RLogicalVector) castLogical.executeLogicalVector(frame, operand); + } + + private RStringVector castString(VirtualFrame frame, Object operand) { + if (castString == null) { + CompilerDirectives.transferToInterpreter(); + castString = adoptChild(CastStringNodeFactory.create(null, false, false, false)); + } + return (RStringVector) castString.executeStringVector(frame, operand); + } + + private RRawVector castRaw(VirtualFrame frame, Object operand) { + if (castRaw == null) { + CompilerDirectives.transferToInterpreter(); + castRaw = adoptChild(CastRawNodeFactory.create(null, false, false)); + } + return (RRawVector) castRaw.executeRawVector(frame, operand); + } + + private RList castList(VirtualFrame frame, Object operand) { + if (castList == null) { + CompilerDirectives.transferToInterpreter(); + castList = adoptChild(CastListNodeFactory.create(null, true, false)); + } + return castList.executeList(frame, operand); + } @Override public Object[] getParameterNames() { @@ -53,48 +117,86 @@ public abstract class AsVector extends RBuiltinNode { return x; } - @Specialization(order = 20, guards = "modeIsAnyOrMatches") + @Specialization(order = 100, guards = "castToInt") + public RAbstractVector asVectorInt(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castInteger(frame, x); + } + + @Specialization(order = 200, guards = "castToDouble") + public RAbstractVector asVectorDouble(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castDouble(frame, x); + } + + @Specialization(order = 300, guards = "castToComplex") + public RAbstractVector asVectorComplex(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castComplex(frame, x); + } + + @Specialization(order = 400, guards = "castToLogical") + public RAbstractVector asVectorLogical(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castLogical(frame, x); + } + + @Specialization(order = 500, guards = "castToString") + public RAbstractVector asVectorString(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castString(frame, x); + } + + @Specialization(order = 600, guards = "castToRaw") + public RAbstractVector asVectorRaw(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castRaw(frame, x); + } + + @Specialization(order = 700, guards = "castToList") + public RAbstractVector asVectorList(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) { + return castList(frame, x); + } + + @Specialization(order = 1000) + public RAbstractVector asVector(RList x, @SuppressWarnings("unused") String mode) { + RList result = x.copyWithNewDimensions(null); + result.copyNamesFrom(x); + return result; + } + + @Specialization(order = 1001, guards = "modeIsAnyOrMatches") public RAbstractVector asVector(RAbstractVector x, @SuppressWarnings("unused") String mode) { return x.copyWithNewDimensions(null); } - // FIXME comment these in (and extend) once polymorphic nodes are supported - - // @Specialization(order = 40, guards = "castToLogical") - // public RLogicalVector asVectorLogical(VirtualFrame frame, RAbstractVector x, - // @SuppressWarnings("unused") String mode) { - // if (asLogical == null) { - // CompilerDirectives.transferToInterpreter(); - // asLogical = adoptChild(AsLogicalFactory.create(new RNode[1], getContext(), getBuiltin())); - // } - // try { - // return asLogical.executeRLogicalVector(frame, x).copyWithNewDimensions(null); - // } catch (UnexpectedResultException ure) { - // throw new IllegalStateException(ure); - // } - // } - - // @Specialization(order = 60, guards = "castToComplex") - // public RComplexVector asVectorComplex(VirtualFrame frame, RAbstractVector x, - // @SuppressWarnings("unused") String mode) { - // if (asComplex == null) { - // CompilerDirectives.transferToInterpreter(); - // asComplex = adoptChild(AsComplexFactory.create(new RNode[1], getContext(), getBuiltin())); - // } - // try { - // return asComplex.executeRComplexVector(frame, x).copyWithNewDimensions(null); - // } catch (UnexpectedResultException ure) { - // throw new IllegalStateException(ure); - // } - // } - - // protected boolean castToLogical(RAbstractVector x, String mode) { - // return x.getElementClass() != RLogical.class && RRuntime.TYPE_LOGICAL.equals(mode); - // } - - // protected boolean castToComplex(RAbstractVector x, String mode) { - // return x.getElementClass() != RComplex.class && RRuntime.TYPE_COMPLEX.equals(mode); - // } + @SuppressWarnings("unused") + @Specialization(order = 1002, guards = "!modeIsAnyOrMatches") + public RAbstractVector asVectorWrongMode(RAbstractVector x, String mode) { + throw RError.getInvalidMode(getSourceSection()); + } + + protected boolean castToInt(RAbstractVector x, String mode) { + return x.getElementClass() != RInt.class && RRuntime.TYPE_INTEGER.equals(mode); + } + + protected boolean castToDouble(RAbstractVector x, String mode) { + return x.getElementClass() != RDouble.class && (RRuntime.TYPE_NUMERIC.equals(mode) || RRuntime.TYPE_DOUBLE.equals(mode)); + } + + protected boolean castToComplex(RAbstractVector x, String mode) { + return x.getElementClass() != RComplex.class && RRuntime.TYPE_COMPLEX.equals(mode); + } + + protected boolean castToLogical(RAbstractVector x, String mode) { + return x.getElementClass() != RLogical.class && RRuntime.TYPE_LOGICAL.equals(mode); + } + + protected boolean castToString(RAbstractVector x, String mode) { + return x.getElementClass() != RString.class && RRuntime.TYPE_CHARACTER.equals(mode); + } + + protected boolean castToRaw(RAbstractVector x, String mode) { + return x.getElementClass() != RRaw.class && RRuntime.TYPE_RAW.equals(mode); + } + + protected boolean castToList(@SuppressWarnings("unused") RAbstractVector x, String mode) { + return mode.equals("list"); + } protected boolean modeIsAnyOrMatches(RAbstractVector x, String mode) { return RRuntime.TYPE_ANY.equals(mode) || RRuntime.classToString(x.getElementClass()).equals(mode) || x.getElementClass() == RDouble.class && RRuntime.TYPE_DOUBLE.equals(mode); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java index 58d99dccd12e7166937c7a51a9a68a550d18ec8c..eeab41abd7293f1327db281a30fd37a5b2329d1d 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java @@ -235,7 +235,7 @@ public abstract class SApply extends RBuiltinNode { CompilerDirectives.transferToInterpreter(); castString = adoptChild(CastStringNodeFactory.create(null, false, true, false)); } - return (RStringVector) castString.executeString(frame, value); + return (RStringVector) castString.executeStringVector(frame, value); } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java index 518762f22c61515eb8d872bd69a9757f1a3215d7..b0f9c9ad0a32c689286ad71af9183ed5ae1ef6ac 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java @@ -44,7 +44,7 @@ public abstract class UpdateDimNames extends RBuiltinNode { CompilerDirectives.transferToInterpreter(); castStringNode = adoptChild(CastStringNodeFactory.create(null, true, true, false)); } - return castStringNode.executeStringVector(frame, o); + return castStringNode.executeCast(frame, o); } public abstract Object executeList(VirtualFrame frame, RAbstractVector vector, Object o); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java index 4786dc93ad18b81e768d0fa63fb8d79b1d070c86..1410099d1670868cebe7bac62c4f1886bf0d54d5 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java @@ -238,7 +238,7 @@ public abstract class CastDoubleNode extends CastNode { } @Generic - public int doOther(Object operand) { + public double doOther(Object operand) { CompilerDirectives.transferToInterpreter(); throw new ConversionFailedException(operand.getClass().getName()); } 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 18c6f6335ea7dd35125b5b807462b8864926c384..85d01f2de1aaea41a48d7a244b7ac70240805c7e 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 @@ -2623,6 +2623,104 @@ out-of-range values treated as 0 in coercion to raw Warning message: out-of-range values treated as 0 in coercion to raw +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#x<-c(a=1.1, b=2.2); as.vector(x, "raw") +[1] 01 02 + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#x<-c(a=1L, b=2L); as.vector(x, "complex") +[1] 1+0i 2+0i + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo") } +[1] "foo" + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "bar") } +Error in as.vector(x, mode) : invalid 'mode' argument + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "character") } +[1] "foo" + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "double") } +[1] NA +Warning message: +In as.vector("foo", "double") : NAs introduced by coercion + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "integer") } +[1] NA +Warning message: +In as.vector("foo", "integer") : NAs introduced by coercion + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "list") } +[[1]] +[1] "foo" + + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "logical") } +[1] NA + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "numeric") } +[1] NA +Warning message: +In as.vector("foo", "numeric") : NAs introduced by coercion + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector("foo", "raw") } +[1] 00 +Warning messages: +1: In as.vector("foo", "raw") : NAs introduced by coercion +2: In as.vector("foo", "raw") : + out-of-range values treated as 0 in coercion to raw + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ as.vector(c("foo", "bar"), "raw") } +[1] 00 00 +Warning messages: +1: In as.vector(c("foo", "bar"), "raw") : NAs introduced by coercion +2: In as.vector(c("foo", "bar"), "raw") : + out-of-range values treated as 0 in coercion to raw + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c("a", "b"), c("c", "d")); y<-as.vector(x, "list"); y } +[[1]] +[1] 1 + +[[2]] +[1] 2 + +[[3]] +[1] 3 + +[[4]] +[1] 4 + + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ x<-c(a=1, b=2); as.vector(x, "list") } +$a +[1] 1 + +$b +[1] 2 + + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ x<-c(a=FALSE, b=TRUE); attr(x, "foo")<-"foo"; y<-as.vector(x); attributes(y) } +NULL + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector +#{ x<-c(a=FALSE, b=TRUE); attr(x, "foo")<-"foo"; y<-as.vector(x, "list"); attributes(y) } +$names +[1] "a" "b" + + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAttributes #{ x <- 1 ; attributes(x) <- list(hi=3, hello=2) ; x } [1] 1 @@ -2782,6 +2880,10 @@ imaginary parts discarded in coercion #{ as.raw(as.logical(as.raw(c(1,2)))) } [1] 01 01 +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts +#{ as.vector(list(1,2,3), mode="integer") } +[1] 1 2 3 + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts #{ m <- matrix(1:6, nrow=2) ; as.double(m) } [1] 1 2 3 4 5 6 @@ -2818,10 +2920,22 @@ imaginary parts discarded in coercion #{ m<-matrix(c(1+1i,2+2i,3-3i,4-4i), nrow=2) ; as.vector(m) } [1] 1+1i 2+2i 3-3i 4-4i +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts +#{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = "logical") } +[1] TRUE FALSE TRUE FALSE + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m) } [1] 1 2 3 4 +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts +#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "character") } +[1] "1" "2" "3" "4" + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts +#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "complex") } +[1] 1+0i 2+0i 3+0i 4+0i + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "double") } [1] 1 2 3 4 @@ -2830,6 +2944,10 @@ imaginary parts discarded in coercion #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "numeric") } [1] 1 2 3 4 +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts +#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "raw") } +[1] 01 02 03 04 + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts #{ m<-matrix(c(TRUE,FALSE,FALSE,TRUE), nrow=2) ; as.vector(m) } [1] TRUE FALSE FALSE TRUE diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java index b7618104939fd6981536370a22e14d46c7db918f..f3c3f921d8ed2d88eec2961afef0f1bfcfdb87c9 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java @@ -4488,6 +4488,86 @@ public class AllTests extends TestBase { assertEvalWarning("{ as.raw(c(1L, -2L, NA)) }"); } + @Test + public void TestSimpleBuiltins_testAsVector_e84fd1b27fd6570ddd6a53234fde0ba0() { + assertEval("{ as.vector(\"foo\", \"logical\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_cb0809ef1d3ab2fc8312585316b3ff3f() { + assertEval("{ as.vector(\"foo\", \"character\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_ad178529ec6948277d4535f8ce4d1307() { + assertEval("{ as.vector(\"foo\", \"list\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_715c056f5c63c0038099fb48bed34bad() { + assertEval("{ as.vector(\"foo\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_7df3d852bd307ec74005874e9e6b860a() { + assertEval("x<-c(a=1.1, b=2.2); as.vector(x, \"raw\")"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_68bdfdc99e081735270c25dad5c6438c() { + assertEval("x<-c(a=1L, b=2L); as.vector(x, \"complex\")"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_35065e6784253d5d096669f4fee13932() { + assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x); attributes(y) }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_5b09e05fda45f41d37a149696f95babb() { + assertEval("{ x<-c(a=1, b=2); as.vector(x, \"list\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_824741c5ce8c39da5eb71c8a537981b6() { + assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x, \"list\"); attributes(y) }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_bfb16efc959f2032f3fd07f7282ad495() { + assertEval("{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c(\"a\", \"b\"), c(\"c\", \"d\")); y<-as.vector(x, \"list\"); y }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_8d0d1cdaff856d660d11866fa044397e() { + assertEvalError("{ as.vector(\"foo\", \"bar\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_e20c6558cca6aea70251347229e52bf5() { + assertEvalWarning("{ as.vector(\"foo\", \"integer\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_f66e36fa2296e57c288db82f5f8e9798() { + assertEvalWarning("{ as.vector(\"foo\", \"double\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_0a44fb77142709976b0a7a4642abaf1f() { + assertEvalWarning("{ as.vector(\"foo\", \"numeric\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_84c625ebcd4124d15ba6dbf9b32d8293() { + assertEvalWarning("{ as.vector(\"foo\", \"raw\") }"); + } + + @Test + public void TestSimpleBuiltins_testAsVector_73bc292dddea0adb6832fc9f79b8d507() { + assertEvalWarning("{ as.vector(c(\"foo\", \"bar\"), \"raw\") }"); + } + @Test public void TestSimpleBuiltins_testAttributes_7a7da0b52cfc6f6dbfdd195db4c141e9() { assertEval("{ x <- 1; attributes(x) }"); @@ -4729,27 +4809,27 @@ public class AllTests extends TestBase { } @Test - public void TestSimpleBuiltins_testCastsIgnore_97d4b6e51e8e88e14a04e0f452ea5159() { + public void TestSimpleBuiltins_testCasts_97d4b6e51e8e88e14a04e0f452ea5159() { assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }"); } @Test - public void TestSimpleBuiltins_testCastsIgnore_5dd4341a59ca7d0e2ed6b0d084e792db() { + public void TestSimpleBuiltins_testCasts_5dd4341a59ca7d0e2ed6b0d084e792db() { assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }"); } @Test - public void TestSimpleBuiltins_testCastsIgnore_2313113d77f87db77406408465c55c7e() { + public void TestSimpleBuiltins_testCasts_2313113d77f87db77406408465c55c7e() { assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }"); } @Test - public void TestSimpleBuiltins_testCastsIgnore_b6184a32a36c6baf7d41451b40d049ba() { + public void TestSimpleBuiltins_testCasts_b6184a32a36c6baf7d41451b40d049ba() { assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }"); } @Test - public void TestSimpleBuiltins_testCastsIgnore_5ecedc65b348c959e86222b948f34ce8() { + public void TestSimpleBuiltins_testCasts_5ecedc65b348c959e86222b948f34ce8() { assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }"); } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java index db64573384d1020a39792c78b2b462b95015a5a1..fc2d9c356aab717b6eed88a0653f36ae765e1e42 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java @@ -1478,31 +1478,6 @@ public class FailingTests extends TestBase { assertEval("{ f <- function(a, b) { a + b } ; x <- 1 ; y <- 2 ; l <- call(\"f\", x, y) ; x <- 10 ; eval(l) }"); } - @Ignore - public void TestSimpleBuiltins_testCastsIgnore_97d4b6e51e8e88e14a04e0f452ea5159() { - assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }"); - } - - @Ignore - public void TestSimpleBuiltins_testCastsIgnore_5dd4341a59ca7d0e2ed6b0d084e792db() { - assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }"); - } - - @Ignore - public void TestSimpleBuiltins_testCastsIgnore_2313113d77f87db77406408465c55c7e() { - assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }"); - } - - @Ignore - public void TestSimpleBuiltins_testCastsIgnore_b6184a32a36c6baf7d41451b40d049ba() { - assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }"); - } - - @Ignore - public void TestSimpleBuiltins_testCastsIgnore_5ecedc65b348c959e86222b948f34ce8() { - assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }"); - } - @Ignore public void TestSimpleBuiltins_testCastsIgnore_bf55a9d7ec96d782af8d9529a2f38293() { assertEval("{ l <- list(1) ; attr(l, \"my\") <- 1; as.list(l) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java index b49278cdf2409c732f63a1a9a0a211220bebe510..45a656b0fa79380ffbeb2c6c26783d7e3eaa5e89 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java @@ -431,6 +431,26 @@ public class TestSimpleBuiltins extends TestBase { assertEvalWarning("{ as.raw(c(1L, -2L, NA)) }"); } + @Test + public void testAsVector() { + assertEvalWarning("{ as.vector(\"foo\", \"integer\") }"); + assertEvalWarning("{ as.vector(\"foo\", \"double\") }"); + assertEvalWarning("{ as.vector(\"foo\", \"numeric\") }"); + assertEval("{ as.vector(\"foo\", \"logical\") }"); + assertEvalWarning("{ as.vector(\"foo\", \"raw\") }"); + assertEval("{ as.vector(\"foo\", \"character\") }"); + assertEval("{ as.vector(\"foo\", \"list\") }"); + assertEval("{ as.vector(\"foo\") }"); + assertEvalError("{ as.vector(\"foo\", \"bar\") }"); + assertEvalWarning("{ as.vector(c(\"foo\", \"bar\"), \"raw\") }"); + assertEval("x<-c(a=1.1, b=2.2); as.vector(x, \"raw\")"); + assertEval("x<-c(a=1L, b=2L); as.vector(x, \"complex\")"); + assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x); attributes(y) }"); + assertEval("{ x<-c(a=1, b=2); as.vector(x, \"list\") }"); + assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x, \"list\"); attributes(y) }"); + assertEval("{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c(\"a\", \"b\"), c(\"c\", \"d\")); y<-as.vector(x, \"list\"); y }"); + } + @Test public void testMatrix() { assertEval("{ matrix(c(1,2,3,4),2,2) }"); @@ -486,18 +506,18 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ x <- c(0,2); names(x) <- c(\"hello\",\"hi\") ; as.logical(x) }"); assertEval("{ x <- 1:2; names(x) <- c(\"hello\",\"hi\") ; as.double(x) }"); assertEval("{ x <- c(1,2); names(x) <- c(\"hello\",\"hi\") ; as.integer(x) }"); - } - @Test - @Ignore - public void testCastsIgnore() { assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }"); assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }"); assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }"); assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }"); assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }"); + } + @Test + @Ignore + public void testCastsIgnore() { assertEval("{ l <- list(1) ; attr(l, \"my\") <- 1; as.list(l) }"); assertEval("{ l <- 1 ; attr(l, \"my\") <- 1; as.list(l) }"); assertEval("{ l <- c(x=1) ; as.list(l) }");