mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Adds and updates Yul tests for push() and pop().
This commit is contained in:
parent
372df6b9e1
commit
01705efb70
@ -2,9 +2,10 @@ contract C {
|
|||||||
uint[] storageArray;
|
uint[] storageArray;
|
||||||
function test_indices(uint256 len) public
|
function test_indices(uint256 len) public
|
||||||
{
|
{
|
||||||
// storageArray = new uint[](len);
|
while (storageArray.length < len)
|
||||||
while (storageArray.length < len) storageArray.push();
|
storageArray.push();
|
||||||
while (storageArray.length > len) storageArray.pop();
|
while (storageArray.length > len)
|
||||||
|
storageArray.pop();
|
||||||
for (uint i = 0; i < len; i++)
|
for (uint i = 0; i < len; i++)
|
||||||
storageArray[i] = i + 1;
|
storageArray[i] = i + 1;
|
||||||
|
|
||||||
|
@ -2,9 +2,10 @@ contract C {
|
|||||||
uint[] storageArray;
|
uint[] storageArray;
|
||||||
function test_boundary_check(uint256 len, uint256 access) public returns (uint256)
|
function test_boundary_check(uint256 len, uint256 access) public returns (uint256)
|
||||||
{
|
{
|
||||||
// storageArray = new uint[](len);
|
while(storageArray.length < len)
|
||||||
while(storageArray.length < len) storageArray.push();
|
storageArray.push();
|
||||||
while(storageArray.length > len) storageArray.pop();
|
while(storageArray.length > len)
|
||||||
|
storageArray.pop();
|
||||||
return storageArray[access];
|
return storageArray[access];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,20 @@ contract C {
|
|||||||
uint[] storageArray;
|
uint[] storageArray;
|
||||||
function test_zeroed_indicies(uint256 len) public
|
function test_zeroed_indicies(uint256 len) public
|
||||||
{
|
{
|
||||||
//storageArray = new uint[](len);
|
while(storageArray.length < len)
|
||||||
while(storageArray.length < len) storageArray.push();
|
storageArray.push();
|
||||||
while(storageArray.length > len) storageArray.pop();
|
while(storageArray.length > len)
|
||||||
|
storageArray.pop();
|
||||||
|
|
||||||
for (uint i = 0; i < len; i++)
|
for (uint i = 0; i < len; i++)
|
||||||
storageArray[i] = i + 1;
|
storageArray[i] = i + 1;
|
||||||
|
|
||||||
if (len > 3)
|
if (len > 3)
|
||||||
{
|
{
|
||||||
//storageArray = new uint[](3);
|
while(storageArray.length > 0)
|
||||||
while(storageArray.length > 0) storageArray.pop();
|
storageArray.pop();
|
||||||
while(storageArray.length < 3) storageArray.push();
|
while(storageArray.length < 3)
|
||||||
|
storageArray.push();
|
||||||
|
|
||||||
for (uint i = 3; i < len; i++)
|
for (uint i = 3; i < len; i++)
|
||||||
{
|
{
|
||||||
@ -29,10 +31,10 @@ contract C {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//storageArray = new uint[](0);
|
while(storageArray.length > 0)
|
||||||
while(storageArray.length > 0) storageArray.pop();
|
storageArray.pop();
|
||||||
//storageArray = new uint[](len);
|
while(storageArray.length < len)
|
||||||
while(storageArray.length < len) storageArray.push();
|
storageArray.push();
|
||||||
|
|
||||||
for (uint i = 0; i < len; i++)
|
for (uint i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
contract C {
|
||||||
|
uint[] storageArray;
|
||||||
|
function popEmpty() public {
|
||||||
|
storageArray.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// EVMVersion: >=petersburg
|
||||||
|
// compileViaYul: true
|
||||||
|
// ----
|
||||||
|
// popEmpty() -> FAILURE
|
@ -0,0 +1,17 @@
|
|||||||
|
contract C {
|
||||||
|
uint256[] storageArray;
|
||||||
|
function pushEmpty(uint256 len) public {
|
||||||
|
while(storageArray.length < len)
|
||||||
|
storageArray.push();
|
||||||
|
|
||||||
|
for (uint i = 0; i < len; i++)
|
||||||
|
require(storageArray[i] == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: true
|
||||||
|
// EVMVersion: >=petersburg
|
||||||
|
// ----
|
||||||
|
// pushEmpty(uint256): 128
|
||||||
|
// pushEmpty(uint256): 256
|
||||||
|
// pushEmpty(uint256): 32768 -> FAILURE # out-of-gas #
|
@ -0,0 +1,23 @@
|
|||||||
|
contract C {
|
||||||
|
address[] addressArray;
|
||||||
|
function set_get_length(uint256 len) public returns (uint256)
|
||||||
|
{
|
||||||
|
while(addressArray.length < len)
|
||||||
|
addressArray.push();
|
||||||
|
while(addressArray.length > len)
|
||||||
|
addressArray.pop();
|
||||||
|
return addressArray.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: true
|
||||||
|
// EVMVersion: >=petersburg
|
||||||
|
// ----
|
||||||
|
// set_get_length(uint256): 0 -> 0
|
||||||
|
// set_get_length(uint256): 1 -> 1
|
||||||
|
// set_get_length(uint256): 10 -> 10
|
||||||
|
// set_get_length(uint256): 20 -> 20
|
||||||
|
// set_get_length(uint256): 0 -> 0
|
||||||
|
// set_get_length(uint256): 0xFF -> 0xFF
|
||||||
|
// set_get_length(uint256): 0xFFF -> 0xFFF
|
||||||
|
// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas #
|
Loading…
Reference in New Issue
Block a user