Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
nightly fmt
  • Loading branch information
tifecool committed Jun 5, 2022
commit ddcf12bc28c50399cea86b45f54cfd4b83999d7a
49 changes: 11 additions & 38 deletions primitives/arithmetic/src/rational.rs
Original file line number Diff line number Diff line change
Expand Up @@ -357,10 +357,7 @@ mod tests {
assert_eq!(r(5, 30).lcm(&r(1, 10)).unwrap(), 30);

// large numbers
assert_eq!(
r(1_000_000_000, MAX128).lcm(&r(7_000_000_000, MAX128 - 1)),
None,
);
assert_eq!(r(1_000_000_000, MAX128).lcm(&r(7_000_000_000, MAX128 - 1)), None,);
assert_eq!(
r(1_000_000_000, MAX64).lcm(&r(7_000_000_000, MAX64 - 1)),
Some(340282366920938463408034375210639556610),
Expand Down Expand Up @@ -424,10 +421,7 @@ mod tests {

#[test]
fn multiply_by_rational_with_rounding_works() {
assert_eq!(
multiply_by_rational_with_rounding(7, 2, 3, Rounding::Down).unwrap(),
7 * 2 / 3
);
assert_eq!(multiply_by_rational_with_rounding(7, 2, 3, Rounding::Down).unwrap(), 7 * 2 / 3);
assert_eq!(
multiply_by_rational_with_rounding(7, 20, 30, Rounding::Down).unwrap(),
7 * 2 / 3
Expand All @@ -454,40 +448,24 @@ mod tests {
);
assert_eq!(
// MAX128 % 1000 == 455
multiply_by_rational_with_rounding(MAX128, 555, 1000, Rounding::Down)
.unwrap(),
multiply_by_rational_with_rounding(MAX128, 555, 1000, Rounding::Down).unwrap(),
(MAX128 / 1000 * 555) + (455 * 555 / 1000),
);

assert_eq!(
multiply_by_rational_with_rounding(
2 * MAX64 - 1,
MAX64,
MAX64,
Rounding::Down
)
.unwrap(),
multiply_by_rational_with_rounding(2 * MAX64 - 1, MAX64, MAX64, Rounding::Down)
.unwrap(),
2 * MAX64 - 1
);
assert_eq!(
multiply_by_rational_with_rounding(
2 * MAX64 - 1,
MAX64 - 1,
MAX64,
Rounding::Down
)
.unwrap(),
multiply_by_rational_with_rounding(2 * MAX64 - 1, MAX64 - 1, MAX64, Rounding::Down)
.unwrap(),
2 * MAX64 - 3
);

assert_eq!(
multiply_by_rational_with_rounding(
MAX64 + 100,
MAX64_2,
MAX64_2 / 2,
Rounding::Down
)
.unwrap(),
multiply_by_rational_with_rounding(MAX64 + 100, MAX64_2, MAX64_2 / 2, Rounding::Down)
.unwrap(),
(MAX64 + 100) * 2,
);
assert_eq!(
Expand All @@ -512,13 +490,8 @@ mod tests {
73786976294838206461,
);
assert_eq!(
multiply_by_rational_with_rounding(
1_000_000_000,
MAX128 / 8,
MAX128 / 2,
Rounding::Up
)
.unwrap(),
multiply_by_rational_with_rounding(1_000_000_000, MAX128 / 8, MAX128 / 2, Rounding::Up)
.unwrap(),
250000000
);

Expand Down
12 changes: 8 additions & 4 deletions primitives/npos-elections/src/phragmen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,14 @@ pub fn seq_phragmen_core<AccountId: IdentifierT>(
for edge in &mut voter.edges {
if edge.candidate.borrow().elected {
// update internal state.
edge.weight =
multiply_by_rational_with_rounding(voter.budget, edge.load.n(), voter.load.n(), Rounding::Down)
// If result cannot fit in u128. Not much we can do about it.
.unwrap_or(Bounded::max_value());
edge.weight = multiply_by_rational_with_rounding(
voter.budget,
edge.load.n(),
voter.load.n(),
Rounding::Down,
)
// If result cannot fit in u128. Not much we can do about it.
.unwrap_or(Bounded::max_value());
} else {
edge.weight = 0
}
Expand Down