X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=test%2Flogger_test.rs;h=18b0fbb9921854a4ce876a9f5da0abe4631de32e;hb=HEAD;hp=a254f505db960e7c35959de6a215185503d69aef;hpb=c42a04101a5635fb7557ebdf7b5c7f2dbcb12b54;p=gps-watch.git diff --git a/test/logger_test.rs b/test/logger_test.rs index a254f50..18b0fbb 100644 --- a/test/logger_test.rs +++ b/test/logger_test.rs @@ -514,3 +514,100 @@ fn list_recording1_multi_sector() { assert_eq!(String::from_utf8(expected_bytes.to_vec()).unwrap(), String::from_utf8(listing_raw[0..num_bytes_read].to_vec()).unwrap()); } + +// 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); +}