use super::*;
#[test]
fn ifds_vyre_resident_repeated_zero_prefix_zero_repeated_repeat_0() {
let b = backend();
let a = adapter(&b);
a.dispatch_resident_repeated_sequence_read_ranges_into(&[], &[], 0, &[], &mut [])
.unwrap();
assert_eq!(b.dispatch_count(), 0);
}
#[test]
fn ifds_vyre_resident_repeated_one_prefix_zero_repeated_repeat_0() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
a.dispatch_resident_repeated_sequence_read_ranges_into(
&[(&p, &[r], None)],
&[],
0,
&[],
&mut [],
)
.unwrap();
assert_eq!(b.dispatch_count(), 1);
}
#[test]
fn ifds_vyre_resident_repeated_zero_prefix_one_repeated_repeat_1() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
a.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r], None)],
1,
&[],
&mut [],
)
.unwrap();
assert_eq!(b.dispatch_count(), 1);
}
#[test]
fn ifds_vyre_resident_repeated_zero_prefix_one_repeated_repeat_3() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
a.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r], None)],
3,
&[],
&mut [],
)
.unwrap();
assert_eq!(b.dispatch_count(), 3);
}
#[test]
fn ifds_vyre_resident_repeated_one_prefix_one_repeated_repeat_2() {
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()], Some([2, 1, 1]))],
&[(&p, &[r.clone()], Some([4, 1, 1]))],
2,
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap();
assert_eq!(b.dispatch_count(), 3);
let d = b.take_dispatches();
assert_eq!(d[0].grid_override, Some([2, 1, 1]));
assert_eq!(d[1].grid_override, Some([4, 1, 1]));
assert_eq!(d[2].grid_override, Some([4, 1, 1]));
}
#[test]
fn ifds_vyre_resident_repeated_err_in_prefix() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
b.inject_next_dispatch(InjectedFailure::DispatchFailed {
code: None,
message: "prefix fail".into(),
});
let mut out = Vec::new();
let err = a
.dispatch_resident_repeated_sequence_read_ranges_into(
&[(&p, &[r.clone()], None)],
&[],
0,
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap_err();
assert!(err.contains("prefix fail"));
}
#[test]
fn ifds_vyre_resident_repeated_err_in_repeated() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
b.inject_next_dispatch(InjectedFailure::DispatchFailed {
code: None,
message: "repeat fail".into(),
});
let mut out = Vec::new();
let err = a
.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r.clone()], None)],
1,
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap_err();
assert!(err.contains("repeat fail"));
}
#[test]
fn ifds_vyre_resident_repeated_err_in_readback() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
b.inject_next_download(InjectedFailure::UnsupportedFeature {
name: "ranges".into(),
});
let mut out = Vec::new();
let err = a
.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r.clone()], None)],
1,
&[(&r, 0, 8)],
&mut [&mut out],
)
.unwrap_err();
assert!(err.contains("ranges"));
}
#[test]
fn ifds_vyre_resident_repeated_repeat_0_skips_repeated() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let p = program();
a.dispatch_resident_repeated_sequence_read_ranges_into(
&[],
&[(&p, &[r], None)],
0,
&[],
&mut [],
)
.unwrap();
assert_eq!(b.dispatch_count(), 0);
}