Skip to content

Commit 6debefc

Browse files
committed
Add timestamp tests
1 parent 238c22c commit 6debefc

File tree

1 file changed

+53
-5
lines changed

1 file changed

+53
-5
lines changed

src/filesystem/timestamp.rs

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,13 @@ impl Timestamp {
4747
}
4848
}
4949

50-
// TODO add tests for the method
5150
/// Serialize a `Timestamp` to FAT format
5251
pub fn serialize_to_fat(self) -> [u8; 4] {
5352
let mut data = [0u8; 4];
5453

55-
let hours = (u16::from(self.hours) << 11) & 0xF800;
56-
let minutes = (u16::from(self.minutes) << 5) & 0x07E0;
57-
let seconds = (u16::from(self.seconds / 2)) & 0x001F;
54+
let hours = (u16::from(self.hours) << 11) & (0x1F << 11);
55+
let minutes = (u16::from(self.minutes) << 5) & (0x3F << 5);
56+
let seconds = (u16::from(self.seconds / 2)) & 0x1F;
5857
data[..2].copy_from_slice(&(hours | minutes | seconds).to_le_bytes()[..]);
5958

6059
let year = if self.year_since_1970 < 10 {
@@ -81,7 +80,7 @@ impl Timestamp {
8180
seconds: u8,
8281
) -> Result<Timestamp, &'static str> {
8382
Ok(Timestamp {
84-
year_since_1970: if (1970..=(1970 + 255)).contains(&year) {
83+
year_since_1970: if (1970..=2097).contains(&year) {
8584
(year - 1970) as u8
8685
} else {
8786
return Err("Bad year");
@@ -136,6 +135,55 @@ impl core::fmt::Display for Timestamp {
136135
}
137136
}
138137

138+
#[cfg(test)]
139+
mod tests {
140+
use super::*;
141+
142+
#[test]
143+
fn date_encode1() {
144+
// 2018-12-09T19:22:00
145+
let ts = Timestamp::from_calendar(2018, 12, 9, 19, 21, 38).unwrap();
146+
147+
let bytes = ts.serialize_to_fat();
148+
149+
// values taken from disk.img test image
150+
assert_eq!(bytes, [0xb3, 0x9a, 0x89, 0x4d], "{:02x?} is wrong", &bytes);
151+
}
152+
153+
#[test]
154+
fn date_decode1() {
155+
// 2018-12-09T19:22:00
156+
let ts = Timestamp::from_calendar(2018, 12, 9, 19, 21, 38).unwrap();
157+
158+
// values taken from disk.img test image
159+
let actual_ts = Timestamp::from_fat(0x4d89, 0x9ab3);
160+
161+
assert_eq!(ts, actual_ts);
162+
}
163+
164+
#[test]
165+
fn date_encode2() {
166+
// 2024-10-25T16:31:14
167+
let ts = Timestamp::from_calendar(2024, 10, 25, 16, 31, 14).unwrap();
168+
169+
let bytes = ts.serialize_to_fat();
170+
171+
// values taken from disk.img test image
172+
assert_eq!(bytes, [0xe7, 0x83, 0x59, 0x59], "{:02x?} is wrong", &bytes);
173+
}
174+
175+
#[test]
176+
fn date_decode2() {
177+
// 2024-10-25T16:31:14
178+
let ts = Timestamp::from_calendar(2024, 10, 25, 16, 31, 14).unwrap();
179+
180+
// values taken from disk.img test image
181+
let actual_ts = Timestamp::from_fat(0x5959, 0x83e7);
182+
assert_eq!(ts, actual_ts);
183+
}
184+
//
185+
}
186+
139187
// ****************************************************************************
140188
//
141189
// End Of File

0 commit comments

Comments
 (0)