Roll back array-specific changes through D19607758
[hiphop-php.git] / hphp / test / slow / hack_arr_compat / compare.php
blob876c5bbc9f1a6c62d4eeac85ba9024fb3ed0edda
1 <?hh
2 function handler($errno, $errstr, $errfile, $errline, $errcontext='',
3 $errtrace = array()) {
5 if ($errstr === "Hack Array Compat: Comparing PHP array with Hack array") {
6 HackArrCompatCompare::$got_notice_hack_array = true;
8 if ($errstr === "Hack Array Compat: Comparing PHP array with non any-array") {
9 HackArrCompatCompare::$got_notice_non_any_array = true;
13 function do_compare_hack_array($cmp) {
14 HackArrCompatCompare::$got_notice_hack_array = false;
15 $cmp();
16 return HackArrCompatCompare::$got_notice_hack_array;
19 function do_compare_non_any_array($cmp) {
20 HackArrCompatCompare::$got_notice_non_any_array = false;
21 $cmp();
22 return HackArrCompatCompare::$got_notice_non_any_array;
25 function exn_wrap($cmp) {
26 try { $cmp(); } catch (Exception $e) {}
29 function do_compares($a, $b, $cmp) {
30 echo "=========================== Notice Compare =======================\n";
31 var_dump($a);
32 var_dump($b);
33 echo ($cmp(() ==> exn_wrap(() ==> $a < $b)) ? 'T' : 'F');
34 echo " " . ($cmp(() ==> exn_wrap(() ==> $a <= $b)) ? 'T' : 'F');
35 echo " " . ($cmp(() ==> exn_wrap(() ==> $a > $b)) ? 'T' : 'F');
36 echo " " . ($cmp(() ==> exn_wrap(() ==> $a >= $b)) ? 'T' : 'F');
37 echo " " . ($cmp(() ==> exn_wrap(() ==> $a <=> $b)) ? 'T' : 'F');
38 echo " " . ($cmp(() ==> exn_wrap(() ==> $a == $b)) ? 'T' : 'F');
39 echo " " . ($cmp(() ==> exn_wrap(() ==> $a != $b)) ? 'T' : 'F');
40 echo " " . ($cmp(() ==> exn_wrap(() ==> $a === $b)) ? 'T' : 'F');
41 echo " " . ($cmp(() ==> exn_wrap(() ==> $a !== $b)) ? 'T' : 'F');
42 echo "\n==================================================================\n";
45 function main() {
46 set_error_handler(fun('handler'));
48 $x1 = __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[
49 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[]),
50 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2, __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[3, 4])]),
51 __hhvm_intrinsics\dummy_cast_to_kindofarray(dict['a' => 'b', 'c' => 'd'])
52 ]);
53 $x2_non_hack_arrays = __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[
54 true,
55 false,
56 null,
57 123,
58 4.567,
59 'abc',
60 new stdclass,
61 imagecreate(1, 1),
62 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[2, 5]), __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[3, 4])]),
63 __hhvm_intrinsics\dummy_cast_to_kindofarray(dict['a' => __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[]), 'c' => __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2])]),
64 ]);
65 $x2_hack_arrays = array(
66 vec[],
67 vec[1, 2, 3],
68 dict[],
69 dict['a' => 'b', 'c' => 'd'],
70 keyset[],
71 keyset['a', 'b', 'c'],
72 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2, vec[3, 4]]),
75 $do_compare_hack_array_listener
76 = $thunk ==> do_compare_hack_array($thunk);
77 $do_compare_non_any_array_listener
78 = $thunk ==> do_compare_non_any_array($thunk);
80 foreach ($x1 as $a) {
81 foreach ($x2_non_hack_arrays as $b) {
82 do_compares($a, $b, $do_compare_non_any_array_listener);
83 do_compares($b, $a, $do_compare_non_any_array_listener);
85 foreach ($x2_hack_arrays as $b) {
86 do_compares($a, $b, $do_compare_hack_array_listener);
87 do_compares($b, $a, $do_compare_hack_array_listener);
91 do_compares(null, null, $do_compare_hack_array_listener);
92 do_compares(true, false, $do_compare_hack_array_listener);
93 do_compares(1, 2, $do_compare_hack_array_listener);
95 do_compares(null, null, $do_compare_non_any_array_listener);
96 do_compares(true, false, $do_compare_non_any_array_listener);
97 do_compares(1, 2, $do_compare_non_any_array_listener);
100 // Copyright 2004-present Facebook. All Rights Reserved.
102 <<__EntryPoint>>
103 function main_compare() {
104 $got_notice = false;
106 main();
109 abstract final class HackArrCompatCompare {
110 public static $got_notice_hack_array;
111 public static $got_notice_non_any_array;