diff --git a/jl_sys/src/bindings.rs b/jl_sys/src/bindings.rs index 56d0905..3e398c4 100644 --- a/jl_sys/src/bindings.rs +++ b/jl_sys/src/bindings.rs @@ -580,19 +580,6 @@ extern "C" { dims: *mut crate::types::jl_value_t, ) -> *mut crate::types::jl_array_t; - #[cfg(any( - feature = "julia-1-6", - feature = "julia-1-7", - feature = "julia-1-8", - feature = "julia-1-9", - feature = "julia-1-10", - ))] - pub fn jl_reshape_array( - atype: *mut crate::types::jl_value_t, - data: *mut crate::types::jl_array_t, - dims: *mut crate::types::jl_value_t, - ) -> *mut crate::types::jl_array_t; - pub fn jl_ptr_to_array_1d( atype: *mut crate::types::jl_value_t, data: *mut std::ffi::c_void, diff --git a/jlrs/src/data/managed/array/data/accessor.rs b/jlrs/src/data/managed/array/data/accessor.rs index 57b1135..db389d2 100644 --- a/jlrs/src/data/managed/array/data/accessor.rs +++ b/jlrs/src/data/managed/array/data/accessor.rs @@ -23,8 +23,6 @@ use std::{ sync::atomic::{AtomicPtr, Ordering}, }; -#[julia_version(until = "1.10")] -use jl_sys::{jl_apply_array_type, jl_reshape_array}; use jl_sys::{ jl_array_del_end, jl_array_grow_end, jl_value_t, jlrs_array_typetagdata, jlrs_arrayref, jlrs_arrayset, @@ -32,11 +30,6 @@ use jl_sys::{ use jlrs_macros::julia_version; use super::copied::CopiedArray; -#[julia_version(until = "1.10")] -use crate::data::managed::array::{ - dimensions::{ArrayDimensions, CompatibleIndices, RankedDims}, - sized_dim_tuple, ArrayBaseData, ArrayBaseResult, -}; use crate::{ catch::{catch_exceptions, unwrap_exc}, data::{ @@ -106,137 +99,6 @@ pub trait Accessor<'scope, 'data, T, const N: isize> { ValueRef::wrap(NonNull::new_unchecked(v)).root(target) } } - - /// Create a new array with dimensions `D` that shares its data with `self`. - /// - /// If the number of elements of `dims` is not equal to the number of elements - /// an exception is thrown, which is caught and returned. - #[julia_version(until = "1.10")] - fn reshape<'target, D, Tgt>( - &self, - target: Tgt, - dims: D, - ) -> ArrayBaseResult<'target, 'data, Tgt, T, -1> - where - D: RankedDims, - Tgt: Target<'target>, - { - // todo: check size - - target.with_local_scope::<_, _, 1>(|target, mut frame| unsafe { - let arr = self.array(); - let elty_ptr = arr.element_type().unwrap(Private); - - // Safety: The array type is rooted until the array has been constructed, all C API - // functions are called with valid data. If an exception is thrown it's caught. - let callback = || { - let array_type = jl_apply_array_type(elty_ptr, dims.rank()); - - let tuple = sized_dim_tuple(&mut frame, &dims); - - jl_reshape_array(array_type, arr.unwrap(Private), tuple.unwrap(Private)) - }; - - let res = match catch_exceptions(callback, unwrap_exc) { - Ok(array_ptr) => Ok(NonNull::new_unchecked(array_ptr)), - Err(e) => Err(e), - }; - - target.result_from_ptr(res, Private) - }) - } - - /// Create a new array with dimensions `D` that shares its data with `self` without checking - /// any invariants. - /// - /// If the number of elements of `dims` is not equal to the number of elements - /// an exception is thrown which is not caught. - #[julia_version(until = "1.10")] - unsafe fn reshape_unchecked<'target, D, Tgt>( - &self, - target: Tgt, - dims: D, - ) -> ArrayBaseData<'target, 'data, Tgt, T, -1> - where - D: RankedDims, - Tgt: Target<'target>, - { - target.with_local_scope::<_, _, 1>(|target, mut frame| { - let arr = self.array(); - let elty_ptr = arr.element_type().unwrap(Private); - let array_type = jl_apply_array_type(elty_ptr, dims.rank()); - let tuple = sized_dim_tuple(&mut frame, &dims); - let arr = jl_reshape_array(array_type, arr.unwrap(Private), tuple.unwrap(Private)); - - target.data_from_ptr(NonNull::new_unchecked(arr), Private) - }) - } - - /// See [`ArrayBase::reshape`]. The only difference is that the rank of the returned array is - /// set. - #[julia_version(until = "1.10")] - fn reshape_ranked<'target, D, Tgt, const M: isize>( - &self, - target: Tgt, - dims: D, - ) -> JlrsResult> - where - D: RankedDims, - Tgt: Target<'target>, - { - let _ = D::ASSERT_RANKED; - let _ = <(ArrayDimensions<'_, M>, D) as CompatibleIndices<_, _>>::ASSERT_COMPATIBLE; - - // todo: check size - - target.with_local_scope::<_, _, 1>(|target, mut frame| unsafe { - let arr = self.array(); - let elty_ptr = arr.element_type().unwrap(Private); - - // Safety: The array type is rooted until the array has been constructed, all C API - // functions are called with valid data. If an exception is thrown it's caught. - let callback = || { - let array_type = jl_apply_array_type(elty_ptr, dims.rank()); - - let tuple = sized_dim_tuple(&mut frame, &dims); - - jl_reshape_array(array_type, arr.unwrap(Private), tuple.unwrap(Private)) - }; - - let res = match catch_exceptions(callback, unwrap_exc) { - Ok(array_ptr) => Ok(NonNull::new_unchecked(array_ptr)), - Err(e) => Err(e), - }; - - Ok(target.result_from_ptr(res, Private)) - }) - } - - /// See [`ArrayBase::reshape_unchecked`]. The only difference is that the rank of the returned - /// array is set. - #[julia_version(until = "1.10")] - unsafe fn reshape_ranked_unchecked<'target, D, Tgt, const M: isize>( - &self, - target: Tgt, - dims: D, - ) -> ArrayBaseData<'target, 'data, Tgt, T, M> - where - D: RankedDims, - Tgt: Target<'target>, - { - let _ = D::ASSERT_RANKED; - let _ = <(ArrayDimensions<'_, M>, D) as CompatibleIndices<_, _>>::ASSERT_COMPATIBLE; - - target.with_local_scope::<_, _, 1>(|target, mut frame| { - let arr = self.array(); - let elty_ptr = arr.element_type().unwrap(Private); - let array_type = jl_apply_array_type(elty_ptr, dims.rank()); - let tuple = sized_dim_tuple(&mut frame, &dims); - let arr = jl_reshape_array(array_type, arr.unwrap(Private), tuple.unwrap(Private)); - - target.data_from_ptr(NonNull::new_unchecked(arr), Private) - }) - } } /// Functionality supported by all mutable accessors. diff --git a/jlrs/src/data/managed/array/mod.rs b/jlrs/src/data/managed/array/mod.rs index 35e3e0c..397302b 100644 --- a/jlrs/src/data/managed/array/mod.rs +++ b/jlrs/src/data/managed/array/mod.rs @@ -129,13 +129,19 @@ use jl_sys::{ }; use jlrs_macros::julia_version; +#[julia_version(until = "1.10")] +use self::dimensions::Dims; + +#[julia_version(since = "1.11")] +use std::ptr::null_mut; + use self::{ data::accessor::{ BitsAccessor, BitsAccessorMut, BitsUnionAccessor, BitsUnionAccessorMut, IndeterminateAccessor, IndeterminateAccessorMut, InlineAccessor, InlineAccessorMut, ManagedAccessor, ManagedAccessorMut, ValueAccessor, ValueAccessorMut, }, - dimensions::{ArrayDimensions, Dims, DimsExt, DimsRankAssert, DimsRankCheck, RankedDims}, + dimensions::{ArrayDimensions, DimsExt, DimsRankAssert, DimsRankCheck, RankedDims}, tracked::{TrackedArrayBase, TrackedArrayBaseMut}, }; use super::{ @@ -499,11 +505,24 @@ pub trait ConstructTypedArray { let array_type = Self::array_type(&target, &dims).as_value(); let array = dims.alloc_array_with_data(&target, array_type, data.as_mut_ptr() as _); - jl_gc_add_ptr_finalizer( - get_tls(), - array.ptr().as_ptr().cast(), - droparray:: as *mut c_void, - ); + #[cfg(not(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + )))] + let mem = jlrs_array_mem(array.ptr().as_ptr()); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + ))] + let mem = array.ptr().as_ptr().cast(); + + jl_gc_add_ptr_finalizer(get_tls(), mem, droparray:: as *mut c_void); array }; @@ -541,12 +560,24 @@ pub trait ConstructTypedArray { let array_type = Self::array_type(&target, &dims).as_value(); let array = dims.alloc_array_with_data(&target, array_type, data.as_mut_ptr() as _); - - jl_gc_add_ptr_finalizer( - get_tls(), - array.ptr().as_ptr().cast(), - droparray:: as *mut c_void, - ); + #[cfg(not(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + )))] + let mem = jlrs_array_mem(array.ptr().as_ptr()); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + ))] + let mem = array.ptr().as_ptr().cast(); + + jl_gc_add_ptr_finalizer(get_tls(), mem, droparray:: as *mut c_void); target.data_from_ptr(array.ptr(), Private) } @@ -1171,12 +1202,24 @@ impl ArrayBase<'_, '_, Unknown, N> { let array_type = jl_apply_array_type(ty.unwrap(Private), D::RANK as _); let array_type = Value::wrap_non_null(NonNull::new_unchecked(array_type), Private); let array = dims.alloc_array_with_data(&target, array_type, data.as_mut_ptr() as _); - - jl_gc_add_ptr_finalizer( - get_tls(), - array.ptr().as_ptr().cast(), - droparray:: as *mut c_void, - ); + #[cfg(not(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + )))] + let mem = jlrs_array_mem(array.ptr().as_ptr()); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + ))] + let mem = array.ptr().as_ptr().cast(); + + jl_gc_add_ptr_finalizer(get_tls(), mem, droparray:: as *mut c_void); array }; @@ -1217,12 +1260,24 @@ impl ArrayBase<'_, '_, Unknown, N> { let array_type = jl_apply_array_type(ty.unwrap(Private), D::RANK as _); let array_type = Value::wrap_non_null(NonNull::new_unchecked(array_type), Private); let array = dims.alloc_array_with_data(&target, array_type, data.as_mut_ptr() as _); - - jl_gc_add_ptr_finalizer( - get_tls(), - array.ptr().as_ptr().cast(), - droparray:: as *mut c_void, - ); + #[cfg(not(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + )))] + let mem = jlrs_array_mem(array.ptr().as_ptr()); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10", + ))] + let mem = array.ptr().as_ptr().cast(); + + jl_gc_add_ptr_finalizer(get_tls(), mem, droparray:: as *mut c_void); target.data_from_ptr(array.ptr(), Private) } @@ -3149,6 +3204,7 @@ where // Safety: must be used as a finalizer when moving array data from Rust to Julia // to ensure it's freed correctly. +#[julia_version(until = "1.10")] unsafe extern "C" fn droparray(a: Array) { let sz = a.dimensions().size(); let data_ptr = a.data_ptr().cast::(); @@ -3157,6 +3213,21 @@ unsafe extern "C" fn droparray(a: Array) { std::mem::drop(data); } +#[julia_version(since = "1.11")] +unsafe extern "C" fn droparray(a: *mut c_void) { + #[repr(C)] + struct GenericMemory { + length: usize, + ptr: *mut T, + } + + let a = NonNull::new_unchecked(a as *mut GenericMemory).as_mut(); + let v = Vec::from_raw_parts(a.ptr as *mut T, a.length, a.length); + a.ptr = null_mut(); + a.length = 0; + std::mem::drop(v); +} + // If LTO is not enabled accessing arrays is very slow, so we're going to optimize // the common case a little. #[julia_version(until = "1.10")] @@ -3176,6 +3247,26 @@ const unsafe fn jlrs_array_dims_ptr(a: *mut jl_array_t) -> *mut usize { (a as *mut u8).add(OFFSET) as *mut usize } +#[julia_version(since = "1.11")] +#[inline] +const unsafe fn jlrs_array_mem(a: *mut jl_array_t) -> *mut jl_sys::types::jl_value_t { + #[repr(C)] + struct GenericMemoryRef { + ptr_or_offset: *mut std::ffi::c_void, + mem: *mut std::ffi::c_void, + } + + #[repr(C)] + struct RawArray { + ref_inner: GenericMemoryRef, + } + + NonNull::new_unchecked(a as *mut RawArray) + .as_ref() + .ref_inner + .mem as _ +} + #[julia_version(since = "1.11")] #[inline] const unsafe fn jlrs_array_dims_ptr(a: *mut jl_array_t) -> *mut usize { diff --git a/jlrs/tests/array_tests.rs b/jlrs/tests/array_tests.rs index 4c7d726..b98acef 100644 --- a/jlrs/tests/array_tests.rs +++ b/jlrs/tests/array_tests.rs @@ -9,8 +9,7 @@ fn array_tests() { array_constructor_tests(); array_conversion_tests(); array_fields_and_flags_tests(); - // FIXME - // array_grow_del_tests(); + array_grow_del_tests(); array_inline_data_mut_tests(); array_inline_data_tests(); array_layouts_tests(); @@ -22,14 +21,6 @@ fn array_tests() { array_value_data_mut_tests(); array_value_data_tests(); ranked_array_constructors_tests(); - #[cfg(any( - feature = "julia-1-6", - feature = "julia-1-7", - feature = "julia-1-8", - feature = "julia-1-9", - feature = "julia-1-10" - ))] - reshape_array_tests(); typed_array_constructors_tests(); typed_ranked_array_constructors_tests(); typed_vector_constructors_test(); diff --git a/jlrs/tests/array_tests_impl/array_grow_del.rs b/jlrs/tests/array_tests_impl/array_grow_del.rs index 149ea84..a87db07 100644 --- a/jlrs/tests/array_tests_impl/array_grow_del.rs +++ b/jlrs/tests/array_tests_impl/array_grow_del.rs @@ -1,137 +1,149 @@ -// #[cfg(feature = "local-rt")] -// pub(crate) mod tests { -// use jlrs::{ -// data::managed::array::{data::accessor::AccessorMut1D, TypedVector}, -// prelude::*, -// }; - -// use crate::util::JULIA; - -// fn typed_vector_grow_end() { -// JULIA.with(|j| { -// let mut frame = StackFrame::new(); -// let mut jlrs = j.borrow_mut(); - -// jlrs.instance(&mut frame) -// .scope(|mut frame| { -// unsafe { -// let data = [1.0f32, 2.0]; -// let mut arr = -// TypedVector::::from_slice_cloned(&mut frame, data.as_ref(), 2) -// .unwrap() -// .unwrap(); - -// assert_eq!(arr.length(), 2); -// let success = arr.bits_data_mut().grow_end(&frame, 1); -// assert!(success.is_ok()); -// assert_eq!(arr.length(), 3); - -// let success = arr.bits_data_mut().grow_end(&frame, 5); -// assert!(success.is_ok()); -// assert_eq!(arr.length(), 8); - -// { -// let accessor = arr.bits_data(); -// assert_eq!(accessor.get_uninit(0).unwrap().assume_init(), 1.0); -// assert_eq!(accessor.get_uninit(1).unwrap().assume_init(), 2.0); -// } -// } - -// Ok(()) -// }) -// .unwrap(); -// }); -// } - -// fn typed_vector_grow_end_err() { -// JULIA.with(|j| { -// let mut frame = StackFrame::new(); -// let mut jlrs = j.borrow_mut(); - -// jlrs.instance(&mut frame) -// .scope(|mut frame| { -// unsafe { -// let data = vec![1.0f32, 2.0]; -// let mut arr = TypedVector::::from_vec(&mut frame, data, 2) -// .unwrap() -// .unwrap(); - -// assert_eq!(arr.length(), 2); -// let success = arr.bits_data_mut().grow_end(&frame, 1); -// assert!(success.is_err()); -// assert_eq!(arr.length(), 2); -// } - -// Ok(()) -// }) -// .unwrap(); -// }); -// } - -// fn typed_vector_del_end() { -// JULIA.with(|j| { -// let mut frame = StackFrame::new(); -// let mut jlrs = j.borrow_mut(); - -// jlrs.instance(&mut frame) -// .scope(|mut frame| { -// unsafe { -// let data = [1.0f32, 2.0, 3.0, 4.0]; -// let mut arr = -// TypedVector::::from_slice_cloned(&mut frame, data.as_ref(), 4) -// .unwrap() -// .unwrap(); - -// assert_eq!(arr.length(), 4); -// let success = arr.bits_data_mut().del_end(&frame, 1); -// assert!(success.is_ok()); -// assert_eq!(arr.length(), 3); - -// let success = arr.bits_data_mut().del_end(&frame, 2); -// assert!(success.is_ok()); -// assert_eq!(arr.length(), 1); - -// { -// let accessor = arr.bits_data(); -// assert_eq!(*accessor.get(0).unwrap(), 1.0); -// } -// } - -// Ok(()) -// }) -// .unwrap(); -// }); -// } - -// fn typed_vector_del_end_err() { -// JULIA.with(|j| { -// let mut frame = StackFrame::new(); -// let mut jlrs = j.borrow_mut(); - -// jlrs.instance(&mut frame) -// .scope(|mut frame| { -// unsafe { -// let data = vec![1.0f32, 2.0]; -// let mut arr = TypedVector::::from_vec(&mut frame, data, 2) -// .unwrap() -// .unwrap(); - -// assert_eq!(arr.length(), 2); -// let success = arr.bits_data_mut().del_end(&frame, 1); -// assert!(success.is_err()); -// assert_eq!(arr.length(), 2); -// } - -// Ok(()) -// }) -// .unwrap(); -// }); -// } - -// pub(crate) fn array_grow_del_tests() { -// typed_vector_grow_end(); -// typed_vector_grow_end_err(); -// typed_vector_del_end(); -// typed_vector_del_end_err(); -// } -// } +#[cfg(feature = "local-rt")] +pub(crate) mod tests { + use jlrs::{ + data::managed::array::{data::accessor::AccessorMut1D, TypedVector}, + memory::gc::Gc, + prelude::*, + weak_handle_unchecked, + }; + + use crate::util::JULIA; + + fn typed_vector_grow_end() { + JULIA.with(|j| { + let mut frame = StackFrame::new(); + let mut jlrs = j.borrow_mut(); + + jlrs.instance(&mut frame).scope(|mut frame| unsafe { + let data = [1.0f32, 2.0]; + let mut arr = TypedVector::::from_slice_cloned(&mut frame, data.as_ref(), 2) + .unwrap() + .unwrap(); + + assert_eq!(arr.length(), 2); + let success = arr.bits_data_mut().grow_end(&frame, 1); + assert!(success.is_ok()); + assert_eq!(arr.length(), 3); + + let success = arr.bits_data_mut().grow_end(&frame, 5); + assert!(success.is_ok()); + assert_eq!(arr.length(), 8); + + { + let accessor = arr.bits_data(); + assert_eq!(accessor.get_uninit(0).unwrap().assume_init(), 1.0); + assert_eq!(accessor.get_uninit(1).unwrap().assume_init(), 2.0); + } + }); + }); + } + + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10" + ))] + fn typed_vector_grow_end_err() { + JULIA.with(|j| { + let mut frame = StackFrame::new(); + let mut jlrs = j.borrow_mut(); + + jlrs.instance(&mut frame).scope(|mut frame| unsafe { + let data = vec![1.0f32, 2.0]; + let mut arr = TypedVector::::from_vec(&mut frame, data, 2) + .unwrap() + .unwrap(); + + assert_eq!(arr.length(), 2); + let success = arr.bits_data_mut().grow_end(&frame, 1); + assert!(success.is_err()); + assert_eq!(arr.length(), 2); + }); + }); + } + + fn typed_vector_del_end() { + JULIA.with(|j| { + let mut frame = StackFrame::new(); + let mut jlrs = j.borrow_mut(); + + jlrs.instance(&mut frame).scope(|mut frame| unsafe { + let data = [1.0f32, 2.0, 3.0, 4.0]; + let mut arr = TypedVector::::from_slice_cloned(&mut frame, data.as_ref(), 4) + .unwrap() + .unwrap(); + + assert_eq!(arr.length(), 4); + let success = arr.bits_data_mut().del_end(&frame, 1); + assert!(success.is_ok()); + assert_eq!(arr.length(), 3); + + let success = arr.bits_data_mut().del_end(&frame, 2); + assert!(success.is_ok()); + assert_eq!(arr.length(), 1); + + { + let accessor = arr.bits_data(); + assert_eq!(*accessor.get(0).unwrap(), 1.0); + } + }); + }); + } + + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10" + ))] + fn typed_vector_del_end_err() { + JULIA.with(|j| { + let mut frame = StackFrame::new(); + let mut jlrs = j.borrow_mut(); + + jlrs.instance(&mut frame).scope(|mut frame| unsafe { + let data = vec![1.0f32, 2.0]; + let mut arr = TypedVector::::from_vec(&mut frame, data, 2) + .unwrap() + .unwrap(); + + assert_eq!(arr.length(), 2); + let success = arr.bits_data_mut().del_end(&frame, 1); + assert!(success.is_err()); + assert_eq!(arr.length(), 2); + }); + }); + } + + pub(crate) fn array_grow_del_tests() { + typed_vector_grow_end(); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10" + ))] + typed_vector_grow_end_err(); + + typed_vector_del_end(); + #[cfg(any( + feature = "julia-1-6", + feature = "julia-1-7", + feature = "julia-1-8", + feature = "julia-1-9", + feature = "julia-1-10" + ))] + typed_vector_del_end_err(); + + unsafe { + let handle = weak_handle_unchecked!(); + handle.gc_collect(jl_sys::jl_gc_collection_t::Full); + handle.gc_collect(jl_sys::jl_gc_collection_t::Full); + handle.gc_collect(jl_sys::jl_gc_collection_t::Full); + } + } +} diff --git a/jlrs/tests/array_tests_impl/mod.rs b/jlrs/tests/array_tests_impl/mod.rs index 127b715..041db56 100644 --- a/jlrs/tests/array_tests_impl/mod.rs +++ b/jlrs/tests/array_tests_impl/mod.rs @@ -25,20 +25,11 @@ pub(crate) use array_value_data::tests::*; pub(crate) mod array_constructors; pub(crate) use array_constructors::tests::*; pub(crate) mod array_grow_del; -// pub(crate) use array_grow_del::tests::*; +pub(crate) use array_grow_del::tests::*; pub(crate) mod array_layouts; pub(crate) use array_layouts::tests::*; pub(crate) mod array_union_data; pub(crate) use array_union_data::tests::*; -pub(crate) mod reshape_array; -#[cfg(any( - feature = "julia-1-6", - feature = "julia-1-7", - feature = "julia-1-8", - feature = "julia-1-9", - feature = "julia-1-10" -))] -pub(crate) use reshape_array::tests::*; pub(crate) mod ranked_array_constructors; pub(crate) use ranked_array_constructors::tests::*; mod typed_array_constructors; diff --git a/jlrs/tests/array_tests_impl/reshape_array.rs b/jlrs/tests/array_tests_impl/reshape_array.rs deleted file mode 100644 index 6fc40e0..0000000 --- a/jlrs/tests/array_tests_impl/reshape_array.rs +++ /dev/null @@ -1,40 +0,0 @@ -#[cfg(any( - feature = "julia-1-6", - feature = "julia-1-7", - feature = "julia-1-8", - feature = "julia-1-9", - feature = "julia-1-10" -))] -#[cfg(feature = "local-rt")] -pub(crate) mod tests { - use jlrs::{ - data::managed::array::{data::accessor::Accessor, TypedArray}, - prelude::*, - }; - - use crate::util::JULIA; - - fn array_can_be_reshaped() { - JULIA.with(|j| { - let mut frame = StackFrame::new(); - let mut jlrs = j.borrow_mut(); - - jlrs.instance(&mut frame) - .returning::>() - .scope(|mut frame| unsafe { - let arr_val = TypedArray::::new(&mut frame, (1, 2)).unwrap(); - arr_val - .indeterminate_data() - .reshape_ranked::<_, _, 3>(&mut frame, (1, 1, 2)) - .unwrap() - .unwrap(); - Ok(()) - }) - .unwrap(); - }); - } - - pub(crate) fn reshape_array_tests() { - array_can_be_reshaped(); - } -}