| <?php | |
| // This is the long_long runtime testcase. It checks that the long long and | |
| // unsigned long long types map correctly to PHP int or string (for values | |
| // which don't fit in a PHP int). | |
| require "tests.php"; | |
| check::functions(array("foo1","foo2","foo3","foo4","foo5","foo6","bar1","bar2","bar3","bar4","bar5","bar6","UnsignedToSigned")); | |
| check::classes(array("long_long")); | |
| check::globals(array("ll","ull")); | |
| function check_ll($ll) { | |
| long_long::ll_set($ll); | |
| check::equivalent($ll, long_long::ll_get(), "Round tripping of long long failed"); | |
| } | |
| function check_ull($ull) { | |
| long_long::ull_set($ull); | |
| check::equivalent($ull, long_long::ull_get(), "Round tripping of unsigned long long failed"); | |
| } | |
| check_ll("0"); | |
| check_ll(0); | |
| check_ll("9223372036854775807"); // 0x7FFFFFFFFFFFFFFF | |
| if ((int)0x100000000 !== 0) { | |
| // This check doesn't work if PHP int is 32 bits. | |
| check_ll(0x7FFFFFFFFFFFFFFF); | |
| } | |
| check_ll(-10); | |
| $testNumber = 0; | |
| const COUNT = 1025; | |
| for ($i=0; $i<COUNT; $i++) { | |
| check_ull($testNumber); | |
| $testNumber += 1; | |
| } | |
| $testNumber = 256*256/2-COUNT; | |
| for ($i=0; $i<COUNT*2; $i++) { | |
| check_ull($testNumber); | |
| $testNumber += 1; | |
| } | |
| $testNumber = 256*256-COUNT; | |
| for ($i=0; $i<COUNT*2; $i++) { | |
| check_ull($testNumber); | |
| $testNumber += 1; | |
| } | |
| $testNumber = 0x7FFFFFFFFFFFFFFF-COUNT; | |
| for ($i=0; $i<COUNT*2; $i++) { | |
| check_ull($testNumber); | |
| $testNumber += 1; | |
| } | |
| // Check that conversion from unsigned long long to long long gives expected | |
| // value (including negative numbers) | |
| check::equal(long_long::UnsignedToSigned(0), 0, "UnsignedToSigned test failed"); | |
| check::equal(long_long::UnsignedToSigned(0xff), 0xff, "UnsignedToSigned test failed"); | |
| check::equal(long_long::UnsignedToSigned(-0xff), -0xff, "UnsignedToSigned test failed"); | |
| check::equal(long_long::UnsignedToSigned(-1), -1, "UnsignedToSigned test failed"); | |
| check::done(); |