From 64fe90aabb69dea61794132d5390fc6659dcfe5c Mon Sep 17 00:00:00 2001
From: Moriyoshi Koizumi <mozo@mozo.jp>
Date: Sun, 3 Apr 2011 15:34:37 +0900
Subject: [PATCH] Add TestUnpackFloat().

---
 go/msgpack_test.go | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/go/msgpack_test.go b/go/msgpack_test.go
index e324f2eb..50de668a 100644
--- a/go/msgpack_test.go
+++ b/go/msgpack_test.go
@@ -5,6 +5,7 @@ import (
     "testing"
     "bytes"
     "reflect"
+    "math"
 );
 
 func equal(lhs reflect.Value, rhs reflect.Value) bool {
@@ -196,3 +197,22 @@ func TestUnpackInt(t *testing.T) {
         if retval.Interface() != v { t.Errorf("%u != %u", retval.Interface(), v) }
     }
 }
+
+func TestUnpackFloat(t *testing.T) {
+    b := bytes.NewBuffer([]byte { 0xca, 0x3d, 0xcc, 0xcc, 0xcd, 0xca, 0x3e, 0x4c, 0xcc, 0xcd, 0xca, 0xbd, 0xcc, 0xcc, 0xcd, 0xca, 0xbe, 0x4c, 0xcc, 0xcd, 0xca, 0x7f, 0x80, 0x00, 0x00, 0xca, 0xff, 0x80, 0x00, 0x00, 0xca, 0xff, 0xc0, 0x00, 0x0, 0xcb, 0x3f, 0xb9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0xcb, 0x3f, 0xc9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0xcb, 0xbf, 0xb9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0xcb, 0xbf, 0xc9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0xcb, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
+    for _, v := range [](interface{}) { float32(.1), float32(.2), float32(-.1), float32(-.2), float32(math.Inf(1)), float32(math.Inf(-1)), float32(math.NaN()), float64(.1), float64(.2), float64(-.1), float64(-.2) } {
+        retval, _, e := Unpack(b)
+        if e != nil { t.Error("err != nil") }
+        isnan := false
+        if _v, ok := v.(float64); ok {
+            isnan = math.IsNaN(_v)
+        } else if _v, ok := v.(float32); ok {
+            isnan = math.IsNaN(float64(_v))
+        }
+        if isnan {
+            if retval.Interface() == v { t.Errorf("[NaN] %u == %u", retval.Interface(), v) }
+        } else {
+            if retval.Interface() != v { t.Errorf("%u != %u", retval.Interface(), v) }
+        }
+    }
+}