Skip to content

Commit 5a7f17a

Browse files
authored
♻️ Strengthen MinHeapLib tests (ethereum#835)
1 parent bde739b commit 5a7f17a

File tree

2 files changed

+85
-25
lines changed

2 files changed

+85
-25
lines changed

.gas-snapshot

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -858,27 +858,31 @@ MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 256, μ: 799541, ~
858858
MetadataReaderLibTest:testReadUint() (gas: 911216)
859859
MetadataReaderLibTest:testReadUint(uint256) (runs: 256, μ: 46033, ~: 47093)
860860
MetadataReaderLibTest:test__codesize() (gas: 9186)
861-
MinHeapLibTest:testHeapEnqueue(uint256) (runs: 256, μ: 186800, ~: 186670)
862-
MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 256, μ: 632201, ~: 543531)
863-
MinHeapLibTest:testHeapEnqueueGas() (gas: 854779)
864-
MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 256, μ: 753, ~: 900)
865-
MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 256, μ: 107937, ~: 99520)
866-
MinHeapLibTest:testHeapPushPop(uint256) (runs: 256, μ: 241058, ~: 239208)
867-
MinHeapLibTest:testHeapReplace(uint256) (runs: 256, μ: 293986, ~: 291470)
868-
MinHeapLibTest:testHeapRoot(uint256) (runs: 256, μ: 5289, ~: 5289)
869-
MinHeapLibTest:testHeapSmallest(uint256) (runs: 256, μ: 1622952, ~: 1248478)
870-
MinHeapLibTest:testHeapSmallestGas() (gas: 50027313)
871-
MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 256, μ: 845431, ~: 802964)
872-
MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 256, μ: 820108, ~: 742000)
873-
MinHeapLibTest:testMemHeapEnqueueGas() (gas: 233959)
874-
MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 256, μ: 813550, ~: 747797)
875-
MinHeapLibTest:testMemHeapPushGas() (gas: 31960)
876-
MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 256, μ: 1057753, ~: 786232)
877-
MinHeapLibTest:testMemHeapReplace(uint256) (runs: 256, μ: 904829, ~: 831457)
878-
MinHeapLibTest:testMemHeapRoot(uint256) (runs: 256, μ: 681376, ~: 634999)
879-
MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 256, μ: 818841, ~: 756472)
880-
MinHeapLibTest:testMemHeapSmallestGas() (gas: 2871496)
881-
MinHeapLibTest:test__codesize() (gas: 12565)
861+
MinHeapLibTest:testHeapEnqueue(uint256) (runs: 256, μ: 188312, ~: 192351)
862+
MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 256, μ: 628359, ~: 566381)
863+
MinHeapLibTest:testHeapEnqueueGas() (gas: 854801)
864+
MinHeapLibTest:testHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 256, μ: 47693, ~: 28615)
865+
MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 256, μ: 716, ~: 877)
866+
MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 256, μ: 107245, ~: 99564)
867+
MinHeapLibTest:testHeapPushPop(uint256) (runs: 256, μ: 245886, ~: 244732)
868+
MinHeapLibTest:testHeapReplace(uint256) (runs: 256, μ: 293870, ~: 302883)
869+
MinHeapLibTest:testHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 256, μ: 47585, ~: 50916)
870+
MinHeapLibTest:testHeapRoot(uint256) (runs: 256, μ: 48520, ~: 47811)
871+
MinHeapLibTest:testHeapSmallest(uint256) (runs: 256, μ: 1703864, ~: 1271598)
872+
MinHeapLibTest:testHeapSmallestGas() (gas: 50027269)
873+
MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 256, μ: 857848, ~: 823530)
874+
MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 256, μ: 793762, ~: 741115)
875+
MinHeapLibTest:testMemHeapEnqueueGas() (gas: 233981)
876+
MinHeapLibTest:testMemHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 256, μ: 25191, ~: 24159)
877+
MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 256, μ: 824109, ~: 748166)
878+
MinHeapLibTest:testMemHeapPushGas() (gas: 31982)
879+
MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 256, μ: 1028744, ~: 775102)
880+
MinHeapLibTest:testMemHeapReplace(uint256) (runs: 256, μ: 879282, ~: 824296)
881+
MinHeapLibTest:testMemHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 256, μ: 25909, ~: 25517)
882+
MinHeapLibTest:testMemHeapRoot(uint256) (runs: 256, μ: 694847, ~: 644571)
883+
MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 256, μ: 835597, ~: 744766)
884+
MinHeapLibTest:testMemHeapSmallestGas() (gas: 2871518)
885+
MinHeapLibTest:test__codesize() (gas: 13708)
882886
MulticallableTest:testMulticallableBenchmark() (gas: 29588)
883887
MulticallableTest:testMulticallableOriginalBenchmark() (gas: 38849)
884888
MulticallableTest:testMulticallablePreservesMsgSender() (gas: 11193)

test/MinHeapLib.t.sol

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ contract MinHeapLibTest is SoladyTest {
1515
MinHeapLib.Heap heap1;
1616

1717
function testHeapRoot(uint256 x) public {
18-
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
19-
heap0.root();
18+
if (_random() % 2 == 0) {
19+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
20+
heap0.root();
21+
}
2022
heap0.data.push(x);
2123
assertEq(heap0.length(), 1);
2224
assertEq(heap0.root(), x);
@@ -279,10 +281,37 @@ contract MinHeapLibTest is SoladyTest {
279281
}
280282
}
281283

284+
function testHeapEnqueueZeroMaxLengthReverts(uint256) public {
285+
if (_random() % 2 == 0) {
286+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
287+
heap0.enqueue(_random(), 0);
288+
}
289+
heap0.enqueue(_random(), 1);
290+
}
291+
292+
function testHeapReplaceOrPopEmptyHeapReverts(uint256) public {
293+
if (_random() % 2 == 0) {
294+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
295+
if (_random() % 2 == 0) {
296+
heap0.replace(_random());
297+
} else {
298+
heap0.pop();
299+
}
300+
}
301+
heap0.push(_random());
302+
if (_random() % 2 == 0) {
303+
heap0.replace(_random());
304+
} else {
305+
heap0.pop();
306+
}
307+
}
308+
282309
function testMemHeapRoot(uint256 x) public brutalizeMemory {
283310
MinHeapLib.MemHeap memory heapA;
284-
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
285-
heapA.root();
311+
if (_random() % 2 == 0) {
312+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
313+
heapA.root();
314+
}
286315
heapA.push(x);
287316
assertEq(heapA.length(), 1);
288317
assertEq(heapA.root(), x);
@@ -474,6 +503,33 @@ contract MinHeapLibTest is SoladyTest {
474503
}
475504
}
476505

506+
function testMemHeapEnqueueZeroMaxLengthReverts(uint256) public {
507+
MinHeapLib.MemHeap memory heapA;
508+
if (_random() % 2 == 0) {
509+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
510+
heapA.enqueue(_random(), 0);
511+
}
512+
heapA.enqueue(_random(), 1);
513+
}
514+
515+
function testMemHeapReplaceOrPopEmptyHeapReverts(uint256) public {
516+
MinHeapLib.MemHeap memory heapA;
517+
if (_random() % 2 == 0) {
518+
vm.expectRevert(MinHeapLib.HeapIsEmpty.selector);
519+
if (_random() % 2 == 0) {
520+
heapA.replace(_random());
521+
} else {
522+
heapA.pop();
523+
}
524+
}
525+
heapA.push(_random());
526+
if (_random() % 2 == 0) {
527+
heapA.replace(_random());
528+
} else {
529+
heapA.pop();
530+
}
531+
}
532+
477533
function testMemHeapEnqueueGas() public pure {
478534
MinHeapLib.MemHeap memory heapA;
479535
LibPRNG.PRNG memory prng;

0 commit comments

Comments
 (0)