Coverage Report

Created: 2025-07-11 06:39

/rust/registry/src/index.crates.io-6f17d22bba15001f/libm-0.2.11/src/libm_helper.rs
Line
Count
Source (jump to first uncovered line)
1
use core::marker::PhantomData;
2
3
use crate::*;
4
5
/// Generic helper for libm functions, abstracting over f32 and f64. <br/>
6
/// # Type Parameter:
7
/// - `T`: Either `f32` or `f64`
8
///
9
/// # Examples
10
/// ```rust
11
/// use libm::{self, Libm};
12
///
13
/// const PI_F32: f32 = 3.1415927410e+00;
14
/// const PI_F64: f64 = 3.1415926535897931160e+00;
15
///
16
/// assert!(Libm::<f32>::cos(0.0f32) == libm::cosf(0.0));
17
/// assert!(Libm::<f32>::sin(PI_F32) == libm::sinf(PI_F32));
18
///
19
/// assert!(Libm::<f64>::cos(0.0f64) == libm::cos(0.0));
20
/// assert!(Libm::<f64>::sin(PI_F64) == libm::sin(PI_F64));
21
/// ```
22
pub struct Libm<T>(PhantomData<T>);
23
24
macro_rules! libm_helper {
25
    ($t:ident, funcs: $funcs:tt) => {
26
        impl Libm<$t> {
27
            #![allow(unused_parens)]
28
29
            libm_helper! { $funcs }
30
        }
31
    };
32
33
    ({$($func:tt);*}) => {
34
        $(
35
            libm_helper! { $func }
36
        )*
37
    };
38
39
    ((fn $func:ident($($arg:ident: $arg_typ:ty),*) -> ($($ret_typ:ty),*); => $libm_fn:ident)) => {
40
        #[inline(always)]
41
0
        pub fn $func($($arg: $arg_typ),*) -> ($($ret_typ),*) {
42
0
            $libm_fn($($arg),*)
43
0
        }
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::acos
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::acosh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::asin
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::asinh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::atan
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::atan2
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::atanh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::cbrt
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::ceil
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::copysign
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::cos
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::cosh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::erf
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::erfc
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::exp
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::exp2
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::exp10
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::expm1
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fabs
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fdim
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::floor
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fma
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fmax
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fmin
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::fmod
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::frexp
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::hypot
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::ilogb
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::j0
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::j1
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::jn
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::ldexp
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::lgamma_r
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::lgamma
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::log
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::log1p
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::log2
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::log10
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::modf
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::nextafter
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::pow
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::remainder
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::remquo
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::rint
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::round
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::scalbn
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::sin
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::sincos
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::sinh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::sqrt
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::tan
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::tanh
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::tgamma
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::trunc
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::y0
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::y1
Unexecuted instantiation: <libm::libm_helper::Libm<f32>>::yn
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::acos
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::acosh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::asin
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::asinh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::atan
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::atan2
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::atanh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::cbrt
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::ceil
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::copysign
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::cos
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::cosh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::erf
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::erfc
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::exp
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::exp2
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::exp10
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::expm1
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fabs
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fdim
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::floor
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fma
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fmax
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fmin
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::fmod
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::frexp
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::hypot
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::ilogb
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::j0
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::j1
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::jn
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::ldexp
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::lgamma_r
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::lgamma
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::log
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::log1p
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::log2
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::log10
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::modf
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::nextafter
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::pow
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::remainder
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::remquo
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::rint
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::round
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::scalbn
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::sin
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::sincos
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::sinh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::sqrt
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::tan
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::tanh
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::tgamma
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::trunc
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::y0
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::y1
Unexecuted instantiation: <libm::libm_helper::Libm<f64>>::yn
44
    };
45
}
46
47
libm_helper! {
48
    f32,
49
    funcs: {
50
        (fn acos(x: f32) -> (f32);                  => acosf);
51
        (fn acosh(x: f32) -> (f32);                 => acoshf);
52
        (fn asin(x: f32) -> (f32);                  => asinf);
53
        (fn asinh(x: f32) -> (f32);                 => asinhf);
54
        (fn atan(x: f32) -> (f32);                  => atanf);
55
        (fn atan2(y: f32, x: f32) -> (f32);         => atan2f);
56
        (fn atanh(x: f32) -> (f32);                 => atanhf);
57
        (fn cbrt(x: f32) -> (f32);                  => cbrtf);
58
        (fn ceil(x: f32) -> (f32);                  => ceilf);
59
        (fn copysign(x: f32, y: f32) -> (f32);      => copysignf);
60
        (fn cos(x: f32) -> (f32);                   => cosf);
61
        (fn cosh(x: f32) -> (f32);                  => coshf);
62
        (fn erf(x: f32) -> (f32);                   => erff);
63
        (fn erfc(x: f32) -> (f32);                  => erfcf);
64
        (fn exp(x: f32) -> (f32);                   => expf);
65
        (fn exp2(x: f32) -> (f32);                  => exp2f);
66
        (fn exp10(x: f32) -> (f32);                 => exp10f);
67
        (fn expm1(x: f32) -> (f32);                 => expm1f);
68
        (fn fabs(x: f32) -> (f32);                  => fabsf);
69
        (fn fdim(x: f32, y: f32) -> (f32);          => fdimf);
70
        (fn floor(x: f32) -> (f32);                 => floorf);
71
        (fn fma(x: f32, y: f32, z: f32) -> (f32);   => fmaf);
72
        (fn fmax(x: f32, y: f32) -> (f32);          => fmaxf);
73
        (fn fmin(x: f32, y: f32) -> (f32);          => fminf);
74
        (fn fmod(x: f32, y: f32) -> (f32);          => fmodf);
75
        (fn frexp(x: f32) -> (f32, i32);            => frexpf);
76
        (fn hypot(x: f32, y: f32) -> (f32);         => hypotf);
77
        (fn ilogb(x: f32) -> (i32);                 => ilogbf);
78
        (fn j0(x: f32) -> (f32);                    => j0f);
79
        (fn j1(x: f32) -> (f32);                    => j1f);
80
        (fn jn(n: i32, x: f32) -> (f32);            => jnf);
81
        (fn ldexp(x: f32, n: i32) -> (f32);         => ldexpf);
82
        (fn lgamma_r(x: f32) -> (f32, i32);         => lgammaf_r);
83
        (fn lgamma(x: f32) -> (f32);                => lgammaf);
84
        (fn log(x: f32) -> (f32);                   => logf);
85
        (fn log1p(x: f32) -> (f32);                 => log1pf);
86
        (fn log2(x: f32) -> (f32);                  => log2f);
87
        (fn log10(x: f32) -> (f32);                 => log10f);
88
        (fn modf(x: f32) -> (f32, f32);             => modff);
89
        (fn nextafter(x: f32, y: f32) -> (f32);     => nextafterf);
90
        (fn pow(x: f32, y: f32) -> (f32);           => powf);
91
        (fn remainder(x: f32, y: f32) -> (f32);     => remainderf);
92
        (fn remquo(x: f32, y: f32) -> (f32, i32);   => remquof);
93
        (fn rint(x: f32) -> (f32);                  => rintf);
94
        (fn round(x: f32) -> (f32);                 => roundf);
95
        (fn scalbn(x: f32, n: i32) -> (f32);        => scalbnf);
96
        (fn sin(x: f32) -> (f32);                   => sinf);
97
        (fn sincos(x: f32) -> (f32, f32);           => sincosf);
98
        (fn sinh(x: f32) -> (f32);                  => sinhf);
99
        (fn sqrt(x: f32) -> (f32);                  => sqrtf);
100
        (fn tan(x: f32) -> (f32);                   => tanf);
101
        (fn tanh(x: f32) -> (f32);                  => tanhf);
102
        (fn tgamma(x: f32) -> (f32);                => tgammaf);
103
        (fn trunc(x: f32) -> (f32);                 => truncf);
104
        (fn y0(x: f32) -> (f32);                    => y0f);
105
        (fn y1(x: f32) -> (f32);                    => y1f);
106
        (fn yn(n: i32, x: f32) -> (f32);            => ynf)
107
    }
108
}
109
110
libm_helper! {
111
    f64,
112
    funcs: {
113
        (fn acos(x: f64) -> (f64);                  => acos);
114
        (fn acosh(x: f64) -> (f64);                 => acosh);
115
        (fn asin(x: f64) -> (f64);                  => asin);
116
        (fn asinh(x: f64) -> (f64);                 => asinh);
117
        (fn atan(x: f64) -> (f64);                  => atan);
118
        (fn atan2(y: f64, x: f64) -> (f64);         => atan2);
119
        (fn atanh(x: f64) -> (f64);                 => atanh);
120
        (fn cbrt(x: f64) -> (f64);                  => cbrt);
121
        (fn ceil(x: f64) -> (f64);                  => ceil);
122
        (fn copysign(x: f64, y: f64) -> (f64);      => copysign);
123
        (fn cos(x: f64) -> (f64);                   => cos);
124
        (fn cosh(x: f64) -> (f64);                  => cosh);
125
        (fn erf(x: f64) -> (f64);                   => erf);
126
        (fn erfc(x: f64) -> (f64);                  => erfc);
127
        (fn exp(x: f64) -> (f64);                   => exp);
128
        (fn exp2(x: f64) -> (f64);                  => exp2);
129
        (fn exp10(x: f64) -> (f64);                 => exp10);
130
        (fn expm1(x: f64) -> (f64);                 => expm1);
131
        (fn fabs(x: f64) -> (f64);                  => fabs);
132
        (fn fdim(x: f64, y: f64) -> (f64);          => fdim);
133
        (fn floor(x: f64) -> (f64);                 => floor);
134
        (fn fma(x: f64, y: f64, z: f64) -> (f64);   => fma);
135
        (fn fmax(x: f64, y: f64) -> (f64);          => fmax);
136
        (fn fmin(x: f64, y: f64) -> (f64);          => fmin);
137
        (fn fmod(x: f64, y: f64) -> (f64);          => fmod);
138
        (fn frexp(x: f64) -> (f64, i32);            => frexp);
139
        (fn hypot(x: f64, y: f64) -> (f64);         => hypot);
140
        (fn ilogb(x: f64) -> (i32);                 => ilogb);
141
        (fn j0(x: f64) -> (f64);                    => j0);
142
        (fn j1(x: f64) -> (f64);                    => j1);
143
        (fn jn(n: i32, x: f64) -> (f64);            => jn);
144
        (fn ldexp(x: f64, n: i32) -> (f64);         => ldexp);
145
        (fn lgamma_r(x: f64) -> (f64, i32);         => lgamma_r);
146
        (fn lgamma(x: f64) -> (f64);                => lgamma);
147
        (fn log(x: f64) -> (f64);                   => log);
148
        (fn log1p(x: f64) -> (f64);                 => log1p);
149
        (fn log2(x: f64) -> (f64);                  => log2);
150
        (fn log10(x: f64) -> (f64);                 => log10);
151
        (fn modf(x: f64) -> (f64, f64);             => modf);
152
        (fn nextafter(x: f64, y: f64) -> (f64);     => nextafter);
153
        (fn pow(x: f64, y: f64) -> (f64);           => pow);
154
        (fn remainder(x: f64, y: f64) -> (f64);     => remainder);
155
        (fn remquo(x: f64, y: f64) -> (f64, i32);   => remquo);
156
        (fn rint(x: f64) -> (f64);                  => rint);
157
        (fn round(x: f64) -> (f64);                 => round);
158
        (fn scalbn(x: f64, n: i32) -> (f64);        => scalbn);
159
        (fn sin(x: f64) -> (f64);                   => sin);
160
        (fn sincos(x: f64) -> (f64, f64);           => sincos);
161
        (fn sinh(x: f64) -> (f64);                  => sinh);
162
        (fn sqrt(x: f64) -> (f64);                  => sqrt);
163
        (fn tan(x: f64) -> (f64);                   => tan);
164
        (fn tanh(x: f64) -> (f64);                  => tanh);
165
        (fn tgamma(x: f64) -> (f64);                => tgamma);
166
        (fn trunc(x: f64) -> (f64);                 => trunc);
167
        (fn y0(x: f64) -> (f64);                    => y0);
168
        (fn y1(x: f64) -> (f64);                    => y1);
169
        (fn yn(n: i32, x: f64) -> (f64);            => yn)
170
    }
171
}