+
+// Verifies that Logger::remove_recording() reports an error if there is no
+// recording with the given ID.
+#[test]
+fn remove_recording0() {
+ let mut fake_storage = FakeStorage::new();
+
+ let mut logger = Logger::new(&mut fake_storage);
+ logger.init();
+
+ let result = logger.remove_recording(42);
+ assert_eq!(LoggerError::NoSuchRecording, result.unwrap_err());
+}
+
+// Verifies that Logger::remove_recording() clears consecutive sectors
+// belonging to the recording identified by the given ID.
+#[test]
+fn remove_recording1() {
+ let mut fake_storage = FakeStorage::new();
+
+ // Mark first sector as in use.
+ let header0 = [
+ 0x01, 0x00, 0x01, 0x00,
+ 0xa2, 0xdb, 0x14, 0x5e,
+ ];
+
+ // Mark second sector as in use by the same recording.
+ let header1 = [
+ 0x03, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ ];
+
+ // Mark third sector as in use by another recording.
+ let header2 = [
+ 0x01, 0x00, 0x02, 0x00,
+ 0xa2, 0xdb, 0x14, 0x5f,
+ ];
+
+ fake_storage.actual[0..header0.len()].copy_from_slice(&header0);
+ fake_storage.actual[4096..4096 + header1.len()].copy_from_slice(&header1);
+ fake_storage.actual[8192..8192 + header2.len()].copy_from_slice(&header2);
+
+ let mut logger = Logger::new(&mut fake_storage);
+ logger.init();
+
+ assert!(logger.remove_recording(1).is_ok());
+
+ let cleared = [
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ ];
+
+ fake_storage.expected[0..cleared.len()].copy_from_slice(&cleared);
+ fake_storage.expected[4096..4096 + header1.len()].copy_from_slice(&cleared);
+ fake_storage.expected[8192..8192 + header2.len()].copy_from_slice(&header2);
+
+ assert_eq!(fake_storage.expected, fake_storage.actual);
+}
+
+#[test]
+fn pace0() {
+ let mut fake_storage = FakeStorage::new();
+
+ let mut logger = Logger::new(&mut fake_storage);
+ logger.init();
+
+ let lat_lon = [
+ (49.372117, 8.820219),
+ (49.372229, 8.821636),
+ ];
+
+ let template = gps::TimeAndPos {
+ system_time: 0,
+ unix_time: 0,
+ latitude_deg: 0,
+ longitude_deg: 0,
+ latitude_rad: Fixed::from_f32(0.0),
+ longitude_rad: Fixed::from_f32(0.0),
+ };
+
+ let mut taps = [template; 11];
+
+ for i in 0..taps.len() {
+ taps[i].system_time = (i as u32) * 100;
+ taps[i].unix_time = i as u32;
+ taps[i].latitude_rad = Fixed::from_f32(lat_lon[i % lat_lon.len()].0).to_radians();
+ taps[i].longitude_rad = Fixed::from_f32(lat_lon[i % lat_lon.len()].1).to_radians();
+ }
+
+ logger.start_recording(&taps[0]);
+
+ for i in 0..(taps.len() - 1) {
+ logger.log(&taps[i], &taps[i + 1]);
+ }
+
+ assert_eq!(logger.pace_s, 10);
+}