Skip to content

Commit 7483ae8

Browse files
committed
impl {Add,Sub,Mul,Div}<Ratio<T>> for BigInt
1 parent e4a8627 commit 7483ae8

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/lib.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,8 @@ impl_primitive_ops_ratio!(Ratio<T> for i128);
795795
// Implements for BigInt
796796
#[cfg(has_i128)]
797797
impl_primitive_ops_ratio!(Ratio<T> for u128);
798+
#[cfg(feature = "bigint")]
799+
impl_primitive_ops_ratio!(Ratio<T> for BigInt);
798800

799801
// Implementing these directly because the implementation of Add<T>, Sub<T>,
800802
// Mul<T> and Div<T> for Ratio<T> don't cover these.
@@ -1684,6 +1686,8 @@ mod test {
16841686
}
16851687

16861688
mod arith {
1689+
#[cfg(feature = "bigint")]
1690+
use bigint::BigInt;
16871691
#[cfg(feature = "bigint")]
16881692
use super::super::BigRational;
16891693
use super::super::{Ratio, Rational, Rational32, Rational64};
@@ -1880,6 +1884,9 @@ mod test {
18801884
fn test_u128(a: u128, b: BigRational, c: BigRational) {
18811885
assert_eq!(a + b, c);
18821886
}
1887+
fn test_bigint(a: BigInt, b: BigRational, c: BigRational) {
1888+
assert_eq!(a + b, c);
1889+
}
18831890

18841891
test_isize(-2, to_big(_1), to_big(_NEG1));
18851892
test_usize(1, to_big(_1), to_big(_2));
@@ -1895,6 +1902,7 @@ mod test {
18951902
test_i128(-2, to_big(_1), to_big(_NEG1));
18961903
#[cfg(has_i128)]
18971904
test_u128(1, to_big(_1), to_big(_2));
1905+
test_bigint(BigInt::from(1), to_big(_1), to_big(_2));
18981906
}
18991907

19001908
#[cfg(feature = "bigint")]
@@ -1938,6 +1946,9 @@ mod test {
19381946
fn test_u128(a: BigRational, b: u128, c: BigRational) {
19391947
assert_eq!(a + b, c);
19401948
}
1949+
fn test_bigint(a: BigRational, b: BigInt, c: BigRational) {
1950+
assert_eq!(a + b, c);
1951+
}
19411952

19421953
test_isize(to_big(_1), -2, to_big(_NEG1));
19431954
test_usize(to_big(_1), 1, to_big(_2));
@@ -1953,6 +1964,7 @@ mod test {
19531964
test_i128(to_big(_1), -2, to_big(_NEG1));
19541965
#[cfg(has_i128)]
19551966
test_u128(to_big(_1), 1, to_big(_2));
1967+
test_bigint(to_big(_1), BigInt::from(1), to_big(_2));
19561968
}
19571969

19581970
#[test]
@@ -2111,6 +2123,9 @@ mod test {
21112123
fn test_u128(a: u128, b: BigRational, c: BigRational) {
21122124
assert_eq!(a - b, c);
21132125
}
2126+
fn test_bigint(a: BigInt, b: BigRational, c: BigRational) {
2127+
assert_eq!(a - b, c);
2128+
}
21142129

21152130
test_isize(-1, to_big(_1), to_big(_NEG2));
21162131
test_usize(2, to_big(_1), to_big(_1));
@@ -2126,6 +2141,7 @@ mod test {
21262141
test_i128(-1, to_big(_1), to_big(_NEG2));
21272142
#[cfg(has_i128)]
21282143
test_u128(2, to_big(_1), to_big(_1));
2144+
test_bigint(BigInt::from(2), to_big(_1), to_big(_1));
21292145
}
21302146

21312147
#[cfg(feature = "bigint")]
@@ -2169,6 +2185,9 @@ mod test {
21692185
fn test_u128(a: BigRational, b: u128, c: BigRational) {
21702186
assert_eq!(a - b, c);
21712187
}
2188+
fn test_bigint(a: BigRational, b: BigInt, c: BigRational) {
2189+
assert_eq!(a - b, c);
2190+
}
21722191

21732192
test_isize(to_big(_2), 1, to_big(_1));
21742193
test_usize(to_big(_2), 1, to_big(_1));
@@ -2184,6 +2203,7 @@ mod test {
21842203
test_i128(to_big(_2), 1, to_big(_1));
21852204
#[cfg(has_i128)]
21862205
test_u128(to_big(_2), 1, to_big(_1));
2206+
test_bigint(to_big(_2), BigInt::from(1), to_big(_1));
21872207
}
21882208

21892209
#[test]
@@ -2342,6 +2362,9 @@ mod test {
23422362
fn test_u128(a: u128, b: BigRational, c: BigRational) {
23432363
assert_eq!(a * b, c);
23442364
}
2365+
fn test_bigint(a: BigInt, b: BigRational, c: BigRational) {
2366+
assert_eq!(a * b, c);
2367+
}
23452368

23462369
test_isize(-2, to_big(_1_2), to_big(_NEG1));
23472370
test_usize(2, to_big(_1_2), to_big(_1));
@@ -2357,6 +2380,7 @@ mod test {
23572380
test_i128(-2, to_big(_1_2), to_big(_NEG1));
23582381
#[cfg(has_i128)]
23592382
test_u128(2, to_big(_1_2), to_big(_1));
2383+
test_bigint(BigInt::from(2), to_big(_1_2), to_big(_1));
23602384
}
23612385

23622386
#[cfg(feature = "bigint")]
@@ -2400,6 +2424,9 @@ mod test {
24002424
fn test_u128(a: BigRational, b: u128, c: BigRational) {
24012425
assert_eq!(a * b, c);
24022426
}
2427+
fn test_bigint(a: BigRational, b: BigInt, c: BigRational) {
2428+
assert_eq!(a * b, c);
2429+
}
24032430

24042431
test_isize(to_big(_1_2), -2, to_big(_NEG1));
24052432
test_usize(to_big(_1_2), 2, to_big(_1));
@@ -2415,6 +2442,7 @@ mod test {
24152442
test_i128(to_big(_1_2), -2, to_big(_NEG1));
24162443
#[cfg(has_i128)]
24172444
test_u128(to_big(_1_2), 2, to_big(_1));
2445+
test_bigint(to_big(_1_2), BigInt::from(2), to_big(_1));
24182446
}
24192447

24202448
#[test]
@@ -2573,6 +2601,9 @@ mod test {
25732601
fn test_u128(a: u128, b: BigRational, c: BigRational) {
25742602
assert_eq!(a / b, c);
25752603
}
2604+
fn test_bigint(a: BigInt, b: BigRational, c: BigRational) {
2605+
assert_eq!(a / b, c);
2606+
}
25762607

25772608
test_isize(-2, to_big(_2), to_big(_NEG1));
25782609
test_usize(2, to_big(_2), to_big(_1));
@@ -2588,6 +2619,7 @@ mod test {
25882619
test_i128(-2, to_big(_2), to_big(_NEG1));
25892620
#[cfg(has_i128)]
25902621
test_u128(2, to_big(_2), to_big(_1));
2622+
test_bigint(BigInt::from(2), to_big(_2), to_big(_1));
25912623
}
25922624

25932625
#[cfg(feature = "bigint")]
@@ -2631,6 +2663,9 @@ mod test {
26312663
fn test_u128(a: BigRational, b: u128, c: BigRational) {
26322664
assert_eq!(a / b, c);
26332665
}
2666+
fn test_bigint(a: BigRational, b: BigInt, c: BigRational) {
2667+
assert_eq!(a / b, c);
2668+
}
26342669

26352670
test_isize(to_big(_2), -2isize, to_big(_NEG1));
26362671
test_usize(to_big(_2), 2usize, to_big(_1));
@@ -2646,6 +2681,7 @@ mod test {
26462681
test_i128(to_big(_2), -2, to_big(_NEG1));
26472682
#[cfg(has_i128)]
26482683
test_u128(to_big(_2), 2, to_big(_1));
2684+
test_bigint(to_big(_2), BigInt::from(2), to_big(_1));
26492685
}
26502686

26512687
#[test]

0 commit comments

Comments
 (0)