mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Added tests covering empty string, uninitialized string, emptry string literal, byte arrays and explicit call to `abi.encode`.
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| contract C {
 | |
| 
 | |
|     string uninitializedString;
 | |
|     string emptyString = "";
 | |
|     string nonEmptyString = "This is a non empty string";
 | |
|     string nonEmptyString2 = "Another string";
 | |
|     bytes uninitializedBytes;
 | |
|     bytes emptyBytes = "";
 | |
|     error EmptyError(string);
 | |
|     event EmptyEvent(string);
 | |
| 
 | |
|     function f() public returns (string memory) {
 | |
|         return uninitializedString;
 | |
|     }
 | |
| 
 | |
|     function g() public returns (string memory, string memory) {
 | |
|         return (uninitializedString, emptyString);
 | |
|     }
 | |
| 
 | |
|     function h() public returns (string memory, string memory) {
 | |
|         return (uninitializedString, nonEmptyString);
 | |
|     }
 | |
| 
 | |
|     function i() public returns (string memory, string memory) {
 | |
|         return (nonEmptyString, emptyString);
 | |
|     }
 | |
| 
 | |
|     function j(string calldata _s) public returns (string memory) {
 | |
|         return _s;
 | |
|     }
 | |
| 
 | |
|     function k() public returns (string memory) {
 | |
|         nonEmptyString2 = "";
 | |
|         return nonEmptyString2;
 | |
|     }
 | |
| 
 | |
|     function l(string calldata _s) public returns (bytes memory) {
 | |
|         return abi.encode(_s);
 | |
|     }
 | |
| 
 | |
|     function m() public returns (string memory) {
 | |
|         bytes memory b = abi.encode(emptyString);
 | |
|         return string(b);
 | |
|     }
 | |
| 
 | |
|     function n() public {
 | |
|         revert EmptyError(uninitializedString);
 | |
|     }
 | |
| 
 | |
|     function o() public {
 | |
|         emit EmptyEvent(emptyString);
 | |
|     }
 | |
| 
 | |
|     function p() public {
 | |
|         emit EmptyEvent("");
 | |
|     }
 | |
| 
 | |
|     function q() public returns (bytes memory) {
 | |
|         return uninitializedBytes;
 | |
|     }
 | |
| 
 | |
|     function r() public returns (bytes memory) {
 | |
|         emptyBytes = abi.encode("");
 | |
|         return emptyBytes;
 | |
|     }
 | |
| 
 | |
|     function s() public returns (bytes memory) {
 | |
|         emptyBytes = abi.encode(uninitializedString);
 | |
|         return emptyBytes;
 | |
|     }
 | |
| 
 | |
|     function set(string calldata _s) public {
 | |
|         nonEmptyString = _s;
 | |
|     }
 | |
| 
 | |
|     function get() public returns (string memory) {
 | |
|         return nonEmptyString;
 | |
|     }
 | |
| }
 | |
| // ====
 | |
| // compileViaYul: also
 | |
| // ----
 | |
| // f() -> 0x20, 0
 | |
| // g() -> 0x40, 0x60, 0, 0
 | |
| // h() -> 0x40, 0x60, 0, 0x1a, 38178759162904981154304545770567765692299154484752076569098748838215919075328
 | |
| // i() -> 0x40, 0x80, 0x1a, 38178759162904981154304545770567765692299154484752076569098748838215919075328, 0
 | |
| // j(string): 0x20, 0, "" -> 0x20, 0
 | |
| // k() -> 0x20, 0
 | |
| // l(string): 0x20, 0, "" -> 0x20, 0x40, 0x20, 0
 | |
| // m() -> 0x20, 0x40, 0x20, 0
 | |
| // n() -> FAILURE, hex"d3f13430", hex"0000000000000000000000000000000000000000000000000000000000000020", hex"0000000000000000000000000000000000000000000000000000000000000000"
 | |
| // o() ->
 | |
| // ~ emit EmptyEvent(string): 0x20, 0x00
 | |
| // p() ->
 | |
| // ~ emit EmptyEvent(string): 0x20, 0x00
 | |
| // q() -> 0x20, 0
 | |
| // r() -> 0x20, 0x40, 0x20, 0
 | |
| // s() -> 0x20, 0x40, 0x20, 0
 | |
| // set(string): 0x20, 0, "" ->
 | |
| // get() -> 0x20, 0
 |