@@ -34,7 +34,7 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
3434
3535 function testCannotPow__BaseNegative () external BaseNotZero {
3636 SD59x18 x = sd (- 0.000000000000000001e18 );
37- SD59x18 y = sd (1e18 );
37+ SD59x18 y = sd (2e18 );
3838 vm.expectRevert (abi.encodeWithSelector (PRBMathSD59x18__LogInputTooSmall.selector , x));
3939 pow (x, y);
4040 }
@@ -60,10 +60,39 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
6060 _;
6161 }
6262
63- function testCannotPow__ExponentGreaterThanMaxPermitted () external BaseNotZero BasePositive ExponentNotZero {
63+ function exponentOneSets () internal returns (Set[] memory ) {
64+ delete sets;
65+ sets.push (set ({ x: 1e18 , y: 1e18 , expected: 1e18 }));
66+ sets.push (set ({ x: E, y: 1e18 , expected: E }));
67+ sets.push (set ({ x: PI, y: 1e18 , expected: PI }));
68+ return sets;
69+ }
70+
71+ function testPow__ExponentOne ()
72+ external
73+ parameterizedTest (exponentOneSets ())
74+ BaseNotZero
75+ BasePositive
76+ ExponentNotZero
77+ {
78+ SD59x18 actual = pow (s.x, s.y);
79+ assertEq (actual, s.expected);
80+ }
81+
82+ modifier ExponentNotOne () {
83+ _;
84+ }
85+
86+ function testCannotPow__ExponentGreaterThanMaxPermitted ()
87+ external
88+ BaseNotZero
89+ BasePositive
90+ ExponentNotZero
91+ ExponentNotOne
92+ {
6493 SD59x18 x = MAX_PERMITTED.add (sd (1 ));
65- SD59x18 y = sd (1e18 );
66- vm.expectRevert (abi.encodeWithSelector (PRBMathSD59x18__Exp2InputTooBig.selector , sd (192e18 )));
94+ SD59x18 y = sd (1e18 + 1 );
95+ vm.expectRevert (abi.encodeWithSelector (PRBMathSD59x18__Exp2InputTooBig.selector , sd (192e18 + 192 )));
6796 pow (x, y);
6897 }
6998
@@ -101,6 +130,7 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
101130 BaseNotZero
102131 BasePositive
103132 ExponentNotZero
133+ ExponentNotOne
104134 ExponentLessThanOrEqualToMaxPermitted
105135 {
106136 SD59x18 actual = pow (s.x, s.y);
@@ -115,7 +145,7 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
115145 sets.push (set ({ x: 0.24e18 , y: 11e18 , expected: 0.000000152168114316e18 }));
116146 sets.push (set ({ x: 0.5e18 , y: 0.7373e18 , expected: 0.59986094064056398e18 }));
117147 sets.push (set ({ x: 0.799291e18 , y: 69e18 , expected: 0.000000193481602919e18 }));
118- sets.push (set ({ x: 1e18 , y: 1e18 , expected: 1e18 }));
148+ sets.push (set ({ x: 1e18 , y: 2e18 , expected: 1e18 }));
119149 sets.push (set ({ x: 1e18 , y: PI, expected: 1e18 }));
120150 sets.push (set ({ x: 2e18 , y: 1.5e18 , expected: 2_828427124746190097 }));
121151 sets.push (set ({ x: E, y: E, expected: 15_154262241479263804 }));
@@ -131,12 +161,16 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
131161 sets.push (
132162 set ({
133163 x: 340282366920938463463374607431768211455e18 ,
134- y: 1e18 ,
135- expected: 340282366920938457799636748773271041925_182187238234989391
164+ y: 1e18 + 1 ,
165+ expected: 340282366920938487979097481391762860220_000000000004665573
136166 })
137167 );
138168 sets.push (
139- set ({ x: MAX_PERMITTED, y: 1e18 , expected: 6277101735386680659358266643954607672760_949507286104301595e18 })
169+ set ({
170+ x: MAX_PERMITTED,
171+ y: 1e18 - 1 ,
172+ expected: 6277101735386679823624773486129835356722228023657461399187e18
173+ })
140174 );
141175 return sets;
142176 }
@@ -147,6 +181,7 @@ contract SD59x18__PowTest is SD59x18__BaseTest {
147181 BaseNotZero
148182 BasePositive
149183 ExponentNotZero
184+ ExponentNotOne
150185 ExponentLessThanOrEqualToMaxPermitted
151186 {
152187 SD59x18 actual = pow (s.x, s.y);
0 commit comments