use super::*;
#[test]
fn ifds_vyre_resident_lifecycle_full_cycle_single() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
a.upload_resident(&r, &[1u8; 32]).unwrap();
a.dispatch_resident(&program(), &[r.clone()], None).unwrap();
let _ = a.download_resident(&r).unwrap();
a.free_resident(r).unwrap();
assert_eq!(b.alloc_count(), 1);
assert_eq!(b.upload_count(), 1);
assert_eq!(b.dispatch_count(), 1);
assert_eq!(b.free_count(), 1);
assert!(b.alive_resources().is_empty());
}
#[test]
fn ifds_vyre_resident_lifecycle_full_cycle_three_resources() {
let b = backend();
let a = adapter(&b);
let r1 = a.allocate_resident(64).unwrap();
let r2 = a.allocate_resident(64).unwrap();
let r3 = a.allocate_resident(64).unwrap();
a.upload_resident_many(&[(&r1, &[1u8; 8]), (&r2, &[2u8; 8]), (&r3, &[3u8; 8])])
.unwrap();
a.dispatch_resident(&program(), &[r1.clone(), r2.clone(), r3.clone()], None)
.unwrap();
let mut o1 = Vec::new();
let mut o2 = Vec::new();
let mut o3 = Vec::new();
a.download_resident_ranges_into(
&[(&r1, 0, 8), (&r2, 0, 8), (&r3, 0, 8)],
&mut [&mut o1, &mut o2, &mut o3],
)
.unwrap();
a.free_resident(r1).unwrap();
a.free_resident(r2).unwrap();
a.free_resident(r3).unwrap();
assert_eq!(b.alloc_count(), 3);
assert_eq!(b.upload_count(), 3);
assert_eq!(b.dispatch_count(), 1);
assert_eq!(b.free_count(), 3);
assert!(b.alive_resources().is_empty());
}
#[test]
fn ifds_vyre_resident_lifecycle_sequence_no_leak() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
let mut out = Vec::new();
a.dispatch_resident_sequence_read_ranges_into(
&[(&p, &[r.clone()], None)],
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap();
a.free_resident(r).unwrap();
assert!(b.alive_resources().is_empty());
}
#[test]
fn ifds_vyre_resident_lifecycle_repeated_no_leak() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
let mut out = Vec::new();
a.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r.clone()], None)],
2,
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap();
a.free_resident(r).unwrap();
assert!(b.alive_resources().is_empty());
}
#[test]
fn ifds_vyre_resident_lifecycle_alloc_upload_free_counts() {
let b = backend();
let a = adapter(&b);
let r1 = a.allocate_resident(16).unwrap();
let r2 = a.allocate_resident(32).unwrap();
a.upload_resident(&r1, &[1u8; 8]).unwrap();
a.upload_resident(&r2, &[2u8; 16]).unwrap();
a.free_resident(r1).unwrap();
a.free_resident(r2).unwrap();
assert_eq!(b.alloc_count(), 2);
assert_eq!(b.upload_count(), 2);
assert_eq!(b.free_count(), 2);
}