Coverage Report

Created: 2024-09-08 06:35

/rust/registry/src/index.crates.io-6f17d22bba15001f/num-traits-0.2.15/src/pow.rs
Line
Count
Source (jump to first uncovered line)
1
use core::num::Wrapping;
2
use core::ops::Mul;
3
use {CheckedMul, One};
4
5
/// Binary operator for raising a value to a power.
6
pub trait Pow<RHS> {
7
    /// The result after applying the operator.
8
    type Output;
9
10
    /// Returns `self` to the power `rhs`.
11
    ///
12
    /// # Examples
13
    ///
14
    /// ```
15
    /// use num_traits::Pow;
16
    /// assert_eq!(Pow::pow(10u32, 2u32), 100);
17
    /// ```
18
    fn pow(self, rhs: RHS) -> Self::Output;
19
}
20
21
macro_rules! pow_impl {
22
    ($t:ty) => {
23
        pow_impl!($t, u8);
24
        pow_impl!($t, usize);
25
26
        // FIXME: these should be possible
27
        // pow_impl!($t, u16);
28
        // pow_impl!($t, u32);
29
        // pow_impl!($t, u64);
30
    };
31
    ($t:ty, $rhs:ty) => {
32
        pow_impl!($t, $rhs, usize, pow);
33
    };
34
    ($t:ty, $rhs:ty, $desired_rhs:ty, $method:expr) => {
35
        impl Pow<$rhs> for $t {
36
            type Output = $t;
37
            #[inline]
38
0
            fn pow(self, rhs: $rhs) -> $t {
39
0
                ($method)(self, <$desired_rhs>::from(rhs))
40
0
            }
Unexecuted instantiation: <u8 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<i8>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<i16>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<i32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<i8>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<i16>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<i32>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<f32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<f32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<f64>>::pow
41
        }
42
43
        impl<'a> Pow<&'a $rhs> for $t {
44
            type Output = $t;
45
            #[inline]
46
0
            fn pow(self, rhs: &'a $rhs) -> $t {
47
0
                ($method)(self, <$desired_rhs>::from(*rhs))
48
0
            }
Unexecuted instantiation: <u8 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <u8 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <i8 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <u16 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <i16 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <u32 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <i32 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <u64 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <i64 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <u128 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <i128 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <usize as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <isize as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&i8>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&i16>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&i32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&i8>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&i16>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&i32>>::pow
Unexecuted instantiation: <f32 as num_traits::pow::Pow<&f32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&f32>>::pow
Unexecuted instantiation: <f64 as num_traits::pow::Pow<&f64>>::pow
49
        }
50
51
        impl<'a> Pow<$rhs> for &'a $t {
52
            type Output = $t;
53
            #[inline]
54
0
            fn pow(self, rhs: $rhs) -> $t {
55
0
                ($method)(*self, <$desired_rhs>::from(rhs))
56
0
            }
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<u32>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<usize>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<i8>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<i16>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<i32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<i8>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<u8>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<i16>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<u16>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<i32>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<f32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<f32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<f64>>::pow
57
        }
58
59
        impl<'a, 'b> Pow<&'a $rhs> for &'b $t {
60
            type Output = $t;
61
            #[inline]
62
0
            fn pow(self, rhs: &'a $rhs) -> $t {
63
0
                ($method)(*self, <$desired_rhs>::from(*rhs))
64
0
            }
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&u8 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&i8 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&u16 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&i16 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&u32 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&i32 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&u64 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&i64 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&u128 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&i128 as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&usize as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<&u32>>::pow
Unexecuted instantiation: <&isize as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u8> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i8> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u16> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i16> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u32> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i32> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u64> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i64> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<u128> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<i128> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<usize> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&core::num::wrapping::Wrapping<isize> as num_traits::pow::Pow<&usize>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&i8>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&i16>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&i32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&i8>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&u8>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&i16>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&u16>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&i32>>::pow
Unexecuted instantiation: <&f32 as num_traits::pow::Pow<&f32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&f32>>::pow
Unexecuted instantiation: <&f64 as num_traits::pow::Pow<&f64>>::pow
65
        }
66
    };
67
}
68
69
pow_impl!(u8, u8, u32, u8::pow);
70
pow_impl!(u8, u16, u32, u8::pow);
71
pow_impl!(u8, u32, u32, u8::pow);
72
pow_impl!(u8, usize);
73
pow_impl!(i8, u8, u32, i8::pow);
74
pow_impl!(i8, u16, u32, i8::pow);
75
pow_impl!(i8, u32, u32, i8::pow);
76
pow_impl!(i8, usize);
77
pow_impl!(u16, u8, u32, u16::pow);
78
pow_impl!(u16, u16, u32, u16::pow);
79
pow_impl!(u16, u32, u32, u16::pow);
80
pow_impl!(u16, usize);
81
pow_impl!(i16, u8, u32, i16::pow);
82
pow_impl!(i16, u16, u32, i16::pow);
83
pow_impl!(i16, u32, u32, i16::pow);
84
pow_impl!(i16, usize);
85
pow_impl!(u32, u8, u32, u32::pow);
86
pow_impl!(u32, u16, u32, u32::pow);
87
pow_impl!(u32, u32, u32, u32::pow);
88
pow_impl!(u32, usize);
89
pow_impl!(i32, u8, u32, i32::pow);
90
pow_impl!(i32, u16, u32, i32::pow);
91
pow_impl!(i32, u32, u32, i32::pow);
92
pow_impl!(i32, usize);
93
pow_impl!(u64, u8, u32, u64::pow);
94
pow_impl!(u64, u16, u32, u64::pow);
95
pow_impl!(u64, u32, u32, u64::pow);
96
pow_impl!(u64, usize);
97
pow_impl!(i64, u8, u32, i64::pow);
98
pow_impl!(i64, u16, u32, i64::pow);
99
pow_impl!(i64, u32, u32, i64::pow);
100
pow_impl!(i64, usize);
101
102
#[cfg(has_i128)]
103
pow_impl!(u128, u8, u32, u128::pow);
104
#[cfg(has_i128)]
105
pow_impl!(u128, u16, u32, u128::pow);
106
#[cfg(has_i128)]
107
pow_impl!(u128, u32, u32, u128::pow);
108
#[cfg(has_i128)]
109
pow_impl!(u128, usize);
110
111
#[cfg(has_i128)]
112
pow_impl!(i128, u8, u32, i128::pow);
113
#[cfg(has_i128)]
114
pow_impl!(i128, u16, u32, i128::pow);
115
#[cfg(has_i128)]
116
pow_impl!(i128, u32, u32, i128::pow);
117
#[cfg(has_i128)]
118
pow_impl!(i128, usize);
119
120
pow_impl!(usize, u8, u32, usize::pow);
121
pow_impl!(usize, u16, u32, usize::pow);
122
pow_impl!(usize, u32, u32, usize::pow);
123
pow_impl!(usize, usize);
124
pow_impl!(isize, u8, u32, isize::pow);
125
pow_impl!(isize, u16, u32, isize::pow);
126
pow_impl!(isize, u32, u32, isize::pow);
127
pow_impl!(isize, usize);
128
pow_impl!(Wrapping<u8>);
129
pow_impl!(Wrapping<i8>);
130
pow_impl!(Wrapping<u16>);
131
pow_impl!(Wrapping<i16>);
132
pow_impl!(Wrapping<u32>);
133
pow_impl!(Wrapping<i32>);
134
pow_impl!(Wrapping<u64>);
135
pow_impl!(Wrapping<i64>);
136
#[cfg(has_i128)]
137
pow_impl!(Wrapping<u128>);
138
#[cfg(has_i128)]
139
pow_impl!(Wrapping<i128>);
140
pow_impl!(Wrapping<usize>);
141
pow_impl!(Wrapping<isize>);
142
143
// FIXME: these should be possible
144
// pow_impl!(u8, u64);
145
// pow_impl!(i16, u64);
146
// pow_impl!(i8, u64);
147
// pow_impl!(u16, u64);
148
// pow_impl!(u32, u64);
149
// pow_impl!(i32, u64);
150
// pow_impl!(u64, u64);
151
// pow_impl!(i64, u64);
152
// pow_impl!(usize, u64);
153
// pow_impl!(isize, u64);
154
155
#[cfg(any(feature = "std", feature = "libm"))]
156
mod float_impls {
157
    use super::Pow;
158
    use Float;
159
160
    pow_impl!(f32, i8, i32, <f32 as Float>::powi);
161
    pow_impl!(f32, u8, i32, <f32 as Float>::powi);
162
    pow_impl!(f32, i16, i32, <f32 as Float>::powi);
163
    pow_impl!(f32, u16, i32, <f32 as Float>::powi);
164
    pow_impl!(f32, i32, i32, <f32 as Float>::powi);
165
    pow_impl!(f64, i8, i32, <f64 as Float>::powi);
166
    pow_impl!(f64, u8, i32, <f64 as Float>::powi);
167
    pow_impl!(f64, i16, i32, <f64 as Float>::powi);
168
    pow_impl!(f64, u16, i32, <f64 as Float>::powi);
169
    pow_impl!(f64, i32, i32, <f64 as Float>::powi);
170
    pow_impl!(f32, f32, f32, <f32 as Float>::powf);
171
    pow_impl!(f64, f32, f64, <f64 as Float>::powf);
172
    pow_impl!(f64, f64, f64, <f64 as Float>::powf);
173
}
174
175
/// Raises a value to the power of exp, using exponentiation by squaring.
176
///
177
/// Note that `0⁰` (`pow(0, 0)`) returns `1`. Mathematically this is undefined.
178
///
179
/// # Example
180
///
181
/// ```rust
182
/// use num_traits::pow;
183
///
184
/// assert_eq!(pow(2i8, 4), 16);
185
/// assert_eq!(pow(6u8, 3), 216);
186
/// assert_eq!(pow(0u8, 0), 1); // Be aware if this case affects you
187
/// ```
188
#[inline]
189
0
pub fn pow<T: Clone + One + Mul<T, Output = T>>(mut base: T, mut exp: usize) -> T {
190
0
    if exp == 0 {
191
0
        return T::one();
192
0
    }
193
194
0
    while exp & 1 == 0 {
195
0
        base = base.clone() * base;
196
0
        exp >>= 1;
197
0
    }
198
0
    if exp == 1 {
199
0
        return base;
200
0
    }
201
0
202
0
    let mut acc = base.clone();
203
0
    while exp > 1 {
204
0
        exp >>= 1;
205
0
        base = base.clone() * base;
206
0
        if exp & 1 == 1 {
207
0
            acc = acc * base.clone();
208
0
        }
209
    }
210
0
    acc
211
0
}
212
213
/// Raises a value to the power of exp, returning `None` if an overflow occurred.
214
///
215
/// Note that `0⁰` (`checked_pow(0, 0)`) returns `Some(1)`. Mathematically this is undefined.
216
///
217
/// Otherwise same as the `pow` function.
218
///
219
/// # Example
220
///
221
/// ```rust
222
/// use num_traits::checked_pow;
223
///
224
/// assert_eq!(checked_pow(2i8, 4), Some(16));
225
/// assert_eq!(checked_pow(7i8, 8), None);
226
/// assert_eq!(checked_pow(7u32, 8), Some(5_764_801));
227
/// assert_eq!(checked_pow(0u32, 0), Some(1)); // Be aware if this case affect you
228
/// ```
229
#[inline]
230
0
pub fn checked_pow<T: Clone + One + CheckedMul>(mut base: T, mut exp: usize) -> Option<T> {
231
0
    if exp == 0 {
232
0
        return Some(T::one());
233
0
    }
234
235
    macro_rules! optry {
236
        ($expr:expr) => {
237
            if let Some(val) = $expr {
238
                val
239
            } else {
240
                return None;
241
            }
242
        };
243
    }
244
245
0
    while exp & 1 == 0 {
246
0
        base = optry!(base.checked_mul(&base));
247
0
        exp >>= 1;
248
    }
249
0
    if exp == 1 {
250
0
        return Some(base);
251
0
    }
252
0
253
0
    let mut acc = base.clone();
254
0
    while exp > 1 {
255
0
        exp >>= 1;
256
0
        base = optry!(base.checked_mul(&base));
257
0
        if exp & 1 == 1 {
258
0
            acc = optry!(acc.checked_mul(&base));
259
0
        }
260
    }
261
0
    Some(acc)
262
0
}