Fix: end_slot
returns incorrect value (#2138)
## Issue Addressed `Epoch::end_slot()` returns incorrect value when the epoch is the last epoch which can be represented by u64. ```rust let slots_per_epoch = 32; // The last epoch which can be represented by u64. let epoch = Epoch::new(u64::max_value() / slots_per_epoch); println!("{}", epoch.end_slot(slots_per_epoch)); // Slot(18446744073709551614) // -> correctly, the result should be `Slot(18446744073709551615)`. ```
This commit is contained in:
parent
a8d040c821
commit
3d07934ca0
@ -71,9 +71,8 @@ impl Epoch {
|
||||
pub fn end_slot(self, slots_per_epoch: u64) -> Slot {
|
||||
Slot::from(
|
||||
self.0
|
||||
.saturating_add(1)
|
||||
.saturating_mul(slots_per_epoch)
|
||||
.saturating_sub(1),
|
||||
.saturating_add(slots_per_epoch.saturating_sub(1)),
|
||||
)
|
||||
}
|
||||
|
||||
@ -144,6 +143,17 @@ mod epoch_tests {
|
||||
assert_eq!(epoch.end_slot(slots_per_epoch), Slot::new(7));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn end_slot_boundary_test() {
|
||||
let slots_per_epoch = 32;
|
||||
|
||||
// The last epoch which can be represented by u64.
|
||||
let epoch = Epoch::new(u64::max_value() / slots_per_epoch);
|
||||
|
||||
// A slot number on the epoch should be equal to u64::max_value.
|
||||
assert_eq!(epoch.end_slot(slots_per_epoch), Slot::new(u64::max_value()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position() {
|
||||
let slots_per_epoch = 8;
|
||||
|
Loading…
Reference in New Issue
Block a user