diff --git a/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_elementary.sol b/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_elementary.sol new file mode 100644 index 000000000..d7b9db30b --- /dev/null +++ b/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_elementary.sol @@ -0,0 +1,37 @@ +// a test to compare the cost between using user defined value types and elementary type. See the +// test zero_cost_abstraction_userdefined.sol for a comparison. + +pragma abicoder v2; + +contract C { + int x; + function setX(int _x) external { + x = _x; + } + function getX() view external returns (int) { + return x; + } + function add(int a, int b) view external returns (int) { + return a + b; + } +} + +// ==== +// compileViaYul: also +// ---- +// getX() -> 0 +// gas irOptimized: 23353 +// gas legacy: 23479 +// gas legacyOptimized: 23311 +// setX(int256): 5 -> +// gas irOptimized: 43511 +// gas legacy: 43724 +// gas legacyOptimized: 43516 +// getX() -> 5 +// gas irOptimized: 23353 +// gas legacy: 23479 +// gas legacyOptimized: 23311 +// add(int256,int256): 200, 99 -> 299 +// gas irOptimized: 21794 +// gas legacy: 22394 +// gas legacyOptimized: 21813 diff --git a/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_userdefined.sol b/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_userdefined.sol new file mode 100644 index 000000000..29038a861 --- /dev/null +++ b/test/libsolidity/semanticTests/userDefinedValueType/zero_cost_abstraction_comparison_userdefined.sol @@ -0,0 +1,38 @@ +// a test to compare the cost between using user defined value types and elementary type. See the +// test zero_cost_abstraction_elementary.sol for comparison. + +pragma abicoder v2; + +type MyInt is int; +contract C { + int x; + function setX(MyInt _x) external { + x = MyInt.unwrap(_x); + } + function getX() view external returns (MyInt) { + return MyInt.wrap(x); + } + function add(MyInt a, MyInt b) pure external returns(MyInt) { + return MyInt.wrap(MyInt.unwrap(a) + MyInt.unwrap(b)); + } +} + +// ==== +// compileViaYul: also +// ---- +// getX() -> 0 +// gas irOptimized: 23353 +// gas legacy: 23608 +// gas legacyOptimized: 23311 +// setX(int256): 5 -> +// gas irOptimized: 43511 +// gas legacy: 43724 +// gas legacyOptimized: 43516 +// getX() -> 5 +// gas irOptimized: 23353 +// gas legacy: 23608 +// gas legacyOptimized: 23311 +// add(int256,int256): 200, 99 -> 299 +// gas irOptimized: 21794 +// gas legacy: 22523 +// gas legacyOptimized: 21813