Skip to content

Commit

Permalink
Reorganize and rename module tests (#138)
Browse files Browse the repository at this point in the history
  • Loading branch information
Taaitaaiger authored Jul 10, 2024
1 parent 4c1d991 commit a9ea6ee
Show file tree
Hide file tree
Showing 15 changed files with 650 additions and 507 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

- Fix several bugs related to how type parameters are handled in code generated by `julia_module!`.

- `TypedValue::as_typed_ranked_array` and `TypedValue::as_typed_array` have been added, these methods convert a type value with an array type constructor to the corresponding `Typed(Ranked)Array` type.

#### v0.20

- Add support for Julia 1.11. Bump MSRV to 1.77.
Expand Down
27 changes: 26 additions & 1 deletion jlrs/src/data/managed/value/typed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,18 @@ use crate::{
data::{
layout::valid_layout::{ValidField, ValidLayout},
managed::{datatype::DataType, private::ManagedPriv, Managed, Ref},
types::{abstract_type::AnyType, construct_type::ConstructType, typecheck::Typecheck},
types::{
abstract_type::AnyType,
construct_type::{ArrayTypeConstructor, ConstantIsize, ConstructType},
typecheck::Typecheck,
},
},
error::{JlrsResult, TypeError},
memory::{
scope::LocalScope,
target::{Target, TargetResult},
},
prelude::{TypedArray, TypedRankedArray},
private::Private,
};

Expand Down Expand Up @@ -180,6 +185,26 @@ impl<'scope, 'data, U: ConstructType> TypedValue<'scope, 'data, U> {
}
}

impl<'scope, 'data, T: ConstructType, const N: isize>
TypedValue<'scope, 'data, ArrayTypeConstructor<T, ConstantIsize<N>>>
{
/// Convert `self` to the equivalent `TypedRankedArray` type.
#[inline]
pub fn as_typed_ranked_array(self) -> TypedRankedArray<'scope, 'data, T, N> {
unsafe { std::mem::transmute(self) }
}
}

impl<'scope, 'data, T: ConstructType, N: ConstructType>
TypedValue<'scope, 'data, ArrayTypeConstructor<T, N>>
{
/// Convert `self` to the equivalent `TypedArray` type.
#[inline]
pub fn as_typed_array(self) -> TypedArray<'scope, 'data, T> {
unsafe { std::mem::transmute(self) }
}
}

impl<U: ConstructType + ValidLayout + Send> TypedValueUnbound<U> {
/// Track `self` immutably.
///
Expand Down
10 changes: 10 additions & 0 deletions jlrs/src/data/types/construct_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1120,6 +1120,11 @@ unsafe impl<T: ConstructType, N: ConstructType> ConstructType for ArrayTypeConst
target.with_local_scope::<_, _, 3>(|target, mut frame| {
let ty_param = T::construct_type(&mut frame);
let rank_param = N::construct_type(&mut frame);
if rank_param.is::<isize>() {
if rank_param.unbox_unchecked::<isize>() < 0 {
panic!("ArrayTypeConstructor rank must be a TypeVar or non-negative ConstantIsize, got {rank_param:?}")
}
}
let params = [ty_param, rank_param];
Self::base_type(&frame)
.unwrap_unchecked()
Expand Down Expand Up @@ -1150,6 +1155,11 @@ unsafe impl<T: ConstructType, N: ConstructType> ConstructType for ArrayTypeConst
target.with_local_scope::<_, _, 3>(|target, mut frame| {
let ty_param = T::construct_type_with_env(&mut frame, env);
let rank_param = N::construct_type_with_env(&mut frame, env);
if rank_param.is::<isize>() {
if rank_param.unbox_unchecked::<isize>() < 0 {
panic!("ArrayTypeConstructor rank must be a TypeVar or non-negative ConstantIsize, got {rank_param:?}")
}
}
let params = [ty_param, rank_param];
Self::base_type(&frame)
.unwrap_unchecked()
Expand Down
10 changes: 6 additions & 4 deletions jlrs/src/data/types/foreign_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,8 @@ macro_rules! impl_type_parameters {
where
Tgt: $crate::memory::target::Target<'target>,
{
$crate::data::managed::simple_vector::SimpleVector::emptysvec(&target).root(target)
let svec = $crate::data::managed::simple_vector::SimpleVector::emptysvec(&target);
<$crate::data::managed::simple_vector::SimpleVector as $crate::data::managed::Managed>::root(svec, target)
}
};
($($t:tt)+) => {
Expand All @@ -582,7 +583,7 @@ macro_rules! impl_type_parameters {
$crate::expand_type_bound!(0, &mut frame, svec_ref, $($t)+);
}

svec.root(target)
<$crate::data::managed::simple_vector::SimpleVector as $crate::data::managed::Managed>::root(svec, target)
})
}
};
Expand All @@ -598,7 +599,8 @@ macro_rules! impl_variant_parameters {
where
Tgt: $crate::memory::target::Target<'target>,
{
$crate::data::managed::simple_vector::SimpleVector::emptysvec(&target).root(target)
let svec = $crate::data::managed::simple_vector::SimpleVector::emptysvec(&target);
<$crate::data::managed::simple_vector::SimpleVector as $crate::data::managed::Managed>::root(svec, target)
}
};
($($t:tt)+) => {
Expand All @@ -619,7 +621,7 @@ macro_rules! impl_variant_parameters {
$crate::expand_type_bound!(0, &mut frame, svec_ref, $($t)+);
}

svec.root(target)
<$crate::data::managed::simple_vector::SimpleVector as $crate::data::managed::Managed>::root(svec, target)
})
}
};
Expand Down
44 changes: 22 additions & 22 deletions julia_module_test/JuliaModuleBenches.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,51 @@ const opaque_int = JuliaModuleTest.OpaqueInt(Int32(-1));
const arr = Int[1, 2, 3, 4];

function runbenches()
println("Benchmark freestanding_func_trivial")
println("Benchmark takes_no_args_returns_nothing")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_trivial() gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_no_args_returns_nothing() gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_noargs")
println("Benchmark takes_no_args_returns_usize")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_noargs() gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_no_args_returns_usize() gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_bitsarg")
println("Benchmark takes_usize_returns_usize")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_bitsarg(UInt(3)) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_usize_returns_usize(UInt(3)) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ref_bitsarg")
println("Benchmark takes_ref_usize")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ref_bitsarg(UInt(3)) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_ref_usize(UInt(3)) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ref_mutarg")
println("Benchmark takes_ref_module")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ref_mutarg(Main) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_ref_module(Main) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ref_any")
println("Benchmark takes_ref_any")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ref_any(Main) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_ref_any(Main) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ref_abstract")
println("Benchmark takes_ref_number")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ref_abstract(1) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_ref_number(1) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_arrayarg")
println("Benchmark takes_array")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_arrayarg(Vector{UInt32}()) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_array(Vector{UInt32}()) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

Expand All @@ -61,21 +61,21 @@ function runbenches()
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_typevaluearg")
println("Benchmark takes_typed_value")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_typevaluearg(UInt(3)) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.takes_typed_value(UInt(3)) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ret_array")
println("Benchmark returns_array")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ret_array(Int32) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.returns_array(Int32) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

println("Benchmark freestanding_func_ret_rust_result")
println("Benchmark returns_jlrs_result")
scrubgc()
b = @benchmark JuliaModuleTest.freestanding_func_ret_rust_result(false) gctrial = false gcsample = false
b = @benchmark JuliaModuleTest.returns_jlrs_result(false) gctrial = false gcsample = false
show(stdout, MIME"text/plain"(), b)
print("\n\n")

Expand Down
Loading

0 comments on commit a9ea6ee

Please sign in to comment.