mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Test with high path complexity.
This commit is contained in:
		
							parent
							
								
									fba7e055d9
								
							
						
					
					
						commit
						bbae4fb0ef
					
				| @ -307,6 +307,46 @@ BOOST_AUTO_TEST_CASE(regular_functions_exclude_fallback) | ||||
| 	testCreationTimeGas(sourceCode); | ||||
| 	testRunTimeGas("x()", vector<bytes>{encodeArgs()}); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(complex_control_flow) | ||||
| { | ||||
| 	// This crashed the gas estimator previously (or took a very long time).
 | ||||
| 	// Now we do not follow branches if they start out with lower gas costs than the ones
 | ||||
| 	// we previously considered. This of course reduces accuracy.
 | ||||
| 	char const* sourceCode = R"( | ||||
| 		contract log { | ||||
| 			function ln(int128 x) constant returns (int128 result) { | ||||
| 				int128 t = x / 256; | ||||
| 				int128 y = 5545177; | ||||
| 				x = t; | ||||
| 				t = x * 16; if (t <= 1000000) { x = t; y = y - 2772588; } | ||||
| 				t = x * 4; if (t <= 1000000) { x = t; y = y - 1386294; } | ||||
| 				t = x * 2; if (t <= 1000000) { x = t; y = y - 693147; } | ||||
| 				t = x + x / 2; if (t <= 1000000) { x = t; y = y - 405465; } | ||||
| 				t = x + x / 4; if (t <= 1000000) { x = t; y = y - 223144; } | ||||
| 				t = x + x / 8; if (t <= 1000000) { x = t; y = y - 117783; } | ||||
| 				t = x + x / 16; if (t <= 1000000) { x = t; y = y - 60624; } | ||||
| 				t = x + x / 32; if (t <= 1000000) { x = t; y = y - 30771; } | ||||
| 				t = x + x / 64; if (t <= 1000000) { x = t; y = y - 15504; } | ||||
| 				t = x + x / 128; if (t <= 1000000) { x = t; y = y - 7782; } | ||||
| 				t = x + x / 256; if (t <= 1000000) { x = t; y = y - 3898; } | ||||
| 				t = x + x / 512; if (t <= 1000000) { x = t; y = y - 1951; } | ||||
| 				t = x + x / 1024; if (t <= 1000000) { x = t; y = y - 976; } | ||||
| 				t = x + x / 2048; if (t <= 1000000) { x = t; y = y - 488; } | ||||
| 				t = x + x / 4096; if (t <= 1000000) { x = t; y = y - 244; } | ||||
| 				t = x + x / 8192; if (t <= 1000000) { x = t; y = y - 122; } | ||||
| 				t = x + x / 16384; if (t <= 1000000) { x = t; y = y - 61; } | ||||
| 				t = x + x / 32768; if (t <= 1000000) { x = t; y = y - 31; } | ||||
| 				t = x + x / 65536; if (t <= 1000000) { y = y - 15; } | ||||
| 				return y; | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	testCreationTimeGas(sourceCode); | ||||
| 	// max gas is used for small x
 | ||||
| 	testRunTimeGas("ln(int128)", vector<bytes>{encodeArgs(0), encodeArgs(10), encodeArgs(105), encodeArgs(30000)}); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user