1--TEST-- 2Check for double NaN, Inf, -Inf, 0, and -0 3--FILE-- 4<?php 5function test($type, $variable, $check) { 6 $serialized = msgpack_serialize($variable); 7 $unserialized = msgpack_unserialize($serialized); 8 9 echo $type, PHP_EOL; 10 var_dump($variable); 11 var_dump($unserialized); 12 var_dump($check($unserialized)); 13 14 echo PHP_EOL; 15} 16 17test('double NaN:', NAN, "is_nan"); 18test('double Inf:', INF, "is_infinite"); 19test('double -Inf:', -INF, "is_infinite"); 20test('double 0.0:', 0.0, function($z) { 21 $h = bin2hex(pack("E", $z)); 22 if ($h === "0000000000000000") { 23 return true; 24 } 25 var_dump($h); 26 } 27); 28test('double -0.0:', -0.0, function($z) { 29 $h = bin2hex(pack("E", $z)); 30 if ($h === "8000000000000000") { 31 return true; 32 } 33 var_dump($h); 34 } 35); 36 37--EXPECTF-- 38double NaN: 39float(NAN) 40float(NAN) 41bool(true) 42 43double Inf: 44float(INF) 45float(INF) 46bool(true) 47 48double -Inf: 49float(-INF) 50float(-INF) 51bool(true) 52 53double 0.0: 54float(0) 55float(0) 56bool(true) 57 58double -0.0: 59float(-0) 60float(-0) 61bool(true) 62