Skip to content

Commit b66d51c

Browse files
committed
Add failing testcase
1 parent 4d1f392 commit b66d51c

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

src/algebraic_numbers.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,35 @@ mod tests {
16651665
);
16661666
}
16671667

1668+
#[test]
1669+
fn prevent_exploding_intervals() {
1670+
let mut num = RealAlgebraicNumber::from(2) / RealAlgebraicNumber::from(3);
1671+
let original = num.clone();
1672+
1673+
for _ in 0..100 {
1674+
num = num.pow((1, 2));
1675+
num = num.pow((2, 1));
1676+
}
1677+
1678+
assert_eq!(num, original);
1679+
assert_eq!(num.interval().log2_denom(), 0);
1680+
assert_eq!(num.interval().lower_bound_numer(), &BigInt::from(0));
1681+
assert_eq!(num.interval().upper_bound_numer(), &BigInt::from(1));
1682+
}
1683+
1684+
#[test]
1685+
fn prevent_exploding_precisions() {
1686+
let v1 = -(RealAlgebraicNumber::from(2) / RealAlgebraicNumber::from(81)).pow((1, 2));
1687+
let v2 = (RealAlgebraicNumber::from(200) / RealAlgebraicNumber::from(81)).pow((1, 2));
1688+
1689+
let num = v1 + v2;
1690+
1691+
assert_eq!(num, RealAlgebraicNumber::from(2).pow((1, 2)));
1692+
assert_eq!(num.interval().log2_denom(), 0);
1693+
assert_eq!(num.interval().lower_bound_numer(), &BigInt::from(1));
1694+
assert_eq!(num.interval().upper_bound_numer(), &BigInt::from(2));
1695+
}
1696+
16681697
#[test]
16691698
fn test_add() {
16701699
fn test_case<

0 commit comments

Comments
 (0)