diff options
author | Valentin Popov <valentin@popov.link> | 2024-07-19 15:37:58 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-07-19 15:37:58 +0300 |
commit | a990de90fe41456a23e58bd087d2f107d321f3a1 (patch) | |
tree | 15afc392522a9e85dc3332235e311b7d39352ea9 /vendor/num-integer/benches/roots.rs | |
parent | 3d48cd3f81164bbfc1a755dc1d4a9a02f98c8ddd (diff) | |
download | fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.tar.xz fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.zip |
Deleted vendor folder
Diffstat (limited to 'vendor/num-integer/benches/roots.rs')
-rw-r--r-- | vendor/num-integer/benches/roots.rs | 170 |
1 files changed, 0 insertions, 170 deletions
diff --git a/vendor/num-integer/benches/roots.rs b/vendor/num-integer/benches/roots.rs deleted file mode 100644 index 7f67278..0000000 --- a/vendor/num-integer/benches/roots.rs +++ /dev/null @@ -1,170 +0,0 @@ -//! Benchmark sqrt and cbrt - -#![feature(test)] - -extern crate num_integer; -extern crate num_traits; -extern crate test; - -use num_integer::Integer; -use num_traits::checked_pow; -use num_traits::{AsPrimitive, PrimInt, WrappingAdd, WrappingMul}; -use test::{black_box, Bencher}; - -trait BenchInteger: Integer + PrimInt + WrappingAdd + WrappingMul + 'static {} - -impl<T> BenchInteger for T where T: Integer + PrimInt + WrappingAdd + WrappingMul + 'static {} - -fn bench<T, F>(b: &mut Bencher, v: &[T], f: F, n: u32) -where - T: BenchInteger, - F: Fn(&T) -> T, -{ - // Pre-validate the results... - for i in v { - let rt = f(i); - if *i >= T::zero() { - let rt1 = rt + T::one(); - assert!(rt.pow(n) <= *i); - if let Some(x) = checked_pow(rt1, n as usize) { - assert!(*i < x); - } - } else { - let rt1 = rt - T::one(); - assert!(rt < T::zero()); - assert!(*i <= rt.pow(n)); - if let Some(x) = checked_pow(rt1, n as usize) { - assert!(x < *i); - } - }; - } - - // Now just run as fast as we can! - b.iter(|| { - for i in v { - black_box(f(i)); - } - }); -} - -// Simple PRNG so we don't have to worry about rand compatibility -fn lcg<T>(x: T) -> T -where - u32: AsPrimitive<T>, - T: BenchInteger, -{ - // LCG parameters from Numerical Recipes - // (but we're applying it to arbitrary sizes) - const LCG_A: u32 = 1664525; - const LCG_C: u32 = 1013904223; - x.wrapping_mul(&LCG_A.as_()).wrapping_add(&LCG_C.as_()) -} - -fn bench_rand<T, F>(b: &mut Bencher, f: F, n: u32) -where - u32: AsPrimitive<T>, - T: BenchInteger, - F: Fn(&T) -> T, -{ - let mut x: T = 3u32.as_(); - let v: Vec<T> = (0..1000) - .map(|_| { - x = lcg(x); - x - }) - .collect(); - bench(b, &v, f, n); -} - -fn bench_rand_pos<T, F>(b: &mut Bencher, f: F, n: u32) -where - u32: AsPrimitive<T>, - T: BenchInteger, - F: Fn(&T) -> T, -{ - let mut x: T = 3u32.as_(); - let v: Vec<T> = (0..1000) - .map(|_| { - x = lcg(x); - while x < T::zero() { - x = lcg(x); - } - x - }) - .collect(); - bench(b, &v, f, n); -} - -fn bench_small<T, F>(b: &mut Bencher, f: F, n: u32) -where - u32: AsPrimitive<T>, - T: BenchInteger, - F: Fn(&T) -> T, -{ - let v: Vec<T> = (0..1000).map(|i| i.as_()).collect(); - bench(b, &v, f, n); -} - -fn bench_small_pos<T, F>(b: &mut Bencher, f: F, n: u32) -where - u32: AsPrimitive<T>, - T: BenchInteger, - F: Fn(&T) -> T, -{ - let v: Vec<T> = (0..1000) - .map(|i| i.as_().mod_floor(&T::max_value())) - .collect(); - bench(b, &v, f, n); -} - -macro_rules! bench_roots { - ($($T:ident),*) => {$( - mod $T { - use test::Bencher; - use num_integer::Roots; - - #[bench] - fn sqrt_rand(b: &mut Bencher) { - ::bench_rand_pos(b, $T::sqrt, 2); - } - - #[bench] - fn sqrt_small(b: &mut Bencher) { - ::bench_small_pos(b, $T::sqrt, 2); - } - - #[bench] - fn cbrt_rand(b: &mut Bencher) { - ::bench_rand(b, $T::cbrt, 3); - } - - #[bench] - fn cbrt_small(b: &mut Bencher) { - ::bench_small(b, $T::cbrt, 3); - } - - #[bench] - fn fourth_root_rand(b: &mut Bencher) { - ::bench_rand_pos(b, |x: &$T| x.nth_root(4), 4); - } - - #[bench] - fn fourth_root_small(b: &mut Bencher) { - ::bench_small_pos(b, |x: &$T| x.nth_root(4), 4); - } - - #[bench] - fn fifth_root_rand(b: &mut Bencher) { - ::bench_rand(b, |x: &$T| x.nth_root(5), 5); - } - - #[bench] - fn fifth_root_small(b: &mut Bencher) { - ::bench_small(b, |x: &$T| x.nth_root(5), 5); - } - } - )*} -} - -bench_roots!(i8, i16, i32, i64, i128); -bench_roots!(u8, u16, u32, u64, u128); |