123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- use testcrate::*;
- /// Make sure that the the edge case tester and randomized tester don't break, and list examples of
- /// fuzz values for documentation purposes.
- #[test]
- fn fuzz_values() {
- const VALS: [u16; 47] = [
- 0b0, // edge cases
- 0b1111111111111111,
- 0b1111111111111110,
- 0b1111111111111100,
- 0b1111111110000000,
- 0b1111111100000000,
- 0b1110000000000000,
- 0b1100000000000000,
- 0b1000000000000000,
- 0b111111111111111,
- 0b111111111111110,
- 0b111111111111100,
- 0b111111110000000,
- 0b111111100000000,
- 0b110000000000000,
- 0b100000000000000,
- 0b11111111111111,
- 0b11111111111110,
- 0b11111111111100,
- 0b11111110000000,
- 0b11111100000000,
- 0b10000000000000,
- 0b111111111,
- 0b111111110,
- 0b111111100,
- 0b110000000,
- 0b100000000,
- 0b11111111,
- 0b11111110,
- 0b11111100,
- 0b10000000,
- 0b111,
- 0b110,
- 0b100,
- 0b11,
- 0b10,
- 0b1,
- 0b1010110100000, // beginning of random fuzzing
- 0b1100011001011010,
- 0b1001100101001111,
- 0b1101010100011010,
- 0b100010001,
- 0b1000000000000000,
- 0b1100000000000101,
- 0b1100111101010101,
- 0b1100010111111111,
- 0b1111110101111111,
- ];
- let mut i = 0;
- fuzz(10, |x: u16| {
- assert_eq!(x, VALS[i]);
- i += 1;
- });
- }
- #[test]
- fn leading_zeros() {
- use compiler_builtins::int::__clzsi2;
- use compiler_builtins::int::leading_zeros::{
- usize_leading_zeros_default, usize_leading_zeros_riscv,
- };
- fuzz(N, |x: usize| {
- let lz = x.leading_zeros() as usize;
- let lz0 = __clzsi2(x);
- let lz1 = usize_leading_zeros_default(x);
- let lz2 = usize_leading_zeros_riscv(x);
- if lz0 != lz {
- panic!("__clzsi2({}): std: {}, builtins: {}", x, lz, lz0);
- }
- if lz1 != lz {
- panic!(
- "usize_leading_zeros_default({}): std: {}, builtins: {}",
- x, lz, lz1
- );
- }
- if lz2 != lz {
- panic!(
- "usize_leading_zeros_riscv({}): std: {}, builtins: {}",
- x, lz, lz2
- );
- }
- })
- }
- #[test]
- fn float_extend() {
- fuzz_float(N, |x: f32| {
- let tmp0 = x as f64;
- let tmp1: f64 = compiler_builtins::float::extend::__extendsfdf2(x);
- if !compiler_builtins::float::Float::eq_repr(tmp0, tmp1) {
- panic!("__extendsfdf2({}): std: {}, builtins: {}", x, tmp0, tmp1);
- }
- });
- }
- // This doesn't quite work because of issues related to
- // https://github.com/rust-lang/rust/issues/73920.
- // TODO how do we resolve this?
- /*
- macro_rules! pow {
- ($($f:ty, $fn:ident);*;) => {
- $(
- fuzz_float_2(N, |x: $f, y: $f| {
- let n = y as i32;
- let tmp0: $f = x.powi(n);
- let tmp1: $f = $fn(x, n);
- if tmp0 != tmp1 {
- panic!(
- "{}({}, {}): std: {}, builtins: {}",
- stringify!($fn), x, y, tmp0, tmp1
- );
- }
- });
- )*
- };
- }
- #[test]
- fn float_pow() {
- use compiler_builtins::float::pow::{__powidf2, __powisf2};
- pow!(
- f32, __powisf2;
- f64, __powidf2;
- );
- }
- */
|