zoe Fri May 29 07:52:05 2009 UTC Added files: (Branch: PHP_5_3) /php-src/tests/lang engine_assignExecutionOrder_009.phpt engine_assignExecutionOrder_008.phpt engine_assignExecutionOrder_007.phpt engine_assignExecutionOrder_006.phpt engine_assignExecutionOrder_005.phpt engine_assignExecutionOrder_004.phpt engine_assignExecutionOrder_003.phpt engine_assignExecutionOrder_002.phpt engine_assignExecutionOrder_001.phpt Log: Engine execution order tests
http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_009.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_009.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_009.phpt --TEST-- Execution ordering with comparison operators. --FILE-- <?php function f($x) { echo "f($x) "; return $x; }
echo "Function call args:\n"; var_dump(f($i=0) < f(++$i)); var_dump(f($i=0) <= f(++$i)); var_dump(f($i=0) > f(++$i)); var_dump(f($i=0) >= f(++$i)); echo "\nArray indices:\n"; $a[1][2] = 0; $a[3][4] = 1; $i=0; var_dump($a[$i=1][++$i] < $a[++$i][++$i]); var_dump($a[$i=1][++$i] <= $a[++$i][++$i]); var_dump($a[$i=1][++$i] > $a[++$i][++$i]); var_dump($a[$i=1][++$i] >= $a[++$i][++$i]); ?> --EXPECTF-- Function call args: f(0) f(1) bool(true) f(0) f(1) bool(true) f(0) f(1) bool(false) f(0) f(1) bool(false) Array indices: bool(true) bool(true) bool(false) bool(false) http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_008.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_008.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_008.phpt --TEST-- Ensure by value assignments leave temporaries on the stack, for all sorts of assignees. --FILE-- <?php error_reporting(E_ALL & ~E_STRICT); function f() { return 0; } $a[0][1] = 'good'; $a[1][1] = 'bad'; echo "\n" . '$i=f(): '; echo $a[$i=f()][++$i]; unset($i); echo "\n" . '$$x=f(): '; $x='i'; echo $a[$$x=f()][++$$x]; unset($i, $x); echo "\n" . '${\'i\'}=f(): '; echo $a[${'i'}=f()][++${'i'}]; unset(${'i'}); echo "\n" . '$i[0]=f(): '; echo $a[$i[0]=f()][++$i[0]]; unset($i); echo "\n" . '$i[0][0]=f(): '; echo $a[$i[0][0]=f()][++$i[0][0]]; unset($i); echo "\n" . '$i->p=f(): '; echo $a[$i->p=f()][++$i->p]; unset($i); echo "\n" . '$i->p->q=f(): '; echo $a[$i->p->q=f()][++$i->p->q]; unset($i); echo "\n" . '$i->p[0]=f(): '; echo $a[$i->p[0]=f()][++$i->p[0]]; unset($i); echo "\n" . '$i->p[0]->p=f(): '; echo $a[$i->p[0]->p=f()][++$i->p[0]->p]; unset($i); Class C { static $p; } echo "\n" . 'C::$p=f(): '; echo $a[C::$p=f()][++C::$p]; echo "\n" . 'C::$p[0]=f(): '; C::$p = array(); echo $a[C::$p[0]=f()][++C::$p[0]]; echo "\n" . 'C::$p->q=f(): '; C::$p = new stdclass; echo $a[C::$p->q=f()][++C::$p->q]; ?> --EXPECTF-- $i=f(): good $$x=f(): good ${'i'}=f(): good $i[0]=f(): good $i[0][0]=f(): good $i->p=f(): good $i->p->q=f(): good $i->p[0]=f(): good $i->p[0]->p=f(): good C::$p=f(): good C::$p[0]=f(): good C::$p->q=f(): good http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_007.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_007.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_007.phpt --TEST-- Check key execution order with &new. --FILE-- <?php $a[2][3] = 'stdClass'; $a[$i=0][++$i] =& new $a[++$i][++$i]; print_r($a); $o = new stdClass; $o->a =& new $a[$i=2][++$i]; $o->a->b =& new $a[$i=2][++$i]; print_r($o); ?> --EXPECTF-- Deprecated: Assigning the return value of new by reference is deprecated in %s.php on line 3 Deprecated: Assigning the return value of new by reference is deprecated in %s.php on line 7 Deprecated: Assigning the return value of new by reference is deprecated in %s.php on line 8 Array ( [2] => Array ( [3] => stdClass ) [0] => Array ( [1] => stdClass Object ( ) ) ) stdClass Object ( [a] => stdClass Object ( [b] => stdClass Object ( ) ) ) http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_006.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_006.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_006.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php function i1() { echo "i1\n"; return 0; } function i2() { echo "i2\n"; return 0; } function i3() { echo "i3\n"; return 0; } function i4() { echo "i4\n"; return 0; } function i5() { echo "i5\n"; return 0; } function i6() { echo "i6\n"; return 0; } $a = array(array(0)); $b = array(array(1)); $c = array(array(2)); $a[i1()][i2()] = ($b[i3()][i4()] = $c[i5()][i6()]); var_dump($a); var_dump($b); var_dump($c); $a[i1()][i2()] = $b[i3()][i4()] = -$c[i5()][i6()]; var_dump($a); var_dump($b); var_dump($c); $a[i1()][i2()] = -($b[i3()][i4()] = +($c[i5()][i6()])); var_dump($a); var_dump($b); var_dump($c); ?> --EXPECT-- i1 i2 i3 i4 i5 i6 array(1) { [0]=> array(1) { [0]=> int(2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } i1 i2 i3 i4 i5 i6 array(1) { [0]=> array(1) { [0]=> int(-2) } } array(1) { [0]=> array(1) { [0]=> int(-2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } i1 i2 i3 i4 i5 i6 array(1) { [0]=> array(1) { [0]=> int(-2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_005.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_005.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_005.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php function i1() { echo "i1\n"; return 0; } function i2() { echo "i2\n"; return 0; } function i3() { echo "i3\n"; return 0; } function i4() { echo "i4\n"; return 0; } function i5() { echo "i5\n"; return 0; } function i6() { echo "i6\n"; return 0; } $a = array(array(0)); $b = array(array(1)); $c = array(array(2)); $a[i1()][i2()] = $b[i3()][i4()] = $c[i5()][i6()]; var_dump($a); var_dump($b); var_dump($c); ?> --EXPECT-- i1 i2 i3 i4 i5 i6 array(1) { [0]=> array(1) { [0]=> int(2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } array(1) { [0]=> array(1) { [0]=> int(2) } } http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_004.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_004.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_004.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php function i1() { echo "i1\n"; return 1; } function i2() { echo "i2\n"; return 1; } function i3() { echo "i3\n"; return 3; } function i4() { global $a; $a = array(10, 11, 12, 13, 14); echo "i4\n"; return 4; } $a = 0; // $a should not be indexable till the i4 has been executed list($a[i1()+i2()], , list($a[i3()], $a[i4()]), $a[]) = array (0, 1, array(30, 40), 3, 4); var_dump($a); ?> --EXPECT-- i1 i2 i3 i4 array(6) { [0]=> int(10) [1]=> int(11) [2]=> int(0) [3]=> int(30) [4]=> int(40) [5]=> int(3) } http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_003.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_003.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_003.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php $b = "bb"; $a = "aa"; function foo() { echo "Bad call\n"; } function baa() { echo "Good call\n"; } $bb = "baa"; $aa = "foo"; $c = ${$a=$b}; $c(); $a1 = array("dead","dead","dead"); $a2 = array("dead","dead","live"); $a3 = array("dead","dead","dead"); $a = array($a1,$a2,$a3); function live() { echo "Good call\n"; } function dead() { echo "Bad call\n"; } $i = 0; $a[$i=1][++$i](); $a = -1; function foo1() { global $a; return ++$a; } $arr = array(array(0,0),0); $brr = array(0,0,array(0,0,0,5),0); $crr = array(0,0,0,0,array(0,0,0,0,0,10),0,0); $arr[foo1()][foo1()] = $brr[foo1()][foo1()] + $crr[foo1()][foo1()]; $val = $arr[0][1]; echo "Expect 15 and get...$val\n"; $x = array(array(0),0); function mod($b) { global $x; $x = $b; return 0; } $x1 = array(array(1),1); $x2 = array(array(2),2); $x3 = array(array(3),3); $bx = array(10); $x[mod($x1)][mod($x2)] = $bx[mod($x3)]; // expecting 10,3 var_dump($x); ?> --EXPECT-- Good call Good call Expect 15 and get...15 array(2) { [0]=> array(1) { [0]=> int(10) } [1]=> int(3) } http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_002.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_002.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_002.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php // simple case with missing element $f = array("hello","item2","bye"); list($a,,$b) = $f; echo "A=$a B=$b\n"; // Warning: Cannot use a scalar value as an array in %s on line %d $c[$c=1] = 1; // i++ evaluated first, so $d[0] is 10 $d = array(0,10); $i = 0; $d[$i++] = $i*10; // expected array is 10,10 var_dump($d); // the f++++ makes f into 2, so $e 0 and 1 should both be 30 $e = array(0,0); $f = 0; $g1 = array(10,10); $g2 = array(20,20); $g3 = array(30,30); $g = array($g1,$g2,$g3); list($e[$f++],$e[$f++]) = $g[$f]; // expect 30,30 var_dump($e); $i1 = array(1,2); $i2 = array(10,20); $i3 = array(100,200); $i4 = array(array(1000,2000),3000); $i = array($i1,$i2,$i3,$i4); $j = array(0,0,0); $h = 0; // a list of lists list(list($j[$h++],$j[$h++]),$j[$h++]) = $i[$h]; var_dump($j); // list of lists with just variable assignments - expect 100,200,300 $k3 = array(100,200); $k = array($k3,300); list(list($l,$m),$n) = $k; echo "L=$l M=$m N=$n\n"; // expect $x and $y to be null - this fails on php.net 5.2.1 (invalid opcode) - fixed in 5.2.3 list($o,$p) = 20; echo "O=$o and P=$p\n"; // list of lists with blanks and nulls expect 10 20 40 50 60 70 80 $q1 = array(10,20,30,40); $q2 = array(50,60); $q3 = array($q1,$q2,null,70); $q4 = array($q3,null,80); list(list(list($r,$s,,$t),list($u,$v),,$w),,$x) = $q4; echo "$r $s $t $u $v $w $x\n"; // expect y and z to be undefined list($y,$z) = array(); echo "Y=$y,Z=$z\n"; // expect h to be defined and be 10 list($aa,$bb) = array(10); echo "AA=$aa\n"; // expect cc and dd to be 10 and 30 list($cc,,$dd) = array(10,20,30,40); echo "CC=$cc DD=$dd\n"; // expect the inner array to be defined $ee = array("original array"); function f() { global $ee; $ee = array("array created in f()"); return 1; } $ee["array entry created after f()"][f()] = "hello"; print_r($ee); ?> --EXPECTF-- A=hello B=bye Warning: Cannot use a scalar value as an array in %s on line %d array(2) { [0]=> int(10) [1]=> int(10) } array(2) { [0]=> int(30) [1]=> int(30) } array(3) { [0]=> int(1000) [1]=> int(2000) [2]=> int(3000) } L=100 M=200 N=300 O= and P= 10 20 40 50 60 70 80 Notice: Undefined offset: 1 in %s on line %d Notice: Undefined offset: 0 in %s on line %d Y=,Z= Notice: Undefined offset: 1 in %s on line %d AA=10 CC=10 DD=30 Array ( [0] => array created in f() [array entry created after f()] => Array ( [1] => hello ) ) http://cvs.php.net/viewvc.cgi/php-src/tests/lang/engine_assignExecutionOrder_001.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/engine_assignExecutionOrder_001.phpt +++ php-src/tests/lang/engine_assignExecutionOrder_001.phpt --TEST-- Evaluation order during assignments. --FILE-- <?php function f() { echo "in f()\n"; return "name"; } function g() { echo "in g()\n"; return "assigned value"; } echo "\n\nOrder with local assignment:\n"; ${f()} = g(); var_dump($name); echo "\n\nOrder with array assignment:\n"; $a[f()] = g(); var_dump($a); echo "\n\nOrder with object property assignment:\n"; $oa = new stdClass; $oa->${f()} = g(); var_dump($oa); echo "\n\nOrder with nested object property assignment:\n"; $ob = new stdClass; $ob->o1 = new stdClass; $ob->o1->o2 = new stdClass; $ob->o1->o2->${f()} = g(); var_dump($ob); echo "\n\nOrder with dim_list property assignment:\n"; $oc = new stdClass; $oc->a[${f()}] = g(); var_dump($oc); class C { public static $name = "original"; public static $a = array(); public static $string = "hello"; } echo "\n\nOrder with static property assignment:\n"; C::${f()} = g(); var_dump(C::$name); echo "\n\nOrder with static array property assignment:\n"; C::$a[f()] = g(); var_dump(C::$a); echo "\n\nOrder with indexed string assignment:\n"; $string = "hello"; function getOffset() { echo "in getOffset()\n"; return 0; } function newChar() { echo "in newChar()\n"; return 'j'; } $string[getOffset()] = newChar(); var_dump($string); echo "\n\nOrder with static string property assignment:\n"; C::$string[getOffset()] = newChar(); var_dump(C::$string); ?> --EXPECTF-- Order with local assignment: in f() in g() %string|unicode%(14) "assigned value" Order with array assignment: in f() in g() array(1) { [%u|b%"name"]=> %string|unicode%(14) "assigned value" } Order with object property assignment: in f() in g() object(stdClass)#%d (1) { [%u|b%"assigned value"]=> %string|unicode%(14) "assigned value" } Order with nested object property assignment: in f() in g() object(stdClass)#%d (1) { [%u|b%"o1"]=> object(stdClass)#%d (1) { [%u|b%"o2"]=> object(stdClass)#%d (1) { [%u|b%"assigned value"]=> %string|unicode%(14) "assigned value" } } } Order with dim_list property assignment: in f() in g() object(stdClass)#%d (1) { [%u|b%"a"]=> array(1) { [%u|b%"assigned value"]=> %string|unicode%(14) "assigned value" } } Order with static property assignment: in f() in g() %string|unicode%(14) "assigned value" Order with static array property assignment: in f() in g() array(1) { [%u|b%"name"]=> %string|unicode%(14) "assigned value" } Order with indexed string assignment: in getOffset() in newChar() %string|unicode%(5) "jello" Order with static string property assignment: in getOffset() in newChar() %string|unicode%(5) "jello"
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php