mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add more tests for state access (block, msg, tx, etc.)
Move some of them out of SolidityEndToEndTests. Additionally this ensures the deterministic values of the testing infrastructure.
This commit is contained in:
parent
9e07981920
commit
f9d6abf69b
@ -814,28 +814,6 @@ BOOST_AUTO_TEST_CASE(constructor)
|
||||
)
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(blockchain)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract test {
|
||||
constructor() payable {}
|
||||
function someInfo() public payable returns (uint256 value, address coinbase, uint256 blockNumber) {
|
||||
value = msg.value;
|
||||
coinbase = block.coinbase;
|
||||
blockNumber = block.number;
|
||||
}
|
||||
}
|
||||
)";
|
||||
m_evmcHost->tx_context.block_coinbase = EVMHost::convertToEVMC(h160("0x1212121212121212121212121212121212121212"));
|
||||
m_evmcHost->newBlock();
|
||||
m_evmcHost->newBlock();
|
||||
m_evmcHost->newBlock();
|
||||
m_evmcHost->newBlock();
|
||||
m_evmcHost->newBlock();
|
||||
compileAndRun(sourceCode, 27);
|
||||
ABI_CHECK(callContractFunctionWithValue("someInfo()", 28), encodeArgs(28, u256("0x1212121212121212121212121212121212121212"), 7));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(send_ether)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
@ -898,25 +876,6 @@ BOOST_AUTO_TEST_CASE(transfer_ether)
|
||||
)
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(uncalled_blockhash)
|
||||
{
|
||||
char const* code = R"(
|
||||
contract C {
|
||||
function f() public view returns (bytes32)
|
||||
{
|
||||
return (blockhash)(block.number - 1);
|
||||
}
|
||||
}
|
||||
)";
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(code, 0, "C");
|
||||
bytes result = callContractFunction("f()");
|
||||
BOOST_REQUIRE_EQUAL(result.size(), 32);
|
||||
BOOST_CHECK(result[0] != 0 || result[1] != 0 || result[2] != 0);
|
||||
)
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(log0)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
@ -1507,41 +1466,6 @@ BOOST_AUTO_TEST_CASE(contracts_as_addresses)
|
||||
BOOST_REQUIRE(callContractFunction("getBalance()") == encodeArgs(u256(20 - 5), u256(5)));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(gaslimit)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract C {
|
||||
function f() public returns (uint) {
|
||||
return block.gaslimit;
|
||||
}
|
||||
}
|
||||
)";
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
|
||||
compileAndRun(sourceCode);
|
||||
auto result = callContractFunction("f()");
|
||||
ABI_CHECK(result, encodeArgs(gasLimit()));
|
||||
)
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(gasprice)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract C {
|
||||
function f() public returns (uint) {
|
||||
return tx.gasprice;
|
||||
}
|
||||
}
|
||||
)";
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
|
||||
compileAndRun(sourceCode);
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(gasPrice()));
|
||||
)
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(blockhash)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
|
11
test/libsolidity/semanticTests/state/block_coinbase.sol
Normal file
11
test/libsolidity/semanticTests/state/block_coinbase.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (address payable) {
|
||||
return block.coinbase;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x7878787878787878787878787878787878787878
|
||||
// f() -> 0x7878787878787878787878787878787878787878
|
||||
// f() -> 0x7878787878787878787878787878787878787878
|
11
test/libsolidity/semanticTests/state/block_difficulty.sol
Normal file
11
test/libsolidity/semanticTests/state/block_difficulty.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (uint) {
|
||||
return block.difficulty;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 200000000
|
||||
// f() -> 200000000
|
||||
// f() -> 200000000
|
11
test/libsolidity/semanticTests/state/block_gaslimit.sol
Normal file
11
test/libsolidity/semanticTests/state/block_gaslimit.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (uint) {
|
||||
return block.gaslimit;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 20000000
|
||||
// f() -> 20000000
|
||||
// f() -> 20000000
|
12
test/libsolidity/semanticTests/state/block_number.sol
Normal file
12
test/libsolidity/semanticTests/state/block_number.sol
Normal file
@ -0,0 +1,12 @@
|
||||
contract C {
|
||||
constructor() {}
|
||||
function f() public returns (uint) {
|
||||
return block.number;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor()
|
||||
// f() -> 2
|
||||
// f() -> 3
|
12
test/libsolidity/semanticTests/state/block_timestamp.sol
Normal file
12
test/libsolidity/semanticTests/state/block_timestamp.sol
Normal file
@ -0,0 +1,12 @@
|
||||
contract C {
|
||||
constructor() {}
|
||||
function f() public returns (uint) {
|
||||
return block.timestamp;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor() # This is the 1st block #
|
||||
// f() -> 0x1e # This is the 2nd block (each block is "15 seconds") #
|
||||
// f() -> 0x2d # This is the 3rd block #
|
23
test/libsolidity/semanticTests/state/blockhash_basic.sol
Normal file
23
test/libsolidity/semanticTests/state/blockhash_basic.sol
Normal file
@ -0,0 +1,23 @@
|
||||
contract C {
|
||||
bytes32 public genesisHash;
|
||||
bytes32 public currentHash;
|
||||
constructor() {
|
||||
require(block.number == 1);
|
||||
genesisHash = blockhash(0);
|
||||
currentHash = blockhash(1);
|
||||
}
|
||||
function f(uint blockNumber) public returns (bytes32) {
|
||||
return blockhash(blockNumber);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor()
|
||||
// genesisHash() -> 0x3737373737373737373737373737373737373737373737373737373737373737
|
||||
// currentHash() -> 0
|
||||
// f(uint256): 0 -> 0x3737373737373737373737373737373737373737373737373737373737373737
|
||||
// f(uint256): 1 -> 0x3737373737373737373737373737373737373737373737373737373737373738
|
||||
// f(uint256): 255 -> 0x00
|
||||
// f(uint256): 256 -> 0x00
|
||||
// f(uint256): 257 -> 0x00
|
11
test/libsolidity/semanticTests/state/gasleft.sol
Normal file
11
test/libsolidity/semanticTests/state/gasleft.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (bool) {
|
||||
return gasleft() > 0;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> true
|
||||
// f() -> true
|
||||
// f() -> true
|
13
test/libsolidity/semanticTests/state/msg_data.sol
Normal file
13
test/libsolidity/semanticTests/state/msg_data.sol
Normal file
@ -0,0 +1,13 @@
|
||||
contract C {
|
||||
function f() public returns (bytes calldata) {
|
||||
return msg.data;
|
||||
}
|
||||
function g(uint,bool) public returns (bytes calldata) {
|
||||
return msg.data;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x20, 4, 17219911917854084299749778639755835327755045716242581057573779540915269926912
|
||||
// g(uint256,bool): 1234, true -> 0x20, 0x44, 35691323728519381642872894128098848782337736632589179916067422734266033766400, 33268574187263889506619096617382224251268236217415066441681855047532544, 26959946667150639794667015087019630673637144422540572481103610249216
|
9
test/libsolidity/semanticTests/state/msg_sender.sol
Normal file
9
test/libsolidity/semanticTests/state/msg_sender.sol
Normal file
@ -0,0 +1,9 @@
|
||||
contract C {
|
||||
function f() public returns (address payable) {
|
||||
return msg.sender;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x1212121212121212121212121212120000000012
|
13
test/libsolidity/semanticTests/state/msg_sig.sol
Normal file
13
test/libsolidity/semanticTests/state/msg_sig.sol
Normal file
@ -0,0 +1,13 @@
|
||||
contract C {
|
||||
function f() public returns (bytes4) {
|
||||
return msg.sig;
|
||||
}
|
||||
function g() public returns (bytes4) {
|
||||
return msg.sig;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x26121ff000000000000000000000000000000000000000000000000000000000
|
||||
// g() -> 0xe2179b8e00000000000000000000000000000000000000000000000000000000
|
10
test/libsolidity/semanticTests/state/msg_value.sol
Normal file
10
test/libsolidity/semanticTests/state/msg_value.sol
Normal file
@ -0,0 +1,10 @@
|
||||
contract C {
|
||||
function f() public payable returns (uint) {
|
||||
return msg.value;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0
|
||||
// f(), 12 ether -> 12000000000000000000
|
11
test/libsolidity/semanticTests/state/tx_gasprice.sol
Normal file
11
test/libsolidity/semanticTests/state/tx_gasprice.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (uint) {
|
||||
return tx.gasprice;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 3000000000
|
||||
// f() -> 3000000000
|
||||
// f() -> 3000000000
|
11
test/libsolidity/semanticTests/state/tx_origin.sol
Normal file
11
test/libsolidity/semanticTests/state/tx_origin.sol
Normal file
@ -0,0 +1,11 @@
|
||||
contract C {
|
||||
function f() public returns (address payable) {
|
||||
return tx.origin;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x9292929292929292929292929292929292929292
|
||||
// f() -> 0x9292929292929292929292929292929292929292
|
||||
// f() -> 0x9292929292929292929292929292929292929292
|
@ -0,0 +1,9 @@
|
||||
contract C {
|
||||
function f() public returns (bytes32) {
|
||||
return (blockhash)(block.number - 1);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 0x3737373737373737373737373737373737373737373737373737373737373738
|
16
test/libsolidity/syntaxTests/types/magic_block.sol
Normal file
16
test/libsolidity/syntaxTests/types/magic_block.sol
Normal file
@ -0,0 +1,16 @@
|
||||
contract C {
|
||||
function f() public view returns (address payable) {
|
||||
return block.coinbase;
|
||||
}
|
||||
function g() public view returns (uint) {
|
||||
return block.difficulty;
|
||||
}
|
||||
function h() public view returns (uint) {
|
||||
return block.gaslimit;
|
||||
}
|
||||
function i() public view returns (uint) {
|
||||
return block.timestamp;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: <istanbul
|
16
test/libsolidity/syntaxTests/types/magic_block_istanbul.sol
Normal file
16
test/libsolidity/syntaxTests/types/magic_block_istanbul.sol
Normal file
@ -0,0 +1,16 @@
|
||||
contract C {
|
||||
function f() public view returns (address payable) {
|
||||
return block.coinbase;
|
||||
}
|
||||
function g() public view returns (uint) {
|
||||
return block.difficulty;
|
||||
}
|
||||
function h() public view returns (uint) {
|
||||
return block.gaslimit;
|
||||
}
|
||||
function i() public view returns (uint) {
|
||||
return block.timestamp;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// EVMVersion: >=istanbul
|
Loading…
Reference in New Issue
Block a user