mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #805 from LianaHus/deleteStruct
delete for structs -added functionality to set values to 0 when deleting structure(not for ...
This commit is contained in:
commit
ae9ec885d7
@ -772,6 +772,94 @@ BOOST_AUTO_TEST_CASE(struct_reference)
|
|||||||
BOOST_CHECK(callContractFunction("check()") == encodeArgs(true));
|
BOOST_CHECK(callContractFunction("check()") == encodeArgs(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(deleteStruct)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract test {
|
||||||
|
struct topStruct {
|
||||||
|
nestedStruct nstr;
|
||||||
|
emptyStruct empty;
|
||||||
|
uint topValue;
|
||||||
|
mapping (uint => uint) topMapping;
|
||||||
|
}
|
||||||
|
uint toDelete;
|
||||||
|
topStruct str;
|
||||||
|
struct nestedStruct {
|
||||||
|
uint nestedValue;
|
||||||
|
mapping (uint => bool) nestedMapping;
|
||||||
|
}
|
||||||
|
struct emptyStruct{
|
||||||
|
}
|
||||||
|
function test(){
|
||||||
|
toDelete = 5;
|
||||||
|
str.topValue = 1;
|
||||||
|
str.topMapping[0] = 1;
|
||||||
|
str.topMapping[1] = 2;
|
||||||
|
|
||||||
|
str.nstr.nestedValue = 2;
|
||||||
|
str.nstr.nestedMapping[0] = true;
|
||||||
|
str.nstr.nestedMapping[1] = false;
|
||||||
|
delete str;
|
||||||
|
delete toDelete;
|
||||||
|
}
|
||||||
|
function getToDelete() returns (uint res){
|
||||||
|
res = toDelete;
|
||||||
|
}
|
||||||
|
function getTopValue() returns(uint topValue){
|
||||||
|
topValue = str.topValue;
|
||||||
|
}
|
||||||
|
function getNestedValue() returns(uint nestedValue){
|
||||||
|
nestedValue = str.nstr.nestedValue;
|
||||||
|
}
|
||||||
|
function getTopMapping(uint index) returns(uint ret) {
|
||||||
|
ret = str.topMapping[index];
|
||||||
|
}
|
||||||
|
function getNestedMapping(uint index) returns(bool ret) {
|
||||||
|
return str.nstr.nestedMapping[index];
|
||||||
|
}
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("getToDelete()") == encodeArgs(0));
|
||||||
|
BOOST_CHECK(callContractFunction("getTopValue()") == encodeArgs(0));
|
||||||
|
BOOST_CHECK(callContractFunction("getNestedValue()") == encodeArgs(0));
|
||||||
|
// mapping values should be the same
|
||||||
|
BOOST_CHECK(callContractFunction("getTopMapping(uint256)", 0) == encodeArgs(1));
|
||||||
|
BOOST_CHECK(callContractFunction("getTopMapping(uint256)", 1) == encodeArgs(2));
|
||||||
|
BOOST_CHECK(callContractFunction("getNestedMapping(uint256)", 0) == encodeArgs(true));
|
||||||
|
BOOST_CHECK(callContractFunction("getNestedMapping(uint256)", 1) == encodeArgs(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(deleteLocal)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract test {
|
||||||
|
function delLocal() returns (uint res){
|
||||||
|
uint v = 5;
|
||||||
|
delete v;
|
||||||
|
res = v;
|
||||||
|
}
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("delLocal()") == encodeArgs(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(deleteLocals)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract test {
|
||||||
|
function delLocal() returns (uint res1, uint res2){
|
||||||
|
uint v = 5;
|
||||||
|
uint w = 6;
|
||||||
|
uint x = 7;
|
||||||
|
delete v;
|
||||||
|
res1 = w;
|
||||||
|
res2 = x;
|
||||||
|
}
|
||||||
|
})";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("delLocal()") == encodeArgs(6, 7));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(constructor)
|
BOOST_AUTO_TEST_CASE(constructor)
|
||||||
{
|
{
|
||||||
char const* sourceCode = "contract test {\n"
|
char const* sourceCode = "contract test {\n"
|
||||||
@ -1243,6 +1331,7 @@ BOOST_AUTO_TEST_CASE(constructor_arguments)
|
|||||||
contract Helper {
|
contract Helper {
|
||||||
string3 name;
|
string3 name;
|
||||||
bool flag;
|
bool flag;
|
||||||
|
|
||||||
function Helper(string3 x, bool f) {
|
function Helper(string3 x, bool f) {
|
||||||
name = x;
|
name = x;
|
||||||
flag = f;
|
flag = f;
|
||||||
|
Loading…
Reference in New Issue
Block a user