 0b387e767e
			
		
	
	
		0b387e767e
		
			
		
	
	
	
	
		
			
			Calculation engine was resolving every function by first resolving its arguments including IFs, this was causing significant over evaluation when IFs were used as it meant for every case to be evaluated. Introduce elements to identify ifs and enable better branch resolution (pruning). We tag parsed tokens to associate a branch identifier to them. Closes #844
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| function calculationTestDataGenerator()
 | |
| {
 | |
|     $dataArray1 = [
 | |
|         ['please +', 'please *', 'increment'],
 | |
|         [1, 1, 1], // sum is 3
 | |
|         [3, 3, 3], // product is 27
 | |
|     ];
 | |
|     $set0 = [3, $dataArray1, '=IF(A1="please +", SUM(A2:C2), 2)', 'E5'];
 | |
| 
 | |
|     $set1 = [3, $dataArray1, '=IF(TRUE(), SUM(A2:C2), 2)', 'E5'];
 | |
| 
 | |
|     $formula1 = '=IF(A1="please +",SUM(A2:C2),7 + IF(B1="please *", 4, 2))';
 | |
|     $set2 = [3, $dataArray1, $formula1, 'E5'];
 | |
| 
 | |
|     $originalDataArray = $dataArray1;
 | |
| 
 | |
|     $dataArray1[0][0] = 'not please + something else';
 | |
|     $set3 = [11, $dataArray1, $formula1, 'E5'];
 | |
| 
 | |
|     $dataArray2 = [
 | |
|         ['flag1', 'flag2', 'flag3', 'flag1'],
 | |
|         [1, 2, 3, 4],
 | |
|         [5, 6, 7, 8],
 | |
|     ];
 | |
|     $set4 = [3, $dataArray2, '=IF($A$1=$B$1,A2,IF($A$1=$C$1,B2,IF($A$1=$D$1,C2,C3)))', 'E5'];
 | |
| 
 | |
|     $dataArray2[0][0] = 'flag3';
 | |
|     $set5 = [2, $dataArray2, '=IF(A1=B1,A2,IF(A1=C1,B2,IF(A1=D1,C2,C3)))', 'E5'];
 | |
| 
 | |
|     $dataArray3 = [
 | |
|         [1, 2, 3],
 | |
|         [4, 5, 6],
 | |
|         [7, 8, 9],
 | |
|     ];
 | |
|     $set6 = [0, $dataArray3, '=IF(A1+B1>3,C1,0)', 'E5'];
 | |
| 
 | |
|     $dataArray4 = [
 | |
|         ['noflag',    0, 0],
 | |
|         [127000,    0, 0],
 | |
|         [ 10000,  0.03, 0],
 | |
|         [ 20000,  0.06, 0],
 | |
|         [ 40000,  0.09, 0],
 | |
|         [ 70000,  0.12, 0],
 | |
|         [ 90000,  0.03, 0]
 | |
|     ];
 | |
|     $formula2 = '=IF(A1="flag",IF(A2<10, 0) + IF(A3<10000, 0))';
 | |
|     $set7 = [false, $dataArray4, $formula2, 'E5'];
 | |
| 
 | |
|     $dataArray5 = [
 | |
|         [1, 2],
 | |
|         [3, 4],
 | |
|         ['=A1+A2', '=SUM(B1:B2)'],
 | |
|         [ 'take A', 0]
 | |
|     ];
 | |
|     $formula3 = '=IF(A4="take A", A3, B3)';
 | |
|     $set8 = [4, $dataArray5, $formula3, 'E5', ['A3'], ['B3']];
 | |
| 
 | |
|     return [$set0, $set1, $set2, $set3, $set4, $set5, $set6, $set7, $set8];
 | |
| };
 | |
| 
 | |
| return calculationTestDataGenerator();
 |