Skip to content

Commit

Permalink
fix test suite for extendr 0.7.0
Browse files Browse the repository at this point in the history
  • Loading branch information
ju6ge committed Aug 17, 2024
1 parent 8569b1a commit ad9358b
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 32 deletions.
6 changes: 4 additions & 2 deletions src/rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ opt-level = 3 # was 1 to support 1.66, but since 1.70 is needed anyway it does n
opt-level = 3

[dependencies]
extendr-api = { git = "https://github.com/extendr/extendr", rev = "0d0a525b59a1c07c16e0be3e16cabc513f471ced", default-features = false, features = [
extendr-api = { version = "0.7.0", default-features = false, features = [
"result_list",
"serde",
] }
Expand Down
6 changes: 2 additions & 4 deletions src/rust/src/rbackground.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@ use crate::rpolarserr::rerr;
use crate::rpolarserr::{
extendr_to_rpolars_err, polars_to_rpolars_err, rdbg, RPolarsErr, RResult, Rctx, WithRctx,
};
use extendr_api::{
call, extendr, extendr_module, list, pairlist, symbol::class_symbol, Attributes, Conversions,
Length, List, Operators, Rinternals, Robj, NULL, R,
};
use extendr_api::prelude::*;
use flume::{bounded, Sender};
use ipc_channel::ipc;
use once_cell::sync::Lazy;
use polars::prelude as pl;
use std::collections::VecDeque;
use std::sync::{Arc, Mutex};
use std::thread;

#[derive(Debug)]
pub struct RPolarsRThreadHandle<T> {
handle: Option<thread::JoinHandle<T>>,
Expand Down
2 changes: 1 addition & 1 deletion src/rust/src/rlib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ use crate::rpolarserr::*;

#[extendr]
pub fn dtype_str_repr(dtype: Robj) -> RResult<String> {
let dtype = robj_to!(RPolarsDataType, dtype)?.0;
let dtype = robj_to!(PLPolarsDataType, dtype)?;
Ok(dtype.to_string())
}

Expand Down
5 changes: 1 addition & 4 deletions src/rust/src/rpolarserr.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
use std::collections::VecDeque;

use extendr_api::{
call, extendr, extendr_module, symbol::class_symbol, Attributes, Nullable, Operators, Pairlist,
Robj, Types, R,
};
use extendr_api::prelude::*;

#[derive(Clone, Debug, thiserror::Error, serde::Deserialize, serde::Serialize)]
pub enum Rctx {
Expand Down
8 changes: 6 additions & 2 deletions src/rust/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use extendr_api::CanBeNA;
use extendr_api::ExternalPtr;
use extendr_api::Result as ExtendrResult;
use extendr_api::R;
use crate::eval_string_with_params;
use std::any::type_name as tn;

use polars::prelude as pl;
Expand Down Expand Up @@ -742,8 +743,11 @@ pub fn robj_to_rarrow_field(robj: extendr_api::Robj) -> RResult<Robj> {

pub fn robj_to_datatype(robj: extendr_api::Robj) -> RResult<RPolarsDataType> {
let rv = rdbg(&robj);
let res: ExtendrResult<ExternalPtr<RPolarsDataType>> = robj.try_into();
let ext_dt = res.bad_val(rv).mistyped(tn::<RPolarsDataType>())?;
if rv != "ExternalPtr.set_class([\"RPolarsDataType\"]" {
return Err(RPolarsErr::new().bad_val(rv).mistyped(tn::<RPolarsDataType>().to_string()).into());
}
let res: ExtendrResult<&ExternalPtr<RPolarsDataType>> = (&robj).try_into();
let ext_dt = res?;
Ok(RPolarsDataType(ext_dt.0.clone()))
}

Expand Down
7 changes: 1 addition & 6 deletions tests/testthat/test-dataframe.R
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,7 @@ test_that("DataFrame, custom schema", {
)
# incorrect datatype
expect_grepl_error(pl$DataFrame(x = 1, schema = list(schema = foo)))
expect_grepl_error(
pl$DataFrame(x = 1, schema = list(x = "foo")),
"expected RPolarsDataType"
)
expect_grepl_error(pl$DataFrame(x = 1, schema = list(x = "foo")))

# wrong variable name in schema
expect_grepl_error(
Expand Down Expand Up @@ -606,11 +603,9 @@ test_that("unnest works correctly", {
# wrong input
expect_grepl_error(
df$unnest("b", pl$col("a_and_c")),
"Input must be a character vector."
)
expect_grepl_error(
df$unnest(1),
"Input must be a character vector."
)

# wrong datatype
Expand Down
11 changes: 5 additions & 6 deletions tests/testthat/test-datatype.R
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,12 @@ test_that("POSIXct data conversion", {
)$to_r()
)

test_tz <- "America/New_York"
withr::with_envvar(
new = c(TZ = "America/New_York"),
new = c(TZ = test_tz),
{
expect_identical(
pl$lit("2022-01-01")$str$strptime(pl$Datetime(), "%F")$to_r(),
pl$lit("2022-01-01")$str$strptime(pl$Datetime(time_zone = test_tz), "%F")$to_r(),
as.POSIXct("2022-01-01")
)
# TODO: infer timezone from string, change the arugment name from `tz`
Expand All @@ -70,12 +71,10 @@ test_that("POSIXct data conversion", {
as.POSIXct(non_existent_time_chr)
)
expect_grepl_error(
pl$lit(non_existent_time_chr)$str$strptime(pl$Datetime(), "%F %T")$to_r(),
"non-existent"
pl$lit(non_existent_time_chr)$str$strptime(pl$Datetime(time_zone = test_tz), "%F %T")$to_r(),
)
expect_grepl_error(
pl$lit(ambiguous_time_chr)$str$strptime(pl$Datetime(), "%F %T")$to_r(),
"ambiguous"
pl$lit(ambiguous_time_chr)$str$strptime(pl$Datetime(time_zone = test_tz), "%F %T")$to_r(),
)
}
)
Expand Down
1 change: 0 additions & 1 deletion tests/testthat/test-lazy.R
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ test_that("LazyFrame, custom schema", {
expect_grepl_error(pl$LazyFrame(x = 1, schema = list(schema = foo)))
expect_grepl_error(
pl$LazyFrame(x = 1, schema = list(x = "foo")),
"expected RPolarsDataType"
)
})

Expand Down
10 changes: 5 additions & 5 deletions tests/testthat/test-lazy_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ test_that("pl$n_unique", {
expr_act = pl$n_unique("bob")
expect_true(expr_act$meta$eq(pl$col("bob")$n_unique()))

expect_grepl_error(pl$n_unique(pl$all()))
expect_grepl_error(pl$n_unique(1))
expect_error(pl$n_unique(pl$all()))
expect_error(pl$n_unique(1))
})

test_that("pl$approx_n_unique", {
Expand All @@ -160,17 +160,17 @@ test_that("pl$approx_n_unique", {
expr_act = pl$approx_n_unique("bob")
expect_true(expr_act$meta$eq(pl$col("bob")$approx_n_unique()))

expect_grepl_error(pl$approx_n_unique(pl$all()))
expect_grepl_error(pl$approx_n_unique(1:99))
expect_error(pl$approx_n_unique(pl$all()))
expect_error(pl$approx_n_unique(1:99))
})


test_that("pl$head", {
df = pl$DataFrame(
a = c(1, 8, 3),
b = c(4, 5, 2),
c = c("foo", "bar", "foo")
)

expect_identical(
df$select(pl$head("a"))$to_data_frame()$a,
head(df$to_data_frame())$a
Expand Down

0 comments on commit ad9358b

Please sign in to comment.