eazy_data/easing/exponential/
expoe.rs1use crate::easing::Curve;
10
11use libm::powf;
12
13#[derive(Debug)]
24pub struct InExpoE;
25
26impl Curve for InExpoE {
27 #[inline(always)]
28 fn y(&self, p: f32) -> f32 {
29 if p <= 0.0 {
30 return 0.0;
31 }
32
33 powf(core::f32::consts::E, -10.0 * (1.0 - p))
34 }
35}
36
37#[test]
38fn test_in_expoe() {
39 let p = InExpoE.y(1.0);
40
41 assert_eq!(p, 1.0);
42}
43
44#[derive(Debug)]
55pub struct OutExpoE;
56
57impl Curve for OutExpoE {
58 #[inline(always)]
59 fn y(&self, p: f32) -> f32 {
60 1.0 - InExpoE.y(1.0 - p)
61 }
62}
63
64#[test]
65fn test_out_expoe() {
66 let p = OutExpoE.y(1.0);
67
68 assert_eq!(p, 1.0);
69}
70
71#[derive(Debug)]
82pub struct InOutExpoE;
83
84impl Curve for InOutExpoE {
85 #[inline(always)]
86 fn y(&self, p: f32) -> f32 {
87 let t = p * 2.0;
88
89 if t < 1.0 {
90 return 0.5 - 0.5 * OutExpoE.y(1.0 - t);
91 }
92
93 0.5 + 0.5 * OutExpoE.y(t - 1.0)
94 }
95}
96
97#[test]
98fn test_in_out_expoe() {
99 let p = InOutExpoE.y(1.0);
100
101 assert_eq!(p, 1.0);
102}