|
2 | 2 | pragma solidity ^0.8.4; |
3 | 3 |
|
4 | 4 | import {MemoryUtils} from "../../../libs/utils/MemoryUtils.sol"; |
| 5 | +import {TypeCaster} from "../../../libs/utils/TypeCaster.sol"; |
5 | 6 |
|
6 | 7 | contract MemoryUtilsMock { |
| 8 | + using TypeCaster for *; |
7 | 9 | using MemoryUtils for *; |
8 | 10 |
|
9 | | - function testStringMemoryCopy(string memory data_) external view { |
10 | | - string memory someString = new string(bytes(data_).length); |
| 11 | + function testBytesMemoryCopy(bytes memory data_) external view { |
| 12 | + bytes memory someBytes_ = new bytes(data_.length); |
11 | 13 |
|
12 | 14 | require( |
13 | | - keccak256(bytes(data_)) != keccak256(bytes(someString)), |
14 | | - "MemoryUtilsMock: testStringMemoryCopy failed. Initial data and someString are equal" |
| 15 | + keccak256(data_) != keccak256(someBytes_), |
| 16 | + "MemoryUtilsMock: testBytesMemoryCopy failed. Initial data and someBytes are equal" |
15 | 17 | ); |
16 | 18 |
|
17 | | - someString = data_.copy(); |
| 19 | + someBytes_ = data_.copy(); |
18 | 20 |
|
19 | 21 | require( |
20 | | - keccak256(bytes(data_)) == keccak256(bytes(someString)), |
21 | | - "MemoryUtilsMock: testStringMemoryCopy failed. Initial data and someString are not equal" |
| 22 | + keccak256(data_) == keccak256(someBytes_), |
| 23 | + "MemoryUtilsMock: testBytesMemoryCopy failed. Initial data and someBytes are not equal" |
22 | 24 | ); |
23 | 25 | } |
24 | 26 |
|
25 | | - function testBytesMemoryCopy(bytes memory data_) external view { |
26 | | - bytes memory someBytes = new bytes(data_.length); |
| 27 | + function testBytes32MemoryCopy(bytes32[] memory data_) external view { |
| 28 | + bytes32[] memory someBytes_ = new bytes32[](data_.length); |
27 | 29 |
|
28 | 30 | require( |
29 | | - keccak256(data_) != keccak256(someBytes), |
30 | | - "MemoryUtilsMock: testBytesMemoryCopy failed. Initial data and someBytes are equal" |
| 31 | + keccak256(abi.encode(data_)) != keccak256(abi.encode(someBytes_)), |
| 32 | + "MemoryUtilsMock: testBytes32MemoryCopy failed. Initial data and someBytes are equal" |
31 | 33 | ); |
32 | 34 |
|
33 | | - someBytes = data_.copy(); |
| 35 | + someBytes_ = data_.copy(); |
34 | 36 |
|
35 | 37 | require( |
36 | | - keccak256(data_) == keccak256(someBytes), |
37 | | - "MemoryUtilsMock: testBytesMemoryCopy failed. Initial data and someBytes are not equal" |
| 38 | + keccak256(abi.encode(data_)) == keccak256(abi.encode(someBytes_)), |
| 39 | + "MemoryUtilsMock: testBytes32MemoryCopy failed. Initial data and someBytes are not equal" |
38 | 40 | ); |
39 | 41 | } |
40 | 42 |
|
41 | 43 | function testUnsafeMemoryCopy(bytes memory data_) external view { |
42 | | - bytes memory someBytes = new bytes(data_.length); |
| 44 | + bytes memory someBytes_ = new bytes(data_.length); |
43 | 45 |
|
44 | 46 | require( |
45 | | - keccak256(data_) != keccak256(someBytes), |
| 47 | + keccak256(data_) != keccak256(someBytes_), |
46 | 48 | "MemoryUtilsMock: testBigMemory failed. Initial data and someBytes are equal" |
47 | 49 | ); |
48 | 50 |
|
49 | | - MemoryUtils.unsafeMemoryCopy( |
50 | | - MemoryUtils.getPointer(someBytes), |
51 | | - MemoryUtils.getPointer(data_), |
52 | | - someBytes.length |
| 51 | + MemoryUtils.unsafeCopy( |
| 52 | + MemoryUtils.getDataPointer(someBytes_), |
| 53 | + MemoryUtils.getDataPointer(data_), |
| 54 | + someBytes_.length |
53 | 55 | ); |
54 | 56 |
|
55 | 57 | require( |
56 | | - keccak256(data_) == keccak256(someBytes), |
| 58 | + keccak256(data_) == keccak256(someBytes_), |
57 | 59 | "MemoryUtilsMock: testBigMemory failed. Initial data and someBytes are not equal" |
58 | 60 | ); |
59 | 61 | } |
60 | 62 |
|
61 | 63 | function testPartialCopy(bytes memory data_) external view { |
62 | | - bytes memory someBytes = new bytes(data_.length / 2); |
| 64 | + bytes memory someBytes_ = new bytes(data_.length / 2); |
63 | 65 |
|
64 | 66 | require( |
65 | | - keccak256(data_) != keccak256(someBytes), |
| 67 | + keccak256(data_) != keccak256(someBytes_), |
66 | 68 | "MemoryUtilsMock: testPartialCopy failed. Initial data and someBytes are equal" |
67 | 69 | ); |
68 | 70 |
|
69 | | - MemoryUtils.unsafeMemoryCopy( |
70 | | - MemoryUtils.getPointer(someBytes), |
71 | | - MemoryUtils.getPointer(data_), |
72 | | - someBytes.length |
| 71 | + MemoryUtils.unsafeCopy( |
| 72 | + MemoryUtils.getDataPointer(someBytes_), |
| 73 | + MemoryUtils.getDataPointer(data_), |
| 74 | + someBytes_.length |
73 | 75 | ); |
74 | 76 |
|
75 | | - for (uint256 i = 0; i < someBytes.length; i++) { |
| 77 | + for (uint256 i = 0; i < someBytes_.length; i++) { |
76 | 78 | require( |
77 | | - someBytes[i] == data_[i], |
| 79 | + someBytes_[i] == data_[i], |
78 | 80 | "MemoryUtilsMock: testPartialCopy failed. Initial data and someBytes are not equal" |
79 | 81 | ); |
80 | 82 | } |
81 | 83 | } |
| 84 | + |
| 85 | + /** |
| 86 | + * @dev Since the underlying logic of `getPointer()/getDataPointer()` is only specific to EVMs, |
| 87 | + * we only do a simple mock test for coverage. |
| 88 | + */ |
| 89 | + function testForCoverage() external pure { |
| 90 | + MemoryUtils.getPointer(new bytes(1)); |
| 91 | + MemoryUtils.getPointer((new uint256[](1)).asBytes32Array()); |
| 92 | + |
| 93 | + MemoryUtils.getDataPointer(new bytes(1)); |
| 94 | + MemoryUtils.getDataPointer((new uint256[](1)).asBytes32Array()); |
| 95 | + } |
82 | 96 | } |
0 commit comments