Skip to content

Commit

Permalink
♻️ Strengthen tests (#499)
Browse files Browse the repository at this point in the history
  • Loading branch information
Vectorized authored Jul 14, 2023
1 parent 969a789 commit c372a01
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 70 deletions.
142 changes: 72 additions & 70 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -281,94 +281,95 @@ ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 256, μ: 804
ERC721Test:test__codesize() (gas: 42215)
FixedPointMathLibTest:testAbs() (gas: 600)
FixedPointMathLibTest:testAbs(int256) (runs: 256, μ: 471, ~: 440)
FixedPointMathLibTest:testAbsEdgeCases() (gas: 455)
FixedPointMathLibTest:testAbsEdgeCases() (gas: 410)
FixedPointMathLibTest:testAvg() (gas: 431)
FixedPointMathLibTest:testAvgEdgeCase() (gas: 448)
FixedPointMathLibTest:testAvgEdgeCase() (gas: 470)
FixedPointMathLibTest:testAvgSigned() (gas: 875)
FixedPointMathLibTest:testCbrt() (gas: 10243)
FixedPointMathLibTest:testCbrt(uint256) (runs: 256, μ: 1376, ~: 1466)
FixedPointMathLibTest:testCbrtBack(uint256) (runs: 256, μ: 28358, ~: 17470)
FixedPointMathLibTest:testCbrt(uint256) (runs: 256, μ: 1398, ~: 1488)
FixedPointMathLibTest:testCbrtBack(uint256) (runs: 256, μ: 29848, ~: 23882)
FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 256, μ: 597, ~: 597)
FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 256, μ: 640, ~: 640)
FixedPointMathLibTest:testDist() (gas: 657)
FixedPointMathLibTest:testDist(int256,int256) (runs: 256, μ: 497, ~: 502)
FixedPointMathLibTest:testDistEdgeCases() (gas: 527)
FixedPointMathLibTest:testDist() (gas: 613)
FixedPointMathLibTest:testDist(int256,int256) (runs: 256, μ: 518, ~: 514)
FixedPointMathLibTest:testDistEdgeCases() (gas: 549)
FixedPointMathLibTest:testDivWad() (gas: 745)
FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 256, μ: 658, ~: 746)
FixedPointMathLibTest:testDivWadEdgeCases() (gas: 436)
FixedPointMathLibTest:testDivWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3725, ~: 3725)
FixedPointMathLibTest:testDivWadUp() (gas: 3107)
FixedPointMathLibTest:testDivWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3680, ~: 3680)
FixedPointMathLibTest:testDivWadUp() (gas: 3062)
FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 256, μ: 793, ~: 942)
FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 438)
FixedPointMathLibTest:testDivWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3683, ~: 3683)
FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 460)
FixedPointMathLibTest:testDivWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3705, ~: 3705)
FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts() (gas: 3207)
FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts(uint256) (runs: 256, μ: 3284, ~: 3284)
FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts(uint256) (runs: 256, μ: 3239, ~: 3239)
FixedPointMathLibTest:testDivWadZeroDenominatorReverts() (gas: 3183)
FixedPointMathLibTest:testDivWadZeroDenominatorReverts(uint256) (runs: 256, μ: 3261, ~: 3261)
FixedPointMathLibTest:testExpWad() (gas: 7544)
FixedPointMathLibTest:testFactorial() (gas: 98768)
FixedPointMathLibTest:testFactorial() (gas: 98727)
FixedPointMathLibTest:testFactorialOriginal() (gas: 94187)
FixedPointMathLibTest:testFullMulDiv() (gas: 1214)
FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256):(uint256) (runs: 256, μ: 1376, ~: 996)
FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 1724, ~: 1502)
FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3635)
FixedPointMathLibTest:testFullMulDiv() (gas: 1236)
FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256):(uint256) (runs: 256, μ: 1400, ~: 996)
FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 1751, ~: 1524)
FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3657)
FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase2() (gas: 3645)
FixedPointMathLibTest:testGcd() (gas: 4172)
FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 256, μ: 4822, ~: 2014)
FixedPointMathLibTest:testLnWad() (gas: 2241)
FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 256, μ: 4757, ~: 2106)
FixedPointMathLibTest:testLnWad() (gas: 2197)
FixedPointMathLibTest:testLnWadBig() (gas: 2252)
FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3187)
FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3185)
FixedPointMathLibTest:testLnWadSmall() (gas: 2906)
FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3144)
FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3140)
FixedPointMathLibTest:testLnWadSmall() (gas: 2864)
FixedPointMathLibTest:testLog2() (gas: 304977)
FixedPointMathLibTest:testLog2RevertsForZero() (gas: 3155)
FixedPointMathLibTest:testLog2Up() (gas: 361267)
FixedPointMathLibTest:testLog2Up() (gas: 361289)
FixedPointMathLibTest:testLog2UpRevertsForZero() (gas: 3182)
FixedPointMathLibTest:testMax(uint256,uint256) (runs: 256, μ: 475, ~: 480)
FixedPointMathLibTest:testMax(uint256,uint256) (runs: 256, μ: 496, ~: 492)
FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 256, μ: 865, ~: 861)
FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 256, μ: 497, ~: 493)
FixedPointMathLibTest:testMin(uint256,uint256) (runs: 256, μ: 477, ~: 482)
FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 256, μ: 475, ~: 480)
FixedPointMathLibTest:testMulDiv() (gas: 1843)
FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 256, μ: 711, ~: 814)
FixedPointMathLibTest:testMulDivEdgeCases() (gas: 718)
FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 256, μ: 520, ~: 525)
FixedPointMathLibTest:testMin(uint256,uint256) (runs: 256, μ: 499, ~: 504)
FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 256, μ: 830, ~: 839)
FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 256, μ: 474, ~: 470)
FixedPointMathLibTest:testMulDiv() (gas: 1865)
FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 256, μ: 736, ~: 836)
FixedPointMathLibTest:testMulDivEdgeCases() (gas: 740)
FixedPointMathLibTest:testMulDivOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3788, ~: 3788)
FixedPointMathLibTest:testMulDivUp() (gas: 2147)
FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 877, ~: 1099)
FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 796)
FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3790, ~: 3790)
FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 882, ~: 1099)
FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 818)
FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3812, ~: 3812)
FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3220)
FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3297, ~: 3297)
FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3319, ~: 3319)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3175)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3300, ~: 3300)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3322, ~: 3322)
FixedPointMathLibTest:testMulWad() (gas: 693)
FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 256, μ: 679, ~: 779)
FixedPointMathLibTest:testMulWadEdgeCases() (gas: 715)
FixedPointMathLibTest:testMulWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3723, ~: 3723)
FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 256, μ: 677, ~: 779)
FixedPointMathLibTest:testMulWadEdgeCases() (gas: 737)
FixedPointMathLibTest:testMulWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3745, ~: 3745)
FixedPointMathLibTest:testMulWadUp() (gas: 816)
FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 256, μ: 832, ~: 1044)
FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 256, μ: 830, ~: 1044)
FixedPointMathLibTest:testMulWadUpEdgeCases() (gas: 794)
FixedPointMathLibTest:testMulWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3746, ~: 3746)
FixedPointMathLibTest:testMulWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3703, ~: 3703)
FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 256, μ: 418, ~: 418)
FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 256, μ: 441, ~: 441)
FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 256, μ: 463, ~: 463)
FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 256, μ: 512, ~: 512)
FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 256, μ: 466, ~: 466)
FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 256, μ: 420, ~: 420)
FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 256, μ: 421, ~: 421)
FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 256, μ: 442, ~: 442)
FixedPointMathLibTest:testRawMul(int256,int256) (runs: 256, μ: 412, ~: 412)
FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 256, μ: 442, ~: 442)
FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 256, μ: 557, ~: 557)
FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 256, μ: 512, ~: 512)
FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 256, μ: 442, ~: 442)
FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 256, μ: 422, ~: 422)
FixedPointMathLibTest:testRawSub(int256,int256) (runs: 256, μ: 419, ~: 419)
FixedPointMathLibTest:testRawSub(int256,int256) (runs: 256, μ: 441, ~: 441)
FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 256, μ: 419, ~: 419)
FixedPointMathLibTest:testSqrt() (gas: 42598)
FixedPointMathLibTest:testSqrt(uint256) (runs: 256, μ: 994, ~: 1043)
FixedPointMathLibTest:testSqrtBack(uint256) (runs: 256, μ: 13725, ~: 385)
FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 256, μ: 53115, ~: 53505)
FixedPointMathLibTest:testSqrt(uint256) (runs: 256, μ: 1016, ~: 1065)
FixedPointMathLibTest:testSqrtBack(uint256) (runs: 256, μ: 13791, ~: 341)
FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 256, μ: 53127, ~: 53527)
FixedPointMathLibTest:testSqrtHashedSingle() (gas: 53064)
FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 256, μ: 525, ~: 496)
FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 256, μ: 883, ~: 923)
FixedPointMathLibTest:test__codesize() (gas: 18395)
FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 256, μ: 527, ~: 557)
FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 256, μ: 882, ~: 923)
FixedPointMathLibTest:test__codesize() (gas: 18589)
LibBitTest:testAnd(bool,bool) (runs: 256, μ: 541, ~: 540)
LibBitTest:testBoolToUint(bool) (runs: 256, μ: 405, ~: 405)
LibBitTest:testCLZ() (gas: 364018)
Expand Down Expand Up @@ -421,29 +422,30 @@ LibCloneTest:testCloneWithImmutableArgs() (gas: 711341)
LibCloneTest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 256, μ: 1691790, ~: 1682626)
LibCloneTest:testStartsWithCaller(uint256) (runs: 256, μ: 28156, ~: 28404)
LibCloneTest:test__codesize() (gas: 15498)
LibMapTest:testMapGetFromBigArray() (gas: 3264)
LibMapTest:testMapGetFromBigArray() (gas: 3242)
LibMapTest:testMapGetUint8() (gas: 3357)
LibMapTest:testMapSetUint8() (gas: 23277)
LibMapTest:testMapSetUint8FromBigArray() (gas: 23285)
LibMapTest:testUint128MapSetAndGet() (gas: 1607245)
LibMapTest:testUint128MapSetAndGet(uint256) (runs: 256, μ: 171547, ~: 169060)
LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 256, μ: 68328, ~: 69207)
LibMapTest:testUint16MapSetAndGet() (gas: 958236)
LibMapTest:testUint16MapSetAndGet(uint256) (runs: 256, μ: 81220, ~: 81205)
LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 256, μ: 66821, ~: 69140)
LibMapTest:testUint32MapSetAndGet() (gas: 1067113)
LibMapTest:testUint32MapSetAndGet(uint256) (runs: 256, μ: 114439, ~: 124336)
LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 256, μ: 67101, ~: 69117)
LibMapTest:testUint40MapSetAndGet() (gas: 1127321)
LibMapTest:testUint40MapSetAndGet(uint256) (runs: 256, μ: 136358, ~: 146040)
LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 256, μ: 67180, ~: 69214)
LibMapTest:testUint64MapSetAndGet() (gas: 1220437)
LibMapTest:testUint64MapSetAndGet(uint256) (runs: 256, μ: 141180, ~: 146569)
LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 256, μ: 65605, ~: 69167)
LibMapTest:testUint8MapSetAndGet() (gas: 883454)
LibMapTest:testUint8MapSetAndGet(uint256) (runs: 256, μ: 59124, ~: 59072)
LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 256, μ: 67832, ~: 69087)
LibMapTest:test__codesize() (gas: 7483)
LibMapTest:testUint128MapSetAndGet(uint256) (runs: 256, μ: 171862, ~: 169165)
LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 256, μ: 68484, ~: 69274)
LibMapTest:testUint16MapSetAndGet() (gas: 958214)
LibMapTest:testUint16MapSetAndGet(uint256) (runs: 256, μ: 81227, ~: 81213)
LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 256, μ: 66583, ~: 69206)
LibMapTest:testUint32MapSetAndGet() (gas: 1067091)
LibMapTest:testUint32MapSetAndGet(uint256) (runs: 256, μ: 113509, ~: 124336)
LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 256, μ: 67250, ~: 69117)
LibMapTest:testUint32Maps(uint256) (runs: 256, μ: 64926, ~: 72221)
LibMapTest:testUint40MapSetAndGet() (gas: 1127299)
LibMapTest:testUint40MapSetAndGet(uint256) (runs: 256, μ: 136351, ~: 146018)
LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 256, μ: 67319, ~: 69200)
LibMapTest:testUint64MapSetAndGet() (gas: 1220415)
LibMapTest:testUint64MapSetAndGet(uint256) (runs: 256, μ: 141190, ~: 136840)
LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 256, μ: 65455, ~: 69167)
LibMapTest:testUint8MapSetAndGet() (gas: 883432)
LibMapTest:testUint8MapSetAndGet(uint256) (runs: 256, μ: 59129, ~: 59168)
LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 256, μ: 67980, ~: 69079)
LibMapTest:test__codesize() (gas: 8273)
LibPRNGTest:testLCGGas() (gas: 20736)
LibPRNGTest:testPRNGGas() (gas: 25645)
LibPRNGTest:testPRNGNext() (gas: 16184)
Expand Down
15 changes: 15 additions & 0 deletions test/FixedPointMathLib.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,21 @@ contract FixedPointMathLibTest is SoladyTest {
assertEq(FixedPointMathLib.min(x, y), z);
}

function testMinBrutalized(uint256 x, uint256 y) public {
uint32 xCasted;
uint32 yCasted;
/// @solidity memory-safe-assembly
assembly {
xCasted := x
yCasted := y
}
uint256 expected = xCasted < yCasted ? xCasted : yCasted;
assertEq(FixedPointMathLib.min(xCasted, yCasted), expected);
assertEq(FixedPointMathLib.min(uint32(x), uint32(y)), expected);
expected = uint32(x) < uint32(y) ? uint32(x) : uint32(y);
assertEq(FixedPointMathLib.min(xCasted, yCasted), expected);
}

function testMinSigned(int256 x, int256 y) public {
int256 z = x < y ? x : y;
assertEq(FixedPointMathLib.min(x, y), z);
Expand Down
35 changes: 35 additions & 0 deletions test/LibMap.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ contract LibMapTest is SoladyTest {

LibMap.Uint128Map[2] uint128s;

mapping(uint256 => LibMap.Uint32Map) uint32Maps;

struct _TestTemps {
uint256 i0;
uint256 i1;
Expand Down Expand Up @@ -373,4 +375,37 @@ contract LibMapTest is SoladyTest {
assertEq(uint128s[0].get(t.i0), uint128(t.v0));
assertEq(uint128s[1].get(t.i1), uint128(t.v1));
}

function testUint32Maps(uint256) public {
unchecked {
uint256 a0 = _random();
uint256 a1 = _random() % 2 == 0 ? a0 + _random() % 4 : a0 - _random() % 4;
uint256 b0 = _random();
uint256 b1 = _random() % 2 == 0 ? b0 + _random() % 4 : b0 - _random() % 4;
if (a0 == a1 && b1 == b0) {
if (_random() % 2 == 0) {
if (_random() % 2 == 0) b1++;
else a0++;
} else {
if (_random() % 2 == 0) b1--;
else a0--;
}
}
uint256 c0 = _random();
uint256 c1 = _random();
uint32 c0Casted;
uint32 c1Casted;
/// @solidity memory-safe-assembly
assembly {
c0Casted := c0
c1Casted := c1
}
assertEq(uint32Maps[a0].get(b0), 0);
assertEq(uint32Maps[a1].get(b1), 0);
uint32Maps[a0].set(b0, c0Casted);
uint32Maps[a1].set(b1, c1Casted);
assertEq(uint32Maps[a0].get(b0), uint32(c0));
assertEq(uint32Maps[a1].get(b1), uint32(c1));
}
}
}

0 comments on commit c372a01

Please sign in to comment.