count_leading_zeros.rs 591 B

12345678910111213141516171819202122232425
  1. #![feature(compiler_builtins_lib)]
  2. extern crate compiler_builtins;
  3. use compiler_builtins::int::__clzsi2;
  4. #[test]
  5. fn __clzsi2_test() {
  6. let mut i: usize = core::usize::MAX;
  7. // Check all values above 0
  8. while i > 0 {
  9. assert_eq!(__clzsi2(i) as u32, i.leading_zeros());
  10. i >>= 1;
  11. }
  12. // check 0 also
  13. i = 0;
  14. assert_eq!(__clzsi2(i) as u32, i.leading_zeros());
  15. // double check for bit patterns that aren't just solid 1s
  16. i = 1;
  17. for _ in 0..63 {
  18. assert_eq!(__clzsi2(i) as u32, i.leading_zeros());
  19. i <<= 2;
  20. i += 1;
  21. }
  22. }