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