Skip to content

Commit

Permalink
fix int to float conversions
Browse files Browse the repository at this point in the history
  • Loading branch information
geseq committed Jul 3, 2021
1 parent 8dffac5 commit 99d455b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
12 changes: 12 additions & 0 deletions type_specific_codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -1760,6 +1760,9 @@ func (v *Value) Float32(optionalDefault ...float32) float32 {
if s, ok := v.data.(float32); ok {
return s
}
if s, ok := v.data.(int); ok {
return float32(float64(s))
}
if len(optionalDefault) == 1 {
return optionalDefault[0]
}
Expand All @@ -1770,6 +1773,9 @@ func (v *Value) Float32(optionalDefault ...float32) float32 {
//
// Panics if the object is not a float32.
func (v *Value) MustFloat32() float32 {
if s, ok := v.data.(int); ok {
return float32(float64(s))
}
return v.data.(float32)
}

Expand Down Expand Up @@ -1885,6 +1891,9 @@ func (v *Value) Float64(optionalDefault ...float64) float64 {
if s, ok := v.data.(float64); ok {
return s
}
if s, ok := v.data.(int); ok {
return float64(s)
}
if len(optionalDefault) == 1 {
return optionalDefault[0]
}
Expand All @@ -1895,6 +1904,9 @@ func (v *Value) Float64(optionalDefault ...float64) float64 {
//
// Panics if the object is not a float64.
func (v *Value) MustFloat64() float64 {
if s, ok := v.data.(int); ok {
return float64(s)
}
return v.data.(float64)
}

Expand Down
8 changes: 6 additions & 2 deletions type_specific_codegen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1707,10 +1707,12 @@ func TestCollectUintptr(t *testing.T) {
*/
func TestFloat32(t *testing.T) {
val := float32(1)
m := objx.Map{"value": val, "nothing": nil}
m := objx.Map{"value": val, "nothing": nil, "ivalue": 1}

assert.Equal(t, val, m.Get("value").Float32())
assert.Equal(t, val, m.Get("value").MustFloat32())
assert.Equal(t, val, m.Get("ivalue").Float32())
assert.Equal(t, val, m.Get("ivalue").MustFloat32())
assert.Equal(t, float32(0), m.Get("nothing").Float32())
assert.Equal(t, val, m.Get("nothing").Float32(1))
assert.Panics(t, func() {
Expand Down Expand Up @@ -1828,10 +1830,12 @@ func TestCollectFloat32(t *testing.T) {
*/
func TestFloat64(t *testing.T) {
val := float64(1)
m := objx.Map{"value": val, "nothing": nil}
m := objx.Map{"value": val, "nothing": nil, "ivalue": 1}

assert.Equal(t, val, m.Get("value").Float64())
assert.Equal(t, val, m.Get("value").MustFloat64())
assert.Equal(t, val, m.Get("ivalue").Float64())
assert.Equal(t, val, m.Get("ivalue").MustFloat64())
assert.Equal(t, float64(0), m.Get("nothing").Float64())
assert.Equal(t, val, m.Get("nothing").Float64(1))
assert.Panics(t, func() {
Expand Down

0 comments on commit 99d455b

Please sign in to comment.