1package ndr
2
3import (
4	"bufio"
5	"bytes"
6	"encoding/binary"
7	"encoding/hex"
8	"testing"
9
10	"github.com/stretchr/testify/assert"
11)
12
13func TestReadFloat32(t *testing.T) {
14	tests := []struct {
15		hexStr string
16		value  float32
17		order  binary.ByteOrder
18	}{
19		{"3E200000", 0.15625, binary.BigEndian},
20		{"00000000", 0.0, binary.BigEndian},
21		{"3F800000", 1.0, binary.BigEndian},
22		{"BF800000", -1.0, binary.BigEndian},
23		{"00000001", 1.4e-45, binary.BigEndian},
24		{"00400000", 5.877472e-39, binary.BigEndian},
25		{"007FFFFF", 1.1754942e-38, binary.BigEndian},
26		{"00800000", 1.1754944e-38, binary.BigEndian},
27		{"7F7FFFFF", 3.4028235e38, binary.BigEndian},
28		//TODO need some littleendian test vectors
29	}
30	for i, test := range tests {
31		b, _ := hex.DecodeString(test.hexStr)
32		//t.Logf("%s %08b\n", test.hexStr,b)
33		r := bufio.NewReader(bytes.NewReader(b))
34		dec := Decoder{
35			r:  r,
36			ch: CommonHeader{Endianness: test.order},
37		}
38		f, err := dec.readFloat32()
39		if err != nil {
40			t.Errorf("could not read float32 test %d: %v", i, err)
41		}
42		assert.Equal(t, test.value, f, "float32 not as expect for test %d: %s", i, test.hexStr)
43	}
44}
45