diff --git a/satrs/src/ccsds/scheduler.rs b/satrs/src/ccsds/scheduler.rs index 664d1d5..b15ea81 100644 --- a/satrs/src/ccsds/scheduler.rs +++ b/satrs/src/ccsds/scheduler.rs @@ -303,7 +303,7 @@ pub mod alloc_mod { /// /// The range includes the start time but excludes the end time. Returns whether any /// telecommands were deleted. - pub fn delete_in_time_window(&mut self, start_time: UnixTime, end_time: UnixTime) -> bool { + pub fn delete_time_window(&mut self, start_time: UnixTime, end_time: UnixTime) -> bool { let len_before = self.tc_map.len(); self.tc_map.retain(|k, _| k < &start_time || k >= &end_time); self.tc_map.len() < len_before @@ -312,7 +312,7 @@ pub mod alloc_mod { /// Delete all scheduled telecommands scheduled after or at a given time. /// /// Returns whether any telecommands were deleted. - pub fn delete_all_starting_at(&mut self, start_time: UnixTime) -> bool { + pub fn delete_starting_at(&mut self, start_time: UnixTime) -> bool { let len_before = self.tc_map.len(); self.tc_map.retain(|k, _| k < &start_time); self.tc_map.len() < len_before @@ -321,7 +321,7 @@ pub mod alloc_mod { /// Delete all scheduled telecommands scheduled before but not equal to a given time. /// /// Returns whether any telecommands were deleted. - pub fn delete_all_before(&mut self, end_time: UnixTime) -> bool { + pub fn delete_before(&mut self, end_time: UnixTime) -> bool { let len_before = self.tc_map.len(); self.tc_map.retain(|k, _| k >= &end_time); self.tc_map.len() < len_before @@ -783,7 +783,7 @@ mod tests { scheduler .insert_telecommand_with_reader(&reader_2, UnixTime::new(7, 0)) .unwrap(); - let deleted = scheduler.delete_in_time_window(UnixTime::new(3, 0), UnixTime::new(6, 0)); + let deleted = scheduler.delete_time_window(UnixTime::new(3, 0), UnixTime::new(6, 0)); assert!(deleted); assert_eq!(scheduler.current_fill_count().packets, 2); assert_eq!( @@ -834,7 +834,7 @@ mod tests { .insert_telecommand_with_reader(&reader_2, UnixTime::new(7, 0)) .unwrap(); // This only deletes the first 2 TCs. - let deleted = scheduler.delete_in_time_window(UnixTime::new(2, 0), UnixTime::new(7, 0)); + let deleted = scheduler.delete_time_window(UnixTime::new(2, 0), UnixTime::new(7, 0)); assert!(deleted); assert_eq!(scheduler.current_fill_count().packets, 1); assert_eq!(scheduler.current_fill_count().bytes, test_tc_2_raw.len()); @@ -846,11 +846,81 @@ mod tests { #[test] fn test_deletion_from_start() { - //TODO + let unix_time = UnixTime::new(0, 0); + let mut scheduler = CcsdsScheduler::new( + unix_time, + Limits::new(Some(100), Some(1024)), + Duration::from_millis(1000), + ); + let test_tc_0 = test_tc(&[42], u14::ZERO); + let test_tc_1 = test_tc(&[1, 2, 3], u14::new(1)); + let test_tc_2 = test_tc(&[1, 2, 3], u14::new(2)); + let test_tc_0_raw = test_tc_0.to_vec(); + let test_tc_1_raw = test_tc_1.to_vec(); + let test_tc_2_raw = test_tc_2.to_vec(); + let reader_0 = + CcsdsPacketReader::new(&test_tc_0_raw, Some(ChecksumType::WithCrc16)).unwrap(); + let reader_1 = + CcsdsPacketReader::new(&test_tc_1_raw, Some(ChecksumType::WithCrc16)).unwrap(); + let reader_2 = + CcsdsPacketReader::new(&test_tc_2_raw, Some(ChecksumType::WithCrc16)).unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_0, UnixTime::new(2, 0)) + .unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_1, UnixTime::new(5, 0)) + .unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_2, UnixTime::new(7, 0)) + .unwrap(); + // This only deletes the first 2 TCs. + let deleted = scheduler.delete_starting_at(UnixTime::new(5, 0)); + assert!(deleted); + assert_eq!(scheduler.current_fill_count().packets, 1); + assert_eq!(scheduler.current_fill_count().bytes, test_tc_0_raw.len()); + scheduler.update_time(UnixTime::new(10, 0)); + scheduler.release_telecommands(|_id, packet| { + assert_eq!(packet, test_tc_0_raw); + }); } #[test] fn test_deletion_until_end() { - //TODO + let unix_time = UnixTime::new(0, 0); + let mut scheduler = CcsdsScheduler::new( + unix_time, + Limits::new(Some(100), Some(1024)), + Duration::from_millis(1000), + ); + let test_tc_0 = test_tc(&[42], u14::ZERO); + let test_tc_1 = test_tc(&[1, 2, 3], u14::new(1)); + let test_tc_2 = test_tc(&[1, 2, 3], u14::new(2)); + let test_tc_0_raw = test_tc_0.to_vec(); + let test_tc_1_raw = test_tc_1.to_vec(); + let test_tc_2_raw = test_tc_2.to_vec(); + let reader_0 = + CcsdsPacketReader::new(&test_tc_0_raw, Some(ChecksumType::WithCrc16)).unwrap(); + let reader_1 = + CcsdsPacketReader::new(&test_tc_1_raw, Some(ChecksumType::WithCrc16)).unwrap(); + let reader_2 = + CcsdsPacketReader::new(&test_tc_2_raw, Some(ChecksumType::WithCrc16)).unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_0, UnixTime::new(2, 0)) + .unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_1, UnixTime::new(5, 0)) + .unwrap(); + scheduler + .insert_telecommand_with_reader(&reader_2, UnixTime::new(7, 0)) + .unwrap(); + // This only deletes the first 2 TCs. + let deleted = scheduler.delete_before(UnixTime::new(7, 0)); + assert!(deleted); + assert_eq!(scheduler.current_fill_count().packets, 1); + assert_eq!(scheduler.current_fill_count().bytes, test_tc_2_raw.len()); + scheduler.update_time(UnixTime::new(10, 0)); + scheduler.release_telecommands(|_id, packet| { + assert_eq!(packet, test_tc_2_raw); + }); } }