use libperl_rs::Perl;
use libperl_sys as sys;
#[test]
fn multiplicity_layer() {
let mut perl = Perl::new();
let empty: &[&str] = &[];
let rc = perl.parse(&["", "-e", "1"], empty);
assert_eq!(rc, 0, "perl_parse failed");
let my_perl = perl.as_ptr();
let sp_read = sys::PL_stack_sp!(my_perl);
let sp_via_ptr = unsafe { *sys::PL_stack_sp_ptr!(my_perl) };
assert_eq!(
sp_read, sp_via_ptr,
"PL_stack_sp_ptr! disagrees with PL_stack_sp!"
);
let p = sys::PL_savebegin_ptr!(my_perl);
let old = unsafe { *p };
unsafe { *p = !old };
assert_eq!(
sys::PL_savebegin!(my_perl),
!old,
"write through PL_savebegin_ptr! not visible to PL_savebegin!"
);
unsafe { *p = old };
unsafe {
let sv = sys::thx::Perl_newSViv(my_perl, 42);
assert!(!sv.is_null(), "thx::Perl_newSViv returned null");
assert_eq!(sys::thx::Perl_sv_2iv(my_perl, sv), 42);
let av = sys::thx::Perl_newAV(my_perl);
assert_eq!(
sys::thx::SvTYPE(my_perl, av as *mut sys::SV),
sys::svtype::SVt_PVAV,
"thx::SvTYPE misreported a fresh AV"
);
sys::thx::Perl_SvREFCNT_dec(my_perl, sv);
sys::thx::Perl_SvREFCNT_dec(my_perl, av as *mut sys::SV);
}
}