2 // Copyright 2004-present Facebook. All Rights Reserved.
4 function run_tests($tests) {
5 foreach ($tests as $test) {
6 list($func, $val) = $test;
9 } catch (Exception
$e) {
10 echo "Exception: " . $e->getMessage() . "\n";
15 // Use type-hints to test HHBBC optimizations
17 function test1($v) { return HH\array_key_cast
($v); }
18 function test2(bool $v) { return HH\array_key_cast
($v); }
19 function test3(bool $v) { return HH\array_key_cast
($v); }
20 function test4(int $v) { return HH\array_key_cast
($v); }
21 function test5(float $v) { return HH\array_key_cast
($v); }
22 function test6(string $v) { return HH\array_key_cast
($v); }
23 function test7(string $v) { return HH\array_key_cast
($v); }
24 function test8(resource $v) { return HH\array_key_cast
($v); }
25 function test9(varray
$v) { return HH\array_key_cast
($v); }
26 function test10(vec
$v) { return HH\array_key_cast
($v); }
27 function test11(dict
$v) { return HH\array_key_cast
($v); }
28 function test12(keyset
$v) { return HH\array_key_cast
($v); }
29 function test13(stdClass
$v) { return HH\array_key_cast
($v); }
31 function func_maker1() { return 'HH\array_key_cast'; }
33 abstract final class FuncMaker2Statics
{
36 function func_maker2() {
37 return 'test' . FuncMaker2Statics
::$x++
;
40 function make_tests($func) {
46 vec
[$func(), 789.123],
49 vec
[$func(), fopen(__FILE__
, 'r')],
50 vec
[$func(), varray
[]],
53 vec
[$func(), keyset
[]],
54 vec
[$func(), new stdClass
]
56 return __hhvm_intrinsics\
launder_value($tests);
61 function main_array_key_cast() {
62 run_tests(make_tests(func_maker1
<>));
63 run_tests(make_tests(func_maker2
<>));