Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify Echidna variable generation #9

Merged
merged 1 commit into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 9 additions & 29 deletions test_generator/fuzzers/Echidna.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ def _match_array_type(
definitions, func_params = self._decode_function_params(
param["contents"][1], True, input_parameter
)
name, var_def = self._get_memarr(param["contents"], index) # type: ignore[unpacking-non-sequence]
name, var_def = self._get_memarr(param["contents"], index, input_parameter) # type: ignore[unpacking-non-sequence]
definitions += var_def

for idx, temp_param in enumerate(func_params):
Expand Down Expand Up @@ -263,32 +263,12 @@ def _decode_function_params(
return "", params

# pylint: disable=R0201
def _get_memarr(self, function_params: dict, index: int) -> tuple[str, str]:
def _get_memarr(
self, function_params: dict, index: int, input_parameter: Any
) -> tuple[str, str]:
length = len(function_params[1])
match function_params[0]["tag"]:
case "AbiBoolType":
name = f"dynBoolArr_{index}"
return name, f"bool[] memory {name} = new bool[]({length});\n"
case "AbiIntType":
name = f"dynIntArr_{index}"
return (
name,
f"int{function_params[0]['contents']}[] memory {name} = new int{function_params[0]['contents']}[]({length});\n",
)
case "AbiUIntType":
name = f"dynUintArr_{index}"
return (
name,
f"uint{function_params[0]['contents']}[] memory {name} = new uint{function_params[0]['contents']}[]({length});\n",
)
case "AbiAddressType":
name = f"dynAddressArr_{index}"
return name, f"address[] memory {name} = new address[]({length});\n"
case "AbiBytesType" | "AbiBytesDynamicType":
name = f"dynBytesArr_{index}"
return name, f"bytes[] memory {name} = new bytes[]({length});\n"
case "AbiStringType":
name = f"dynStringArr_{index}"
return name, f"string[] memory {name} = new string[]({length});\n"
case _:
return "", ""

input_type = input_parameter.type
name = f"dyn{input_type}Arr_{index}"
declaration = f"{input_type}[] memory {name} = new {input_type}[]({length});\n"
return name, declaration
66 changes: 33 additions & 33 deletions tests/test_data/test/DynamicArrays_Echidna_Test.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,73 +11,73 @@ contract DynamicArrays_Echidna_Test is Test {
target = new DynamicArrays();
}
function test_auto_check_bytesArr_0() public {
bytes[] memory dynBytesArr_0 = new bytes[](4);
dynBytesArr_0[0] = bytes(hex"00");
dynBytesArr_0[1] = bytes(hex"00");
dynBytesArr_0[2] = bytes(hex"00");
dynBytesArr_0[3] = bytes(hex"00");
bytes[] memory dynbytesArr_0 = new bytes[](4);
dynbytesArr_0[0] = bytes(hex"00");
dynbytesArr_0[1] = bytes(hex"00");
dynbytesArr_0[2] = bytes(hex"00");
dynbytesArr_0[3] = bytes(hex"00");

vm.prank(0x0000000000000000000000000000000000010000);
target.addBytesArr(dynBytesArr_0);
target.addBytesArr(dynbytesArr_0);

vm.prank(0x0000000000000000000000000000000000010000);
target.check_bytesArr();
}

function test_auto_check_addressDynArr_1() public {
address[] memory dynAddressArr_0 = new address[](8);
dynAddressArr_0[0] = 0x00000000000000000000000000000000DeaDBeef;
dynAddressArr_0[1] = 0x00000000000000000000000000000000DeaDBeef;
dynAddressArr_0[2] = 0x0000000000000000000000000000000000000000;
dynAddressArr_0[3] = 0x0000000000000000000000000000000000000000;
dynAddressArr_0[4] = 0x00000000000000000000000000000000DeaDBeef;
dynAddressArr_0[5] = 0x0000000000000000000000000000000000000000;
dynAddressArr_0[6] = 0x0000000000000000000000000000000000000000;
dynAddressArr_0[7] = 0x00000000000000000000000000000000DeaDBeef;
address[] memory dynaddressArr_0 = new address[](8);
dynaddressArr_0[0] = 0x00000000000000000000000000000000DeaDBeef;
dynaddressArr_0[1] = 0x00000000000000000000000000000000DeaDBeef;
dynaddressArr_0[2] = 0x0000000000000000000000000000000000000000;
dynaddressArr_0[3] = 0x0000000000000000000000000000000000000000;
dynaddressArr_0[4] = 0x00000000000000000000000000000000DeaDBeef;
dynaddressArr_0[5] = 0x0000000000000000000000000000000000000000;
dynaddressArr_0[6] = 0x0000000000000000000000000000000000000000;
dynaddressArr_0[7] = 0x00000000000000000000000000000000DeaDBeef;

vm.prank(0x0000000000000000000000000000000000010000);
target.addAddressArr(dynAddressArr_0);
target.addAddressArr(dynaddressArr_0);

vm.prank(0x0000000000000000000000000000000000010000);
target.check_addressDynArr();
}

function test_auto_check_boolArr_2() public {
bool[] memory dynBoolArr_0 = new bool[](6);
dynBoolArr_0[0] = true;
dynBoolArr_0[1] = false;
dynBoolArr_0[2] = true;
dynBoolArr_0[3] = false;
dynBoolArr_0[4] = true;
dynBoolArr_0[5] = true;
bool[] memory dynboolArr_0 = new bool[](6);
dynboolArr_0[0] = true;
dynboolArr_0[1] = false;
dynboolArr_0[2] = true;
dynboolArr_0[3] = false;
dynboolArr_0[4] = true;
dynboolArr_0[5] = true;

vm.prank(0x0000000000000000000000000000000000010000);
target.addBoolArr(dynBoolArr_0);
target.addBoolArr(dynboolArr_0);

vm.prank(0x0000000000000000000000000000000000010000);
target.check_boolArr();
}

function test_auto_check_intDynArr_3() public {
int256[] memory dynIntArr_0 = new int256[](1);
dynIntArr_0[0] = int256(3);
int256[] memory dynint256Arr_0 = new int256[](1);
dynint256Arr_0[0] = int256(3);

vm.prank(0x0000000000000000000000000000000000010000);
target.addIntArr(dynIntArr_0);
target.addIntArr(dynint256Arr_0);

vm.prank(0x0000000000000000000000000000000000010000);
target.check_intDynArr();
}

function test_auto_check_strDynArr_4() public {
string[] memory dynStringArr_0 = new string[](4);
dynStringArr_0[0] = string(hex"00");
dynStringArr_0[1] = string(hex"00");
dynStringArr_0[2] = string(hex"00");
dynStringArr_0[3] = string(hex"00");
string[] memory dynstringArr_0 = new string[](4);
dynstringArr_0[0] = string(hex"00");
dynstringArr_0[1] = string(hex"00");
dynstringArr_0[2] = string(hex"00");
dynstringArr_0[3] = string(hex"00");

vm.prank(0x0000000000000000000000000000000000010000);
target.addStrArr(dynStringArr_0);
target.addStrArr(dynstringArr_0);

vm.prank(0x0000000000000000000000000000000000010000);
target.check_strDynArr();
Expand Down
6 changes: 3 additions & 3 deletions tests/test_data/test/TupleTypes_Echidna_Test.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ contract TupleTypes_Echidna_Test is Test {
}

function test_auto_check_dynamicArrStruct_1() public {
uint256[] memory dynUintArr_0 = new uint256[](1);
dynUintArr_0[0] = uint256(1);
uint256[] memory dynuint256Arr_0 = new uint256[](1);
dynuint256Arr_0[0] = uint256(1);

vm.prank(0x0000000000000000000000000000000000010000);
target.updateDynArrStruct(TupleTypes.DynamicArrayStruct(dynUintArr_0));
target.updateDynArrStruct(TupleTypes.DynamicArrayStruct(dynuint256Arr_0));

vm.prank(0x0000000000000000000000000000000000010000);
target.check_dynamicArrStruct();
Expand Down
Loading