Skip to content

Commit f495738

Browse files
committed
Adds safeCastTo16
1 parent 9cf1428 commit f495738

3 files changed

Lines changed: 36 additions & 7 deletions

File tree

.gas-snapshot

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,23 +176,25 @@ SSTORE2Test:testWriteReadEmptyBound() (gas: 34677)
176176
SSTORE2Test:testWriteReadFullBoundedRead() (gas: 53672)
177177
SSTORE2Test:testWriteReadFullStartBound() (gas: 34764)
178178
SafeCastLibTest:testFailSafeCastTo128() (gas: 321)
179+
SafeCastLibTest:testFailSafeCastTo16() (gas: 343)
179180
SafeCastLibTest:testFailSafeCastTo160() (gas: 342)
180181
SafeCastLibTest:testFailSafeCastTo192() (gas: 322)
181-
SafeCastLibTest:testFailSafeCastTo224() (gas: 343)
182-
SafeCastLibTest:testFailSafeCastTo248() (gas: 365)
182+
SafeCastLibTest:testFailSafeCastTo224() (gas: 365)
183+
SafeCastLibTest:testFailSafeCastTo248() (gas: 321)
183184
SafeCastLibTest:testFailSafeCastTo32() (gas: 364)
184-
SafeCastLibTest:testFailSafeCastTo64() (gas: 321)
185+
SafeCastLibTest:testFailSafeCastTo64() (gas: 343)
185186
SafeCastLibTest:testFailSafeCastTo8() (gas: 341)
186-
SafeCastLibTest:testFailSafeCastTo96() (gas: 321)
187+
SafeCastLibTest:testFailSafeCastTo96() (gas: 343)
187188
SafeCastLibTest:testSafeCastTo128() (gas: 472)
189+
SafeCastLibTest:testSafeCastTo16() (gas: 447)
188190
SafeCastLibTest:testSafeCastTo160() (gas: 470)
189191
SafeCastLibTest:testSafeCastTo192() (gas: 449)
190192
SafeCastLibTest:testSafeCastTo224() (gas: 491)
191-
SafeCastLibTest:testSafeCastTo24() (gas: 470)
193+
SafeCastLibTest:testSafeCastTo24() (gas: 492)
192194
SafeCastLibTest:testSafeCastTo248() (gas: 450)
193195
SafeCastLibTest:testSafeCastTo32() (gas: 449)
194-
SafeCastLibTest:testSafeCastTo64() (gas: 470)
195-
SafeCastLibTest:testSafeCastTo8() (gas: 469)
196+
SafeCastLibTest:testSafeCastTo64() (gas: 492)
197+
SafeCastLibTest:testSafeCastTo8() (gas: 491)
196198
SafeCastLibTest:testSafeCastTo96() (gas: 469)
197199
SafeTransferLibTest:testApproveWithMissingReturn() (gas: 30751)
198200
SafeTransferLibTest:testApproveWithNonContract() (gas: 3035)

src/test/SafeCastLib.t.sol

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ contract SafeCastLibTest is DSTestPlus {
5151
assertEq(SafeCastLib.safeCastTo24(2.5e3), 2.5e3);
5252
}
5353

54+
function testSafeCastTo16() public {
55+
assertEq(SafeCastLib.safeCastTo16(2.5e3), 2.5e3);
56+
assertEq(SafeCastLib.safeCastTo16(2.5e2), 2.5e2);
57+
}
58+
5459
function testSafeCastTo8() public {
5560
assertEq(SafeCastLib.safeCastTo8(100), 100);
5661
assertEq(SafeCastLib.safeCastTo8(250), 250);
@@ -88,6 +93,10 @@ contract SafeCastLibTest is DSTestPlus {
8893
SafeCastLib.safeCastTo32(type(uint32).max + 1);
8994
}
9095

96+
function testFailSafeCastTo16() public pure {
97+
SafeCastLib.safeCastTo16(type(uint16).max + 1);
98+
}
99+
91100
function testFailSafeCastTo8() public pure {
92101
SafeCastLib.safeCastTo8(type(uint8).max + 1);
93102
}
@@ -140,6 +149,12 @@ contract SafeCastLibTest is DSTestPlus {
140149
assertEq(SafeCastLib.safeCastTo32(x), x);
141150
}
142151

152+
function testSafeCastTo16(uint256 x) public {
153+
x = bound(x, 0, type(uint16).max);
154+
155+
assertEq(SafeCastLib.safeCastTo16(x), x);
156+
}
157+
143158
function testSafeCastTo8(uint256 x) public {
144159
x = bound(x, 0, type(uint8).max);
145160

@@ -200,6 +215,12 @@ contract SafeCastLibTest is DSTestPlus {
200215
SafeCastLib.safeCastTo24(x);
201216
}
202217

218+
function testFailSafeCastTo16(uint256 x) public {
219+
x = bound(x, type(uint16).max + 1, type(uint256).max);
220+
221+
SafeCastLib.safeCastTo16(x);
222+
}
223+
203224
function testFailSafeCastTo8(uint256 x) public {
204225
x = bound(x, type(uint8).max + 1, type(uint256).max);
205226

src/utils/SafeCastLib.sol

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ library SafeCastLib {
5959
y = uint24(x);
6060
}
6161

62+
function safeCastTo16(uint256 x) internal pure returns (uint16 y) {
63+
require(x < 1 << 16);
64+
65+
y = uint16(x);
66+
}
67+
6268
function safeCastTo8(uint256 x) internal pure returns (uint8 y) {
6369
require(x < 1 << 8);
6470

0 commit comments

Comments
 (0)