Skip to content

Commit df95df8

Browse files
committed
add stuffs
* testthat (jlvalue_capture_output) * jl_set.seed * is.variable
1 parent 9a681f5 commit df95df8

13 files changed

+63
-16
lines changed

DESCRIPTION

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
Package: jl4R
2-
Version: 0.0.2
2+
Version: 0.1.0
33
Title: Julia Interface
44
Author: Cqls Team
5-
Maintainer: Remy Drouilhet <remy.drouilhet@upmf-grenoble.fr>
5+
Maintainer: Remy Drouilhet <remy.drouilhet@univ-grenoble-alpes.fr>
66
Description: Interface to julia
77
License: GPL Version 2 or later.
8+
Suggests:
9+
testthat (>= 3.0.0)
10+
Config/testthat/edition: 3

NAMESPACE

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ export(
2222
jlDict, jlTuple, jlNamedTuple, jlStruct,
2323
jlcolon, jlsymbol,
2424
jlshow, jldisplay,
25-
rand,
26-
##
27-
rexpr2jlexpr
25+
"%<:%", "%isa%",
26+
rand, jl_set.seed,
27+
## extra
28+
rexpr2jlexpr,
29+
jlvalue_capture_display # useful for testthat
2830
)
2931

3032
S3method(print,jlvalue)

R/jl4R.R

+6-4
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@
44

55

66
jl <- function(obj, ..., name_class = TRUE) {
7-
if (name_class && !(deparse(substitute(obj)) %in% ls(parent.frame()))) {
7+
name <- deparse(substitute(obj))
8+
if( name_class && !is.variable(name, parent.frame())) {
89
return(jl_rexpr(substitute(obj), obj, ...))
910
}
10-
jlvalue(obj, ...)
11+
jlvalue_or_jlexception(name, jlvalue(obj, ...))
1112
}
1213

1314
jlR <- function(obj, ..., name_class = TRUE) {
14-
if (name_class && !(deparse(substitute(obj)) %in% ls(parent.frame()))) {
15+
name <- deparse(substitute(obj))
16+
if (name_class && !(is.variable(name, parent.frame()))) {
1517
res <- jl_rexpr(substitute(obj), ...)
1618
if (!is.null(res)) return(toR(res))
1719
}
18-
toR(jlvalue(obj, ...))
20+
toR(jlvalue_or_jlexception(name, jlvalue(obj, ...)))
1921
}
2022

2123
jl2 <- function(obj, ..., name_class = TRUE) {

R/jl_exception.R

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ print.jlexception <- function(obj, ...) {
2929

3030
summary.jlexception <- function(obj) {
3131
cat("Julia Exception:",class(obj)[[1]],"\n")
32-
jl(showerror)(stdout, obj$err)
32+
jlvalue_call("showerror", jlvalue_eval("stdout"), obj$err)
3333
invisible(cat("\n"))
3434
# cat(toR(jlstring(obj$err)),"\n")
3535
}

R/jl_generic.R

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Put here generic function used in the julia side but not in the R side
22
rand <- function(obj, ...) UseMethod("rand")
3+
jl_set.seed <- function(n) {
4+
jlusing(Random)
5+
invisible(jl(`Random.seed!`)(as.integer(n)))
6+
}
37
rand.integer <- rand.double <- function(obj) jlvalue_call("rand", jlvalue(as.integer(obj)))
48
rand.default <- function(obj, ...) jlvalue_call("rand")

R/jl_utils.R

+5-1
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,8 @@ jlfieldnamesR <- function(jlval) toR(jlfieldnames(jlval))
5252
jlgetfieldR <- function(jlval, field) toR(jlgetfield(jlval, field))
5353

5454
jlshow <- function(jlval) invisible(jltrycall("show",jlval))
55-
jldisplay <- function(jlval) invisible(jltrycall("display",jlval))
55+
jldisplay <- function(jlval) invisible(jltrycall("display",jlval))
56+
57+
"%<:%" <- function(a, b) {args <- jl4R:::jl_rexprs2(substitute(list(a,b)), parent_envir=parent.frame());jl(`<:`)(args[[1]],args[[2]])}
58+
59+
"%isa%" <- function(a, b) {args <- jl4R:::jl_rexprs2(substitute(list(a,b)), parent_envir=parent.frame());jl(isa)(args[[1]],args[[2]])}

R/jl_utils_internals.R

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jl_rexpr <- function(rexpr, obj, ...) { # rexpr is generally the result of subst
55
if(is.jlfunction(jlval)) {
66
jlfunction(jlval)
77
} else {
8-
jlval
8+
jlvalue_or_jlexception(rexpr, jlval)
99
}
1010
} else {
1111
jlvalue(obj, ...)
@@ -30,7 +30,7 @@ jl_rexpr2 <- function(rexpr, parent_envir= parent.frame()) { # rexpr is generall
3030
# print(list(obj=obj, isjlf=is.jlfunction(jlval), robj = obj %in% ls(parent_envir), envir=ls(parent_envir)))
3131
if(is.jlfunction(jlval)) {
3232
jlfunction(jlval, parent_envir)
33-
} else if (obj %in% ls(parent_envir) ) {
33+
} else if(is.variable(obj, parent_envir)) {# (obj %in% ls(parent_envir) ) {
3434
obj <- eval(rexpr, envir=parent_envir)
3535
jlvalue(obj)
3636
} else {

R/utils.R

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
is.variable <- function(name, envir) {
2+
exists(name,envir=envir) && !is.function(eval(parse(text = name), envir = envir))
3+
}

src/jl4R.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jl_value_t* get_preserved_jlvalue_from_R_ExternalPtrAddr(SEXP ans) {
6868

6969
SEXP jl4R_init(SEXP args)
7070
{
71-
char *julia_home_dir;
71+
// char *julia_home_dir;
7272

7373
if(!jl4R_julia_running) {
7474
// if(!isValidString(CADR(args)))
@@ -90,8 +90,8 @@ void jl4R_exit()
9090
{
9191
if(jl4R_julia_running) {
9292
jl_atexit_hook(0);
93-
jl4R_julia_running=0;
94-
printf("julia finalize!!!\n");
93+
jl4R_julia_running = 0;
94+
printf("julia stopped!!!\n");
9595
}
9696
}
9797

tests/testthat.R

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# This file is part of the standard setup for testthat.
2+
# It is recommended that you do not modify it.
3+
#
4+
# Where should you do additional test configuration?
5+
# Learn more about the roles of various files in:
6+
# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
7+
# * https://testthat.r-lib.org/articles/special-files.html
8+
9+
library(testthat)
10+
library(jl4R)
11+
12+
test_check("jl4R")

tests/testthat/test-eval.R

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
test_that("jl eval int64", {
2+
expect_equal(jlvalue_capture_display(jl(`2 * 2`)), "4\n")
3+
})
4+
5+
test_that("jl eval string", {
6+
expect_equal(jlvalue_capture_display(jl(`"2 * 2"`)), '"2 * 2"\n')
7+
})
8+
9+
test_that("jl eval symbol", {
10+
expect_equal(jlvalue_capture_display(jlsymbol("toto")), ":toto\n")
11+
})

tests/testthat/test-jl2r.R

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
test_that("multiplication works", {
2+
expect_equal(2 * 2, 4)
3+
})

tests/testthat/test-r2jl.R

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
test_that("multiplication works", {
2+
expect_equal(2 * 2, 4)
3+
})

0 commit comments

Comments
 (0)