mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Moving some more array tests to semanticTests.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
contract c {
|
||||
uint[9] m_data;
|
||||
uint[] m_data_dyn;
|
||||
uint8[][] m_byte_data;
|
||||
function store(uint[9] calldata a, uint8[3][] calldata b) external returns (uint8) {
|
||||
m_data = a;
|
||||
m_data_dyn = a;
|
||||
m_byte_data = b;
|
||||
return b[3][1]; // note that access and declaration are reversed to each other
|
||||
}
|
||||
function retrieve() public returns (uint a, uint b, uint c, uint d, uint e, uint f, uint g) {
|
||||
a = m_data.length;
|
||||
b = m_data[7];
|
||||
c = m_data_dyn.length;
|
||||
d = m_data_dyn[7];
|
||||
e = m_byte_data.length;
|
||||
f = m_byte_data[3].length;
|
||||
g = m_byte_data[3][1];
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// store(uint256[9],uint8[3][]): 21, 22, 23, 24, 25, 26, 27, 28, 29, 0x140, 4, 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33 -> 32
|
||||
// retrieve() -> 9, 28, 9, 28, 4, 3, 32
|
||||
@@ -0,0 +1,40 @@
|
||||
contract c {
|
||||
uint[3][90][] large;
|
||||
uint[3][3][] small;
|
||||
function test() public returns (uint r) {
|
||||
for (uint i = 0; i < 7; i++) {
|
||||
large.push();
|
||||
small.push();
|
||||
}
|
||||
large[3][2][0] = 2;
|
||||
large[1] = large[3];
|
||||
small[3][2][0] = 2;
|
||||
small[1] = small[2];
|
||||
r = ((
|
||||
small[3][2][0] * 0x100 |
|
||||
small[1][2][0]) * 0x100 |
|
||||
large[3][2][0]) * 0x100 |
|
||||
large[1][2][0];
|
||||
delete small;
|
||||
delete large;
|
||||
|
||||
}
|
||||
function clear() public returns (uint, uint) {
|
||||
for (uint i = 0; i < 7; i++) {
|
||||
large.push();
|
||||
small.push();
|
||||
}
|
||||
small[3][2][0] = 0;
|
||||
large[3][2][0] = 0;
|
||||
while (small.length > 0)
|
||||
small.pop();
|
||||
while (large.length > 0)
|
||||
large.pop();
|
||||
return (small.length, large.length);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// test() -> 0x02000202
|
||||
// storage: empty
|
||||
// clear() -> 0, 0
|
||||
// storage: empty
|
||||
@@ -0,0 +1,18 @@
|
||||
contract Test {
|
||||
uint24[] public data;
|
||||
function set(uint24[] memory _data) public returns (uint) {
|
||||
data = _data;
|
||||
return data.length;
|
||||
}
|
||||
function get() public returns (uint24[] memory) {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// set(uint24[]): 0x20, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 -> 18
|
||||
// data(uint256): 7 -> 8
|
||||
// data(uint256): 15 -> 16
|
||||
// data(uint256): 18 -> FAILURE
|
||||
// get() -> 0x20, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
|
||||
Reference in New Issue
Block a user