-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGasTest.sol
More file actions
65 lines (54 loc) · 2.11 KB
/
GasTest.sol
File metadata and controls
65 lines (54 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
/// @title A simple contract to test code4rena's gas optimization suggestions.
contract GasTest {
function beforeOptimization(uint256[] calldata array) internal pure {
for (uint256 i = 0; i < array.length; i++) {}
}
function afterOptimization(uint256[] calldata array) internal pure {
uint256 len = array.length; // G002 - Cache Array Length Outside of Loop
// G001 - Don't Initialize Variables with Default Value
for (uint256 i; i < len; ) {
// G011 - Unnecessary checked arithmetic in for loop
unchecked {
++i; // G012 - Use Prefix Increment instead of Postfix Increment if possible
}
}
}
function testOneBefore(uint256[] calldata array) external pure {
require(array.length <= 8);
beforeOptimization(array);
}
function testOneAfter(uint256[] calldata array) external pure {
require(array.length <= 8);
afterOptimization(array);
}
function testTwoBefore(uint256[] calldata array) external pure {
require(array.length > 8 && array.length <= 16);
beforeOptimization(array);
}
function testTwoAfter(uint256[] calldata array) external pure {
require(array.length > 8 && array.length <= 16);
afterOptimization(array);
}
function testThreeBefore(uint256[] calldata array) external pure {
require(array.length > 16 && array.length <= 24);
beforeOptimization(array);
}
function testThreeAfter(uint256[] calldata array) external pure {
require(array.length > 16 && array.length <= 24);
afterOptimization(array);
}
function testFourBefore(uint256[] calldata array) external pure {
require(array.length > 24);
beforeOptimization(array);
}
function testFourAfter(uint256[] calldata array) external pure {
require(array.length > 24);
afterOptimization(array);
}
/// @dev Echidna requires at least one test function.
function echidna_test() public pure returns (bool) {
return true;
}
}