Skip to content

Commit ce130cc

Browse files
committed
Add tests for wraparound
1 parent eec4dbb commit ce130cc

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

crates/core/src/sync/checksum.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ impl<'de> Deserialize<'de> for Checksum {
164164

165165
#[cfg(test)]
166166
mod test {
167+
use num_traits::Zero;
168+
167169
use super::Checksum;
168170

169171
#[test]
@@ -187,4 +189,26 @@ mod test {
187189
assert_eq!(deserialize("3573495687.0").value(), 3573495687);
188190
assert_eq!(deserialize("-721471609.0").value(), 3573495687);
189191
}
192+
193+
#[test]
194+
pub fn test_arithmetic() {
195+
assert_eq!(Checksum::from(3) + Checksum::from(7), Checksum::from(10));
196+
197+
// Checksums should always wrap around
198+
assert_eq!(
199+
Checksum::from(0xFFFFFFFF) + Checksum::from(1),
200+
Checksum::zero()
201+
);
202+
assert_eq!(
203+
Checksum::zero() - Checksum::from(1),
204+
Checksum::from(0xFFFFFFFF)
205+
);
206+
207+
let mut cs = Checksum::from(0x8FFFFFFF);
208+
cs += Checksum::from(0x80000000);
209+
assert_eq!(cs, Checksum::from(0x0FFFFFFF));
210+
211+
cs -= Checksum::from(0x80000001);
212+
assert_eq!(cs, Checksum::from(0x8FFFFFFE));
213+
}
190214
}

0 commit comments

Comments
 (0)