test.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. use std::{mem, panic};
  2. use quickcheck::TestResult;
  3. macro_rules! absv_i2 {
  4. ($intrinsic:ident: $ty:ident) => {
  5. #[test]
  6. fn $intrinsic() {
  7. assert!(panic::catch_unwind(|| ::$intrinsic(::std::$ty::MIN)).is_err());
  8. assert_eq!(::$intrinsic(::std::$ty::MIN + 1), ::std::$ty::MAX);
  9. assert_eq!(::$intrinsic(::std::$ty::MIN + 2), ::std::$ty::MAX - 1);
  10. assert_eq!(::$intrinsic(-1), 1);
  11. assert_eq!(::$intrinsic(-2), 2);
  12. assert_eq!(::$intrinsic(0), 0);
  13. assert_eq!(::$intrinsic(1), 1);
  14. assert_eq!(::$intrinsic(2), 2);
  15. assert_eq!(::$intrinsic(2), 2);
  16. assert_eq!(::$intrinsic(::std::$ty::MAX - 1), ::std::$ty::MAX - 1);
  17. assert_eq!(::$intrinsic(::std::$ty::MAX), ::std::$ty::MAX);
  18. }
  19. }
  20. }
  21. absv_i2!(__absvsi2: i32);
  22. absv_i2!(__absvdi2: i64);
  23. // TODO(rust-lang/35118)?
  24. // absv_i2!(__absvti2: i128);
  25. quickcheck! {
  26. fn udivmoddi4(a: (u32, u32), b: (u32, u32)) -> TestResult {
  27. let (a, b) = unsafe {
  28. (mem::transmute(a), mem::transmute(b))
  29. };
  30. if b == 0 {
  31. TestResult::discard()
  32. } else {
  33. let mut r = 0;
  34. let q = ::__udivmoddi4(a, b, &mut r);
  35. TestResult::from_bool(q * b + r == a)
  36. }
  37. }
  38. }