|
@@ -52,9 +52,12 @@ divmod!(__divmoddi4, __divdi3: i64);
|
|
|
|
|
|
#[cfg(test)]
|
|
|
mod tests {
|
|
|
- use quickcheck::TestResult;
|
|
|
use qc::{U32, U64};
|
|
|
|
|
|
+ use gcc_s;
|
|
|
+ use quickcheck::TestResult;
|
|
|
+ use rand;
|
|
|
+
|
|
|
quickcheck!{
|
|
|
fn divdi3(n: U64, d: U64) -> TestResult {
|
|
|
let (n, d) = (n.0 as i64, d.0 as i64);
|
|
@@ -62,7 +65,13 @@ mod tests {
|
|
|
TestResult::discard()
|
|
|
} else {
|
|
|
let q = super::__divdi3(n, d);
|
|
|
- TestResult::from_bool(q == n / d)
|
|
|
+
|
|
|
+ match gcc_s::divdi3() {
|
|
|
+ Some(divdi3) if rand::random() => {
|
|
|
+ TestResult::from_bool(q == unsafe { divdi3(n, d) })
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(q == n / d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -72,7 +81,13 @@ mod tests {
|
|
|
TestResult::discard()
|
|
|
} else {
|
|
|
let r = super::__moddi3(n, d);
|
|
|
- TestResult::from_bool(r == n % d)
|
|
|
+
|
|
|
+ match gcc_s::moddi3() {
|
|
|
+ Some(moddi3) if rand::random() => {
|
|
|
+ TestResult::from_bool(r == unsafe { moddi3(n, d) })
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(r == n % d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -83,7 +98,18 @@ mod tests {
|
|
|
} else {
|
|
|
let mut r = 0;
|
|
|
let q = super::__divmoddi4(n, d, &mut r);
|
|
|
- TestResult::from_bool(q == n / d && r == n % d)
|
|
|
+
|
|
|
+ match gcc_s::divmoddi4() {
|
|
|
+ Some(divmoddi4) if rand::random() => {
|
|
|
+ let mut gcc_s_r = 0;
|
|
|
+ let gcc_s_q = unsafe {
|
|
|
+ divmoddi4(n, d, &mut gcc_s_r)
|
|
|
+ };
|
|
|
+
|
|
|
+ TestResult::from_bool(q == gcc_s_q && r == gcc_s_r)
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(q == n / d && r == n % d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -93,7 +119,13 @@ mod tests {
|
|
|
TestResult::discard()
|
|
|
} else {
|
|
|
let q = super::__divsi3(n, d);
|
|
|
- TestResult::from_bool(q == n / d)
|
|
|
+
|
|
|
+ match gcc_s::divsi3() {
|
|
|
+ Some(divsi3) if rand::random() => {
|
|
|
+ TestResult::from_bool(q == unsafe { divsi3(n, d)})
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(q == n / d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -103,7 +135,13 @@ mod tests {
|
|
|
TestResult::discard()
|
|
|
} else {
|
|
|
let r = super::__modsi3(n, d);
|
|
|
- TestResult::from_bool(r == n % d)
|
|
|
+
|
|
|
+ match gcc_s::modsi3() {
|
|
|
+ Some(modsi3) if rand::random() => {
|
|
|
+ TestResult::from_bool(r == unsafe { modsi3(n, d) })
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(r == n % d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -114,7 +152,18 @@ mod tests {
|
|
|
} else {
|
|
|
let mut r = 0;
|
|
|
let q = super::__divmodsi4(n, d, &mut r);
|
|
|
- TestResult::from_bool(q == n / d && r == n % d)
|
|
|
+
|
|
|
+ match gcc_s::divmodsi4() {
|
|
|
+ Some(divmodsi4) if rand::random() => {
|
|
|
+ let mut gcc_s_r = 0;
|
|
|
+ let gcc_s_q = unsafe {
|
|
|
+ divmodsi4(n, d, &mut gcc_s_r)
|
|
|
+ };
|
|
|
+
|
|
|
+ TestResult::from_bool(q == gcc_s_q && r == gcc_s_r)
|
|
|
+ },
|
|
|
+ _ => TestResult::from_bool(q == n / d && r == n % d),
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|