diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java index eae2a22db7c59f4526e44cc1bf6396d4133db80a..e7ef99a9b49eb492b243f11975ce615772f76b82 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java @@ -23,6 +23,7 @@ package com.oracle.truffle.r.nodes.builtin.base; import com.oracle.truffle.api.CompilerDirectives; +import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -228,7 +229,7 @@ public class IsFiniteFunctions { } } - @RBuiltin(name = "is.nan", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) + @RBuiltin(name = "is.nan", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) public abstract static class IsNaN extends Adapter { static { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java index 58c61e58ea85acc342d39c95b3b1bfff8aac9a6c..d2a22a351d88d11fbba782f4486e29afca9b03ba 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java @@ -24,6 +24,7 @@ package com.oracle.truffle.r.nodes.builtin.base; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.size; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; +import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -79,7 +80,7 @@ public class IsTypeFunctions { } } - @RBuiltin(name = "is.array", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) + @RBuiltin(name = "is.array", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) public abstract static class IsArray extends MissingAdapter { static { @@ -391,7 +392,7 @@ public class IsTypeFunctions { } } - @RBuiltin(name = "is.matrix", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) + @RBuiltin(name = "is.matrix", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) public abstract static class IsMatrix extends MissingAdapter { private final ConditionProfile isMatrixProfile = ConditionProfile.createBinaryProfile(); @@ -430,7 +431,7 @@ public class IsTypeFunctions { } } - @RBuiltin(name = "is.numeric", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) + @RBuiltin(name = "is.numeric", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) public abstract static class IsNumeric extends MissingAdapter { static { 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 e82f6cdb4a3087f2820eb1bef4a03d22fec78d7a..2ef82b83787b10a5a3b9d7ef72082dc4572a1fe0 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 @@ -5866,6 +5866,10 @@ character(0) #{ as.character(list(list(c("hello", "hi")))) } [1] "list(c(\"hello\", \"hi\"))" +##com.oracle.truffle.r.test.builtins.TestBuiltin_ascharacter.testAsCharacter# +#{ as.character.cls <- function(x) 42; as.character(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_ascharacter.testAsCharacter# #{ f1<-function() 7; f2<-function(x) { sys.call() }; as.character(f2(f1())) } [1] "f2" "f1()" @@ -6281,6 +6285,10 @@ NAs introduced by coercion #{ as.complex(list(NULL)) } Error: (list) object cannot be coerced to type 'complex' +##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex# +#{ as.complex.cls <- function(x) 42; as.complex(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex# #{ x<-c(a=1.1, b=2.2); dim(x)<-c(1,2); attr(x, "foo")<-"foo"; y<-as.complex(x); attributes(y) } NULL @@ -6407,6 +6415,10 @@ NAs introduced by coercion Warning message: imaginary parts discarded in coercion +##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testAsDouble# +#{ as.double.cls <- function(x) 42; as.double(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testAsDouble# #{ x<-c(a=1.1, b=2.2); dim(x)<-c(1,2); attr(x, "foo")<-"foo"; y<-as.double(x); attributes(y) } NULL @@ -6938,6 +6950,10 @@ imaginary parts discarded in coercion #{ as.integer(list(list(1),2,3)) } [1] NA 2 3 +##com.oracle.truffle.r.test.builtins.TestBuiltin_asinteger.testAsInteger# +#{ as.integer.cls <- function(x) 42; as.integer(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asinteger.testAsInteger# #{ x<-c(a=1.1, b=2.2); dim(x)<-c(1,2); attr(x, "foo")<-"foo"; y<-as.integer(x); attributes(y) } NULL @@ -7107,6 +7123,10 @@ logical(0) #{ as.logical(c(3+3i, 4+4i)) } [1] TRUE TRUE +##com.oracle.truffle.r.test.builtins.TestBuiltin_aslogical.testAsLogical# +#{ as.logical.cls <- function(x) 42; as.logical(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_aslogical.testAsLogical# #{ x<-c(a=1.1, b=2.2); dim(x)<-c(1,2); attr(x, "foo")<-"foo"; y<-as.logical(x); attributes(y) } NULL @@ -7553,6 +7573,10 @@ out-of-range values treated as 0 in coercion to raw #{ as.raw(list(1,2,3)) } [1] 01 02 03 +##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw# +#{ as.raw.cls <- function(x) 42; as.raw(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testasraw1# #argv <- list(structure(numeric(0), .Dim = c(0L, 0L)));as.raw(argv[[1]]); raw(0) @@ -7755,6 +7779,10 @@ Warning messages: 2: In as.vector(c("foo", "bar"), "raw") : out-of-range values treated as 0 in coercion to raw +##com.oracle.truffle.r.test.builtins.TestBuiltin_asvector.testAsVector# +#{ as.vector.cls <- function(x, mode) 42; as.vector(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asvector.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]] @@ -27792,6 +27820,10 @@ character(0) #argv <- list(structure(list(carb = c(33, 40, 37, 27, 30, 43, 34, 48, 30, 38, 50, 51, 30, 36, 41, 42, 46, 24, 35, 37), age = c(33, 47, 49, 35, 46, 52, 62, 23, 32, 42, 31, 61, 63, 40, 50, 64, 56, 61, 48, 28), wgt = c(100, 92, 135, 144, 140, 101, 95, 101, 98, 105, 108, 85, 130, 127, 109, 107, 117, 100, 118, 102), prot = c(14, 15, 18, 12, 15, 15, 14, 17, 15, 14, 17, 19, 19, 20, 15, 16, 18, 13, 18, 14)), .Names = c('carb', 'age', 'wgt', 'prot'), row.names = c(NA, -20L), class = 'data.frame'));is.array(argv[[1]]); [1] FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_isarray.testisarrayGenericDispatch# +#{ is.array.cls <- function(x) 42; is.array(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_isatomic.testIsAtomic# #{ !is.atomic(function() {}) } [1] TRUE @@ -29332,6 +29364,10 @@ FALSE FALSE #argv <- list(structure(list(Topic = c('myTst-package', 'foo-class', 'myTst', 'show,foo-method', 'show,foo-method', 'show-methods'), File = c('myTst-package', 'foo-class', 'myTst-package', 'foo-class', 'show-methods', 'show-methods')), .Names = c('Topic', 'File'), row.names = c(3L, 1L, 4L, 2L, 6L, 5L), class = 'data.frame'));is.matrix(argv[[1]]); [1] FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_ismatrix.testismatrixGenericDispatch# +#{ is.matrix.cls <- function(x) 42; is.matrix(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_isna.testIsNA# #is.na(data.frame(col1=1:5, col2=c(NA, 1, NA, 2, NA))) col1 col2 @@ -29393,6 +29429,10 @@ a f g #{ is.na(list(1[10],1L[10],list(),integer())) } [1] TRUE TRUE FALSE FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_isna.testIsNA# +#{ is.na.cls <- function(x) 42; is.na(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_isna.testisna1# #argv <- list(8.21977282218514e-09);is.na(argv[[1]]); [1] FALSE @@ -29789,6 +29829,10 @@ logical(0) [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [25] FALSE TRUE FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnan.testisnanGenericDispatch# +#{ is.nan.cls <- function(x) 42; is.nan(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_isnull.testisnull1# #argv <- list(c('a', 'b', 'c'));is.null(argv[[1]]); [1] FALSE @@ -29869,11 +29913,11 @@ logical(0) #argv <- list(structure(c(39.7, 27.7, 43.5, 89.7, 70.2, 63.5, 36.5, 15.2, 35.3, 45.2, 1.2, 49.5, 63.1, 34, 17, 17.6, 67.8, 45.1, 50.9, 64.9, 59.8, 73, 37.6, 60.7, 60.8, 69.3, 71.2, 64.5, 75.9, 7.7, 72.6, 18.7, 78.2, 55.1, 58.1, 62, 53.3, 85.9, 67.5, 16.7, 46.6, 84.9, 19.4, 38.4, 5, 22, 17, 5, 16, 6, 12, 31, 9, 16, 37, 15, 13, 17, 15, 35, 14, 6, 22, 7, 22, 19, 15, 19, 16, 22, 12, 14, 9, 29, 18, 25, 12, 14, 14, 21, 12, 3, 14, 22, 16, 7, 26, 26, 5, 29, 15, 2, 7, 3, 7, 20, 7, 13, 53, 8, 13, 8, 12, 32, 8, 9, 12, 3, 10, 9, 7, 12, 10, 5, 1, 6, 9, 11, 2, 7, 6, 3, 8, 12, 7, 2, 7, 13, 29, 6, 28, 12, 93.4, 58.33, 5.16, 100, 92.85, 2.56, 33.77, 2.15, 90.57, 91.38, 42.34, 6.1, 96.83, 3.3, 9.96, 16.92, 97.16, 84.84, 15.14, 98.22, 5.23, 2.84, 4.97, 4.43, 7.72, 2.82, 2.4, 98.61, 99.06, 13.79, 24.2, 8.65, 98.96, 4.52, 5.23, 8.52, 97.67, 99.71, 2.27, 11.22, 50.43, 99.68, 12.11, 5.62, 20.2, 19.3, 20.6, 18.3, 23.6, 18, 20.3, 10.8, 26.6, 24.4, 18, 22.5, 18.1, 20, 22.2, 23, 24.9, 22.2, 16.7, 20.2, 18, 20, 20, 22.7, 16.3, 18.7, 21, 24.5, 17.8, 20.5, 21.2, 19.5, 19.4, 22.4, 23.8, 16.5, 21, 15.1, 19.1, 18.9, 18.2, 19.8, 20.2, 20.3), .Dim = c(44L, 5L), .Dimnames = list(c('Franches-Mnt', 'Rive Gauche', 'Neuveville', 'Herens', 'Broye', 'Paysd\'enhaut', 'Moutier', 'La Vallee', 'Porrentruy', 'Sarine', 'V. De Geneve', 'Yverdon', 'Sion', 'Grandson', 'Courtelary', 'Neuchatel', 'Glane', 'Delemont', 'Nyone', 'Monthey', 'Morges', 'Lavaux', 'Val de Ruz', 'Avenches', 'Rolle', 'Cossonay', 'Oron', 'Veveyse', 'St Maurice', 'La Chauxdfnd', 'Echallens', 'ValdeTravers', 'Martigwy', 'Moudon', 'Payerne', 'Aigle', 'Gruyere', 'Conthey', 'Aubonne', 'Le Locle', 'Rive Droite', 'Entremont', 'Lausanne', 'Boudry'), c('Agriculture', 'Examination', 'Education', 'Catholic', 'Infant.Mortality'))));is.numeric(argv[[1]]); [1] TRUE -##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14#Ignored.ImplementationError# +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14# #argv <- list(structure(c(1386439154.20645, 1386469154.20645, 1386499154.20645, 1386529154.20645, 1386559154.20645, 1386589154.20645, 1386619154.20645, 1386649154.20645, 1386679154.20645, 1386709154.20645, 1386739154.20645, 1386769154.20645, 1386799154.20645, 1386829154.20645, 1386859154.20645, 1386889154.20645, 1386919154.20645, 1386949154.20645, 1386979154.20645, 1387009154.20645, 1387039154.20645, 1387069154.20645, 1387099154.20645, 1387129154.20645, 1387159154.20645, 1387189154.20645, 1387219154.20645, 1387249154.20645, 1387279154.20645, 1387309154.20645, 1387339154.20645, 1387369154.20645, 1387399154.20645, 1387429154.20645), class = c('POSIXct', 'POSIXt')));is.numeric(argv[[1]]); [1] FALSE -##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14#Ignored.ImplementationError# +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14# #is.numeric(structure(1L, class = c('POSIXct', 'POSIXt'))) [1] FALSE @@ -29897,7 +29941,7 @@ logical(0) #argv <- list(structure(c(79.5323303457107, 6, 86.1989970123773, 6, 69.7732394366197, 5, 98.0323303457106, 6, 108.032330345711, 6, 89.1989970123773, 6, 114.198997012377, 6, 116.698997012377, 6, 110.365663679044, 6, 124.365663679044, 6, 126.365663679044, 6, 118.032330345711, 6), .Dim = c(6L, 4L), .Dimnames = structure(list(V = c('Golden.rain', 'rep ', 'Marvellous ', 'rep ', 'Victory ', 'rep '), N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = c('V', 'N'))));is.numeric(argv[[1]]); [1] TRUE -##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric2#Ignored.ImplementationError# +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric2# #argv <- list(structure(c(12784, 12874, 12965, 13057, 13149, 13239, 13330, 13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153, 14245, 14335), class = 'Date'));is.numeric(argv[[1]]); [1] FALSE @@ -29905,7 +29949,7 @@ logical(0) #argv <- list(structure(numeric(0), .Dim = c(3L, 0L)));is.numeric(argv[[1]]); [1] TRUE -##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric21#Ignored.ImplementationError# +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric21# #argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]); [1] FALSE @@ -29913,7 +29957,7 @@ logical(0) #argv <- list(structure(c(-3.001e+155, -1.067e+107, -1.976e+62, -9.961e+152, -2.059e+23, 0.5104), .Names = c('Min.', '1st Qu.', 'Median', 'Mean', '3rd Qu.', 'Max.'), class = c('summaryDefault', 'table')));is.numeric(argv[[1]]); [1] TRUE -##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric24#Ignored.ImplementationError# +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric24# #argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv) [1] FALSE @@ -29945,6 +29989,10 @@ logical(0) #argv <- list(structure(list(a_string = c('foo', 'bar'), a_bool = FALSE, a_struct = structure(list(a = 1, b = structure(c(1, 3, 2, 4), .Dim = c(2L, 2L)), c = 'foo'), .Names = c('a', 'b', 'c')), a_cell = structure(list(1, 'foo', structure(c(1, 3, 2, 4), .Dim = c(2L, 2L)), 'bar'), .Dim = c(2L, 2L)), a_complex_scalar = 0+1i, a_list = list(1, structure(c(1, 3, 2, 4), .Dim = c(2L, 2L)), 'foo'), a_complex_matrix = structure(c(1+2i, 5+0i, 3-4i, -6+0i), .Dim = c(2L, 2L)), a_range = c(1, 2, 3, 4, 5), a_scalar = 1, a_complex_3_d_array = structure(c(1+1i, 3+1i, 2+1i, 4+1i, 5-1i, 7-1i, 6-1i, 8-1i), .Dim = c(2L, 2L, 2L)), a_3_d_array = structure(c(1, 3, 2, 4, 5, 7, 6, 8), .Dim = c(2L, 2L, 2L)), a_matrix = structure(c(1, 3, 2, 4), .Dim = c(2L, 2L)), a_bool_matrix = structure(c(TRUE, FALSE, FALSE, TRUE), .Dim = c(2L, 2L))), .Names = c('a_string', 'a_bool', 'a_struct', 'a_cell', 'a_complex_scalar', 'a_list', 'a_complex_matrix', 'a_range', 'a_scalar', 'a_complex_3_d_array', 'a_3_d_array', 'a_matrix', 'a_bool_matrix')));is.numeric(argv[[1]]); [1] FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumericGenericDispatch# +#{ is.numeric.cls <- function(x) 42; is.numeric(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_isobject.testIsObject# #{ f<-function() 42; class(f)<-"foo"; is.object(f) } [1] TRUE @@ -47955,6 +48003,10 @@ Error in rep(c(7, 42), times = c(2, NA)) : invalid 'times' argument Error in rep(function() 42) : attempt to replicate an object of type 'closure' +##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testRep# +#{ rep.cls <- function(x) 42; rep(structure(c(1,2), class='cls')); } +[1] 42 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testRep# #{ x <- 1 ; names(x) <- c("X") ; rep(x, times=0) } named numeric(0) @@ -62904,6 +62956,10 @@ Error in seq.int(NaN) : 'from' cannot be NA, NaN or infinite #argv <- list(from = 0, to = 0.793110173512391, length.out = FALSE);do.call('seq.int', argv); integer(0) +##com.oracle.truffle.r.test.builtins.TestBuiltin_seqint.testseqintGenericDispatch# +#{ seq.int.cls <- function(x) 42; seq.int(structure(c(1,2), class='cls')); } +[1] 1 2 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_serialize.testSerializeWithPromises# #{ f <- function(...) serialize(environment()[['...']],NULL); x <- unserialize(f(a=3,b=2,c=1)); typeof(x) } [1] "..." diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java index c14ea94779518649d14ea38c2f50ae62e5c8802c..52ee6cfe6c6133a370e38ce9d78af85dfd1eb644 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java @@ -267,5 +267,6 @@ public class TestBuiltin_ascharacter extends TestBase { assertEval("{ f1<-function() 7; f2<-function(x) { sys.call() }; as.character(f2(f1())) }"); assertEval("{ f1<-function(x) 7; f2<-function(y) { sys.call() }; as.character(f2(f1(42))) }"); + assertEval("{ as.character.cls <- function(x) 42; as.character(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java index b7a010a802caba243ba8657deaad7826c0e023cc..766320bdadf0ce374ea4d015db943c5862bb93f0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java @@ -101,5 +101,6 @@ public class TestBuiltin_ascomplex extends TestBase { assertEval("{ as.complex(list(42)) }"); assertEval(Output.IgnoreErrorContext, "{ as.complex(list(NULL)) }"); assertEval(Output.IgnoreWarningContext, "{ as.complex(list(\"foo\")) }"); + assertEval("{ as.complex.cls <- function(x) 42; as.complex(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java index 4d17ef28c61d8d7b203bd5749af474dd9e950133..a8bf3d2060252563251c2749fa5f0f48b47e721e 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java @@ -185,5 +185,6 @@ public class TestBuiltin_asdouble extends TestBase { assertEval("{ x<-c(a=1.1, b=2.2); dim(x)<-c(1,2); attr(x, \"foo\")<-\"foo\"; y<-as.double(x); attributes(y) }"); assertEval("{ x<-c(a=1L, b=2L); dim(x)<-c(1,2); attr(x, \"foo\")<-\"foo\"; y<-as.double(x); attributes(y) }"); assertEval("{ as.double(NULL) }"); + assertEval("{ as.double.cls <- function(x) 42; as.double(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java index c126342f28f3ff0a118497dc105579aa02b5c654..19aeddb65d4d96a5da38c47f76af20880fac9004 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java @@ -146,5 +146,6 @@ public class TestBuiltin_asinteger extends TestBase { assertEval("{ as.integer(\"\") }"); assertEval("{ as.integer(as.character(NA)) }"); assertEval("{ as.integer(\"1\", as.character(NA)) }"); + assertEval("{ as.integer.cls <- function(x) 42; as.integer(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aslogical.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aslogical.java index 06aac364437447adef9c6966430184850fa5982c..528771ad78568fef103adc9c2696fee3364f85b8 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aslogical.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aslogical.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -99,5 +99,6 @@ public class TestBuiltin_aslogical extends TestBase { assertEval("{ as.logical(10+2i) }"); assertEval("{ as.logical(c(3+3i, 4+4i)) }"); assertEval("{ as.logical(NULL) }"); + assertEval("{ as.logical.cls <- function(x) 42; as.logical(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java index d8c0187dacfb3f77352b69a7d78d97ffad8bf785..6432d859efb3eee089ad3ef48c779d2190d1837d 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java @@ -58,6 +58,7 @@ public class TestBuiltin_asraw extends TestBase { assertEval("{ as.raw(c(1L, 2L, 3L)) }"); assertEval("{ as.raw(list(1,2,3)) }"); assertEval("{ as.raw(list(\"1\", 2L, 3.4)) }"); + assertEval("{ as.raw.cls <- function(x) 42; as.raw(structure(c(1,2), class='cls')); }"); assertEval(Output.IgnoreWarningContext, "{ as.raw(1+1i) }"); assertEval(Output.IgnoreWarningContext, "{ as.raw(-1) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asvector.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asvector.java index 1dc4be1176b3d28cce36fd0d863329bb5d6c1565..9e95aa28f713d7e0016d5fbabcecdb1590c9771a 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asvector.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asvector.java @@ -443,6 +443,7 @@ public class TestBuiltin_asvector extends TestBase { assertEval(Output.ImprovedErrorContext, "{ as.vector(42, character()) }"); assertEval("as.vector(NULL, mode='pairlist')"); + assertEval("{ as.vector.cls <- function(x, mode) 42; as.vector(structure(c(1,2), class='cls')); }"); } @Test diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isarray.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isarray.java index 70cbafc70bbed98f3596396e5b64181fe9326ea0..000a50537c52fe1c8cd4404e074c2f12df67bb65 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isarray.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isarray.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2014, Purdue University - * Copyright (c) 2014, 2016, Oracle and/or its affiliates + * Copyright (c) 2014, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -131,4 +131,9 @@ public class TestBuiltin_isarray extends TestBase { public void testisarray23() { assertEval("argv <- list(c(0.568, 1.432, -1.08, 1.08));is.array(argv[[1]]);"); } + + @Test + public void testisarrayGenericDispatch() { + assertEval("{ is.array.cls <- function(x) 42; is.array(structure(c(1,2), class='cls')); }"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ismatrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ismatrix.java index 05ec35244b01276710464b42b5b15644bae27742..99c4cfb82ead072b84bb6ac8e1455a1e05f507d9 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ismatrix.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ismatrix.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2014, Purdue University - * Copyright (c) 2014, 2016, Oracle and/or its affiliates + * Copyright (c) 2014, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -126,4 +126,9 @@ public class TestBuiltin_ismatrix extends TestBase { public void testismatrix23() { assertEval("argv <- list(0.0597289453377495);do.call('is.matrix', argv)"); } + + @Test + public void testismatrixGenericDispatch() { + assertEval("{ is.matrix.cls <- function(x) 42; is.matrix(structure(c(1,2), class='cls')); }"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java index 0322c2fb15b31d0f72a46e157d86ae5b640881e2..5354f397e606491a842fc0ba3738fb87bc47503d 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java @@ -253,6 +253,7 @@ public class TestBuiltin_isna extends TestBase { assertEval("is.na(data.frame(col1=1:5, col2=c(NA, 1, NA, 2, NA)))"); assertEval("v <- c(a=1,b=1234,c='ff',d='gg'); dim(v) <- c(foo=2,bar=2); dimnames(v) <- list(a=c('foo', 'bar'), n=c('f','g')); is.na(v)"); + assertEval("{ is.na.cls <- function(x) 42; is.na(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnan.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnan.java index 786da412a54b73c17033640145516ba780b74086..4b78f7ebb6be340c7aa6d83d763bf2c01bdea189 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnan.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnan.java @@ -61,4 +61,9 @@ public class TestBuiltin_isnan extends TestBase { public void testisnan10() { assertEval("argv <- list(structure(c(1, 1, 1, 1, 1, 1), .Dim = 1:3));is.nan(argv[[1]]);"); } + + @Test + public void testisnanGenericDispatch() { + assertEval("{ is.nan.cls <- function(x) 42; is.nan(structure(c(1,2), class='cls')); }"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java index d7ee33c14408e64ce9000fb56f46c0b1c4be32b3..aa5097ae62482c015b0c894833f62b4fcdd99a83 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java @@ -24,9 +24,7 @@ public class TestBuiltin_isnumeric extends TestBase { @Test public void testisnumeric2() { - // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric() - assertEval(Ignored.ImplementationError, - "argv <- list(structure(c(12784, 12874, 12965, 13057, 13149, 13239, 13330, 13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153, 14245, 14335), class = 'Date'));is.numeric(argv[[1]]);"); + assertEval("argv <- list(structure(c(12784, 12874, 12965, 13057, 13149, 13239, 13330, 13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153, 14245, 14335), class = 'Date'));is.numeric(argv[[1]]);"); } @Test @@ -86,10 +84,8 @@ public class TestBuiltin_isnumeric extends TestBase { @Test public void testisnumeric14() { - // FIXME according to ?is.numeric the 'POSIXt' class should return FALSE from is.numeric() - assertEval(Ignored.ImplementationError, "is.numeric(structure(1L, class = c('POSIXct', 'POSIXt')))"); - assertEval(Ignored.ImplementationError, - "argv <- list(structure(c(1386439154.20645, 1386469154.20645, 1386499154.20645, 1386529154.20645, 1386559154.20645, 1386589154.20645, 1386619154.20645, 1386649154.20645, 1386679154.20645, 1386709154.20645, 1386739154.20645, 1386769154.20645, 1386799154.20645, 1386829154.20645, 1386859154.20645, 1386889154.20645, 1386919154.20645, 1386949154.20645, 1386979154.20645, 1387009154.20645, 1387039154.20645, 1387069154.20645, 1387099154.20645, 1387129154.20645, 1387159154.20645, 1387189154.20645, 1387219154.20645, 1387249154.20645, 1387279154.20645, 1387309154.20645, 1387339154.20645, 1387369154.20645, 1387399154.20645, 1387429154.20645), class = c('POSIXct', 'POSIXt')));is.numeric(argv[[1]]);"); + assertEval("is.numeric(structure(1L, class = c('POSIXct', 'POSIXt')))"); + assertEval("argv <- list(structure(c(1386439154.20645, 1386469154.20645, 1386499154.20645, 1386529154.20645, 1386559154.20645, 1386589154.20645, 1386619154.20645, 1386649154.20645, 1386679154.20645, 1386709154.20645, 1386739154.20645, 1386769154.20645, 1386799154.20645, 1386829154.20645, 1386859154.20645, 1386889154.20645, 1386919154.20645, 1386949154.20645, 1386979154.20645, 1387009154.20645, 1387039154.20645, 1387069154.20645, 1387099154.20645, 1387129154.20645, 1387159154.20645, 1387189154.20645, 1387219154.20645, 1387249154.20645, 1387279154.20645, 1387309154.20645, 1387339154.20645, 1387369154.20645, 1387399154.20645, 1387429154.20645), class = c('POSIXct', 'POSIXt')));is.numeric(argv[[1]]);"); } @Test @@ -124,8 +120,7 @@ public class TestBuiltin_isnumeric extends TestBase { @Test public void testisnumeric21() { - // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric() - assertEval(Ignored.ImplementationError, "argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]);"); + assertEval("argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]);"); } @Test @@ -135,7 +130,12 @@ public class TestBuiltin_isnumeric extends TestBase { @Test public void testisnumeric24() { - // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric() - assertEval(Ignored.ImplementationError, "argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv)"); + assertEval("argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv)"); } + + @Test + public void testisnumericGenericDispatch() { + assertEval("{ is.numeric.cls <- function(x) 42; is.numeric(structure(c(1,2), class='cls')); }"); + } + } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java index f40826faf1a65e0cb55d9de0457e58dbbfdcae4f..46cc3614b3d2077f752e153e3f6fb429fa4554d1 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java @@ -234,5 +234,7 @@ public class TestBuiltin_rep extends TestBase { assertEval("v <- 1; names(v) <- 'asdf'; rep(v, 2)"); assertEval("v <- 1; class(v) <- 'asdf'; rep(v, 1)"); assertEval("v <- 1; class(v) <- 'asdf'; rep(v, 2)"); + + assertEval("{ rep.cls <- function(x) 42; rep(structure(c(1,2), class='cls')); }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_seqint.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_seqint.java index 51307af886e6deb8f6f6eaf1686ed54474c84d01..145ce17527e1f5c79a23ec0ecd0529379498488d 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_seqint.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_seqint.java @@ -156,4 +156,9 @@ public class TestBuiltin_seqint extends TestBase { public void testseqint29() { assertEval(Output.IgnoreErrorContext, "argv <- list(NaN);do.call('seq.int', argv)"); } + + @Test + public void testseqintGenericDispatch() { + assertEval("{ seq.int.cls <- function(x) 42; seq.int(structure(c(1,2), class='cls')); }"); + } }