Skip to content
Snippets Groups Projects
Commit c9b4f171 authored by Mick Jordan's avatar Mick Jordan
Browse files

testrffi: add test for C string null termination

parent 69b2fdfe
No related branches found
No related tags found
No related merge requests found
......@@ -78,6 +78,10 @@ rffi.r_home <- function() {
.Call("r_home", PACKAGE = "testrffi")
}
rffi.char_length <- function(x) {
.Call("char_length", PACKAGE = "testrffi", x)
}
rffi.mkStringFromChar <- function() {
.Call("mkStringFromChar", PACKAGE = "testrffi")
}
......
......@@ -219,6 +219,15 @@ SEXP r_home(void) {
return mkString(R_Home);
}
SEXP char_length(SEXP x) {
const char *cx = R_CHAR(STRING_ELT(x, 0));
int count = 0;
while (*cx++ != 0) {
count++;
}
return ScalarInteger(count);
}
SEXP mkStringFromChar(void) {
return mkString("hello");
}
......
......@@ -119998,6 +119998,10 @@ NULL
#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.addDouble(2, 3); detach("package:testrffi", unload=T); x }
[1] 5
 
##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI20#
#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- "12345"; x <- rffi.char_length(x); detach("package:testrffi", unload=T); x }
[1] 5
##com.oracle.truffle.r.test.rffi.TestRFFIPackage.testRFFI3#
#{ library("testrffi", lib.loc = "tmptest/com.oracle.truffle.r.test.rpackages"); x <- rffi.populateIntVector(5); detach("package:testrffi", unload=T); x }
[1] 0 1 2 3 4
......@@ -160,4 +160,9 @@ public class TestRFFIPackage extends TestRPackages {
public void testRFFI19() {
assertEvalWithLibWithSetup("x <- 1; ", "rffi.findvar(\"x\", globalenv())");
}
@Test
public void testRFFI20() {
assertEvalWithLibWithSetup("x <- \"12345\"; ", "rffi.char_length(x)");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment