#[cfg(test)]
mod tests {
use crate::scheduler::*;
#[test]
fn test_cov_dynamic_request_no_hard_deadline_not_expired() {
let mut request = DynamicRequest::new(0, vec![1], 10);
request.deadline = Some(Deadline::with_target(0));
std::thread::sleep(std::time::Duration::from_millis(1));
assert!(!request.is_expired());
}
#[test]
fn test_cov_batch_scheduler_record_ubatch_stats() {
let mut scheduler = BatchScheduler::new();
scheduler.add_sequence(0, 1, vec![10, 20, 30]);
let _ = scheduler.create_ubatch();
let seq_idx = scheduler.add_sequence(1, 2, vec![40, 50]).expect("add 2");
scheduler.start_decode(seq_idx, 2);
let _ = scheduler.create_ubatch();
let stats = scheduler.stats();
assert!(stats.ubatches_created >= 2);
assert!(stats.avg_ubatch_size > 0.0);
}
#[test]
fn test_cov_priority_serialization() {
let priorities = [
Priority::Low,
Priority::Normal,
Priority::High,
Priority::Critical,
];
for p in &priorities {
let json = serde_json::to_string(p).expect("serialize");
let parsed: Priority = serde_json::from_str(&json).expect("deserialize");
assert_eq!(*p, parsed);
}
}
#[test]
fn test_cov_sequence_state_serialization() {
let states = [
SequenceState::Waiting,
SequenceState::Running,
SequenceState::Preempted,
SequenceState::Completed,
SequenceState::Failed,
];
for s in &states {
let json = serde_json::to_string(s).expect("serialize");
let parsed: SequenceState = serde_json::from_str(&json).expect("deserialize");
assert_eq!(*s, parsed);
}
}
include!("tests_priority_ordering_default.rs");
include!("tests_slot_manager_batch.rs");
include!("tests_dynamic_scheduler.rs");
include!("tests_chunked_prefill.rs");
include!("tests_deep_scov.rs");
include!("tests_cov_batch.rs");
}