Skip to content

Commit

Permalink
simplify Echidna variable generation
Browse files Browse the repository at this point in the history
  • Loading branch information
tuturu-tech committed Feb 6, 2024
1 parent a70083c commit 0ea7692
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 65 deletions.
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

0 comments on commit 0ea7692

Please sign in to comment.