xref: /PHP-8.2/tests/lang/023-1.inc (revision d114812f)
1<html>
2<head>
3<?php
4/* the point of this file is to intensively test various aspects of
5 * the parser.  right now, each test focuses in one aspect only
6 * (e.g. variable aliasing, arithmetic operator, various control
7 * structures), while trying to combine code from other parts of the
8 * parser as well.
9 */
10?>
11
12*** Testing assignments and variable aliasing: ***<br>
13<?php
14  /* This test tests assignments to variables using other variables as variable-names */
15  $a = "b";
16  $$a = "test";
17  $$$a = "blah";
18  ${$$$a}["associative arrays work too"] = "this is nifty";
19?>
20This should read "blah": <?php echo "$test<br>\n"; ?>
21This should read "this is nifty": <?php echo $blah[$test="associative arrays work too"]."<br>\n"; ?>
22*************************************************<br>
23
24*** Testing integer operators ***<br>
25<?php
26  /* test just about any operator possible on $i and $j (ints) */
27  $i = 5;
28  $j = 3;
29?>
30Correct result - 8:  <?php echo $i+$j; ?><br>
31Correct result - 8:  <?php echo $i+$j; ?><br>
32Correct result - 2:  <?php echo $i-$j; ?><br>
33Correct result - -2:  <?php echo $j-$i; ?><br>
34Correct result - 15:  <?php echo $i*$j; ?><br>
35Correct result - 15:  <?php echo $j*$i; ?><br>
36Correct result - 2:  <?php echo $i%$j; ?><br>
37Correct result - 3:  <?php echo $j%$i; ?><br>
38*********************************<br>
39
40*** Testing real operators ***<br>
41<?php
42  /* test just about any operator possible on $i and $j (floats) */
43  $i = 5.0;
44  $j = 3.0;
45?>
46Correct result - 8:  <?php echo $i+$j; ?><br>
47Correct result - 8:  <?php echo $i+$j; ?><br>
48Correct result - 2:  <?php echo $i-$j; ?><br>
49Correct result - -2:  <?php echo $j-$i; ?><br>
50Correct result - 15:  <?php echo $i*$j; ?><br>
51Correct result - 15:  <?php echo $j*$i; ?><br>
52Correct result - 2:  <?php echo $i%$j; ?><br>
53Correct result - 3:  <?php echo $j%$i; ?><br>
54*********************************<br>
55
56*** Testing if/elseif/else control ***<br>
57
58<?php
59/* sick if/elseif/else test by Andi :) */
60$a = 5;
61if ($a == "4") {
62    echo "This "." does "."  not "." work<br>\n";
63} elseif ($a == "5") {
64    echo "This "." works<br>\n";
65    $a = 6;
66    if ("andi" == ($test = "andi")) {
67        echo "this_still_works<br>\n";
68    } elseif (1) {
69        echo "should_not_print<br>\n";
70    } else {
71            echo "should_not_print<br>\n";
72    }
73        if (44 == 43) {
74        echo "should_not_print<br>\n";
75    } else {
76        echo "should_print<br>\n";
77    }
78} elseif ($a == 6) {
79    echo "this "."broken<br>\n";
80    if (0) {
81        echo "this_should_not_print<br>\n";
82    } else {
83        echo "TestingDanglingElse_This_Should_not_print<br>\n";
84    }
85} else {
86    echo "This "."does "." not"." work<br>\n";
87}
88?>
89
90
91*** Seriously nested if's test ***<br>
92** spelling correction by kluzz **
93<?php
94/* yet another sick if/elseif/else test by Zeev */
95$i=$j=0;
96echo "Only two lines of text should follow:<br>\n";
97if (0) { /* this code is not supposed to be executed */
98  echo "hmm, this shouldn't be displayed #1<br>\n";
99  $j++;
100  if (1) {
101    $i
102+=
103 $j;
104    if (0) {
105      $j = ++$i;
106      if (1) {
107        $j *= $i;
108        echo "damn, this shouldn't be displayed<br>\n";
109      } else {
110        $j /= $i;
111        ++$j;
112        echo "this shouldn't be displayed either<br>\n";
113      }
114    } elseif (1) {
115      $i++; $j++;
116      echo "this isn't supposed to be displayed<br>\n";
117    }
118  } elseif (0) {
119    $i++;
120    echo "this definitely shouldn't be displayed<br>\n";
121  } else {
122    --$j;
123    echo "and this too shouldn't be displayed<br>\n";
124    while ($j>0) {
125      $j--;
126    }
127  }
128} elseif (2-2) {  /* as long as 2-2==0, this isn't supposed to be executed either */
129  $i = ++$j;
130  echo "hmm, this shouldn't be displayed #2<br>\n";
131  if (1) {
132    $j = ++$i;
133    if (0) {
134      $j = $i*2+$j*($i++);
135      if (1) {
136        $i++;
137        echo "damn, this shouldn't be displayed<br>\n";
138      } else {
139        $j++;
140        echo "this shouldn't be displayed either<br>\n";
141      }
142    } else if (1) {
143      ++$j;
144      echo "this isn't supposed to be displayed<br>\n";
145    }
146  } elseif (0) {
147    $j++;
148    echo "this definitely shouldn't be displayed<br>\n";
149  } else {
150    $i++;
151    echo "and this too shouldn't be displayed<br>\n";
152  }
153} else {
154  $j=$i++;  /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */
155  echo "this should be displayed. should be:  \$i=1, \$j=0.  is:  \$i=$i, \$j=$j<br>\n";
156  if (1) {
157    $j += ++$i;  /* ++$i --> $i==2,  $j += 2 --> $j==2 */
158    if (0) {
159      $j += 40;
160      if (1) {
161        $i += 50;
162        echo "damn, this shouldn't be displayed<br>\n";
163      } else {
164        $j += 20;
165        echo "this shouldn't be displayed either<br>\n";
166      }
167    } else if (1) {
168      $j *= $i;  /* $j *= 2  --> $j == 4 */
169      echo "this is supposed to be displayed. should be:  \$i=2, \$j=4.  is:  \$i=$i, \$j=$j<br>\n";
170      echo "3 loop iterations should follow:<br>\n";
171      while ($i<=$j) {
172        echo $i++." $j<br>\n";
173      }
174    }
175  } elseif (0) {
176    echo "this definitely shouldn't be displayed<br>\n";
177  } else {
178    echo "and this too shouldn't be displayed<br>\n";
179  }
180  echo "**********************************<br>\n";
181}
182?>
183
184*** C-style else-if's ***<br>
185<?php
186  /* looks like without we even tried, C-style else-if structure works fine! */
187  if ($a=0) {
188    echo "This shouldn't be displayed<br>\n";
189  } else if ($a++) {
190    echo "This shouldn't be displayed either<br>\n";
191  } else if (--$a) {
192    echo "No, this neither<br>\n";
193  } else if (++$a) {
194    echo "This should be displayed<br>\n";
195  } else {
196    echo "This shouldn't be displayed at all<br>\n";
197  }
198?>
199*************************<br>
200
201*** WHILE tests ***<br>
202<?php
203$i=0;
204$j=20;
205while ($i<(2*$j)) {
206  if ($i>$j) {
207    echo "$i is greater than $j<br>\n";
208  } else if ($i==$j) {
209    echo "$i equals $j<br>\n";
210  } else {
211    echo "$i is smaller than $j<br>\n";
212  }
213  $i++;
214}
215?>
216*******************<br>
217
218
219*** Nested WHILEs ***<br>
220<?php
221$arr_len=3;
222
223$i=0;
224while ($i<$arr_len) {
225  $j=0;
226  while ($j<$arr_len) {
227    $k=0;
228    while ($k<$arr_len) {
229      ${"test$i$j"}[$k] = $i+$j+$k;
230      $k++;
231    }
232    $j++;
233  }
234  $i++;
235}
236
237echo "Each array variable should be equal to the sum of its indices:<br>\n";
238
239$i=0;
240while ($i<$arr_len) {
241  $j=0;
242  while ($j<$arr_len) {
243    $k=0;
244    while ($k<$arr_len) {
245      echo "\${test$i$j}[$k] = ".${"test$i$j"}[$k]."<br>\n";
246      $k++;
247    }
248    $j++;
249  }
250  $i++;
251}
252?>
253*********************<br>
254
255*** hash test... ***<br>
256<?php
257/*
258$i=0;
259
260while ($i<10000) {
261  $arr[$i]=$i;
262  $i++;
263}
264
265$i=0;
266while ($i<10000) {
267  echo $arr[$i++]."<br>\n";
268}
269*/
270echo "commented out...";
271?>
272
273**************************<br>
274
275*** Hash resizing test ***<br>
276<?php
277$i = 10;
278$a = 'b';
279while ($i > 0) {
280    $a = $a . 'a';
281    echo "$a<br>\n";
282    $resize[$a] = $i;
283    $i--;
284}
285$i = 10;
286$a = 'b';
287while ($i > 0) {
288    $a = $a . 'a';
289    echo "$a<br>\n";
290    echo $resize[$a]."<br>\n";
291    $i--;
292}
293?>
294**************************<br>
295
296
297*** break/continue test ***<br>
298<?php
299$i=0;
300
301echo "\$i should go from 0 to 2<br>\n";
302while ($i<5) {
303  if ($i>2) {
304    break;
305  }
306  $j=0;
307  echo "\$j should go from 3 to 4, and \$q should go from 3 to 4<br>\n";
308  while ($j<5) {
309    if ($j<=2) {
310      $j++;
311      continue;
312    }
313    echo "  \$j=$j<br>\n";
314    for ($q=0; $q<=10; $q++) {
315      if ($q<3) {
316        continue;
317      }
318      if ($q>4) {
319        break;
320      }
321      echo "    \$q=$q<br>\n";
322    }
323    $j++;
324  }
325  $j=0;
326  echo "\$j should go from 0 to 2<br>\n";
327  while ($j<5) {
328    if ($j>2) {
329      $k=0;
330      echo "\$k should go from 0 to 2<br>\n";
331      while ($k<5) {
332        if ($k>2) {
333          break 2;
334        }
335        echo "    \$k=$k<br>\n";
336        $k++;
337      }
338    }
339    echo "  \$j=$j<br>\n";
340    $j++;
341  }
342  echo "\$i=$i<br>\n";
343  $i++;
344}
345?>
346***********************<br>
347
348*** Nested file include test ***<br>
349<?php include("023-2.inc"); ?>
350********************************<br>
351
352<?php
353{
354  echo "Tests completed.<br>\n";  # testing some PHP style comment...
355}
356?>
357