mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
- added functionality to set values to 0 when deleting structure(not for mapping)
- added unit test Made some changes after Christian`s review on pull request - remove/edit comments - BoolType and ContractType return VoidType after delete - fixed constructor_arguments test - fixed set to 0 when deleting variable from stack - changed test case to test that
This commit is contained in:
parent
f8f1ec30f4
commit
3b7fff5389
@ -772,6 +772,67 @@ 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;
|
||||||
|
uint v = 5;
|
||||||
|
delete v;
|
||||||
|
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(constructor)
|
BOOST_AUTO_TEST_CASE(constructor)
|
||||||
{
|
{
|
||||||
char const* sourceCode = "contract test {\n"
|
char const* sourceCode = "contract test {\n"
|
||||||
@ -1243,6 +1304,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