mirror of https://github.com/swig/swig
Rtest3 (#2448)
Improve li_std_vector_vector runtime test for R - Fix unittest_sequence to fail if elements don't match. - li_std_vector_vector testcase fixes. Replace list with c because vectors in R are not exactly lists, therefore comparing vectors (returned by C++) with R lists complicates things a lot. Added as.integer because by default numbers are numeric and I guess we want to check the exact type returned by C++ which is integer the first check fails because make_vector_int returns a vector of strings (containing numbers), not integers (in the previous version this test would pass because R does an implicit Closes #2448
This commit is contained in:
parent
64c9720a7a
commit
04355afeb3
|
@ -11,9 +11,9 @@ namespace std {
|
|||
};
|
||||
|
||||
%inline %{
|
||||
std::vector<std::string> make_vector_int() {
|
||||
std::string x[5] = {"1", "2", "3", "4", "5"};
|
||||
std::vector<std::string> v;
|
||||
std::vector<int> make_vector_int() {
|
||||
int x[5] = {1, 2, 3, 4, 5};
|
||||
std::vector<int> v;
|
||||
for (size_t i = 0; i < 5; ++i)
|
||||
v.push_back(x[i]);
|
||||
return v;
|
||||
|
|
|
@ -6,23 +6,24 @@ source("li_std_vector_vector.R")
|
|||
cacheMetaData(1)
|
||||
|
||||
v = make_vector_int()
|
||||
unittest_sequence(v, list(1, 2, 3, 4, 5))
|
||||
unittest_sequence(v, as.integer(c(1, 2, 3, 4, 5)))
|
||||
|
||||
v = make_vector_vector_int()
|
||||
unittest(length(v), 1)
|
||||
unittest_sequence(v[[1]], list(1, 2, 3, 4, 5))
|
||||
unittest_sequence(v[[1]], as.integer(c(1, 2, 3, 4, 5)))
|
||||
|
||||
v = make_vector_bool()
|
||||
unittest_sequence(v, list(TRUE, FALSE, FALSE, FALSE, TRUE))
|
||||
unittest_sequence(v, c(TRUE, FALSE, FALSE, FALSE, TRUE))
|
||||
print(v)
|
||||
v = make_vector_vector_bool()
|
||||
unittest(length(v), 1)
|
||||
print(v)
|
||||
unittest_sequence(v[[1]], list(FALSE, TRUE, TRUE, TRUE, FALSE)) # Does not actually fail if no match, arg, needs fixing
|
||||
unittest_sequence(v[[1]], c(FALSE, TRUE, TRUE, TRUE, FALSE))
|
||||
|
||||
v = make_vector_string()
|
||||
unittest_sequence(v, list("aa", "bb", "cc", "dd", "ee"))
|
||||
unittest_sequence(v, c("aa", "bb", "cc", "dd", "ee"))
|
||||
v = make_vector_vector_string()
|
||||
unittest(length(v), 1)
|
||||
unittest_sequence(v[[1]], list("1", "2", "3", "4", "5"))
|
||||
unittest_sequence(v[[1]], c("1", "2", "3", "4", "5"))
|
||||
|
||||
q(save="no")
|
||||
|
|
|
@ -18,10 +18,26 @@ unittesttol <- function(x,y,z) {
|
|||
}
|
||||
|
||||
unittest_sequence <- function (x,y) {
|
||||
if (setequal(x, y)) {
|
||||
x = as.vector(x)
|
||||
y = as.vector(y)
|
||||
|
||||
if (length(x) == 0 && length(y) == 0) {
|
||||
print("PASS")
|
||||
} else {
|
||||
return()
|
||||
}
|
||||
|
||||
if (class(x[1]) != class(y[1])) {
|
||||
print("FAILED")
|
||||
stop(paste("Test failed: ", class(x[1]), " != ", class(y[1])))
|
||||
}
|
||||
|
||||
try(expr = {
|
||||
if (!any(x != y)) {
|
||||
print("PASS")
|
||||
return()
|
||||
}
|
||||
}, silent = T)
|
||||
|
||||
print("FAIL")
|
||||
stop("Test failed")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue