correctly Scan type aliases for floating point types
This commit is contained in:
committed by
Jack Christensen
parent
94e10b98b1
commit
f4252a58be
@@ -337,6 +337,10 @@ func float64AssignTo(srcVal float64, srcStatus Status, dst interface{}) error {
|
|||||||
if v := reflect.ValueOf(dst); v.Kind() == reflect.Ptr {
|
if v := reflect.ValueOf(dst); v.Kind() == reflect.Ptr {
|
||||||
el := v.Elem()
|
el := v.Elem()
|
||||||
switch el.Kind() {
|
switch el.Kind() {
|
||||||
|
// if dst is a type alias of a float32 or 64, set dst val
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
el.SetFloat(srcVal)
|
||||||
|
return nil
|
||||||
// if dst is a pointer to pointer, strip the pointer and try again
|
// if dst is a pointer to pointer, strip the pointer and try again
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if el.IsNil() {
|
if el.IsNil() {
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ func TestFloat4Set(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFloat4AssignTo(t *testing.T) {
|
func TestFloat4AssignTo(t *testing.T) {
|
||||||
|
type aliasf32 float32
|
||||||
|
type aliasf64 float64
|
||||||
|
|
||||||
var i8 int8
|
var i8 int8
|
||||||
var i16 int16
|
var i16 int16
|
||||||
var i32 int32
|
var i32 int32
|
||||||
@@ -73,6 +76,8 @@ func TestFloat4AssignTo(t *testing.T) {
|
|||||||
var f64 float64
|
var f64 float64
|
||||||
var pf32 *float32
|
var pf32 *float32
|
||||||
var pf64 *float64
|
var pf64 *float64
|
||||||
|
var a32 aliasf32
|
||||||
|
var a64 aliasf64
|
||||||
|
|
||||||
simpleTests := []struct {
|
simpleTests := []struct {
|
||||||
src pgtype.Float4
|
src pgtype.Float4
|
||||||
@@ -91,6 +96,8 @@ func TestFloat4AssignTo(t *testing.T) {
|
|||||||
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &ui64, expected: uint64(42)},
|
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &ui64, expected: uint64(42)},
|
||||||
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &ui, expected: uint(42)},
|
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &ui, expected: uint(42)},
|
||||||
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &_i8, expected: _int8(42)},
|
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &_i8, expected: _int8(42)},
|
||||||
|
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &a32, expected: aliasf32(42)},
|
||||||
|
{src: pgtype.Float4{Float: 42, Status: pgtype.Present}, dst: &a64, expected: aliasf64(42)},
|
||||||
{src: pgtype.Float4{Float: 0, Status: pgtype.Null}, dst: &pi8, expected: ((*int8)(nil))},
|
{src: pgtype.Float4{Float: 0, Status: pgtype.Null}, dst: &pi8, expected: ((*int8)(nil))},
|
||||||
{src: pgtype.Float4{Float: 0, Status: pgtype.Null}, dst: &_pi8, expected: ((*_int8)(nil))},
|
{src: pgtype.Float4{Float: 0, Status: pgtype.Null}, dst: &_pi8, expected: ((*_int8)(nil))},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ func TestFloat8Set(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFloat8AssignTo(t *testing.T) {
|
func TestFloat8AssignTo(t *testing.T) {
|
||||||
|
type aliasf32 float32
|
||||||
|
type aliasf64 float64
|
||||||
|
|
||||||
var i8 int8
|
var i8 int8
|
||||||
var i16 int16
|
var i16 int16
|
||||||
var i32 int32
|
var i32 int32
|
||||||
@@ -73,6 +76,8 @@ func TestFloat8AssignTo(t *testing.T) {
|
|||||||
var f64 float64
|
var f64 float64
|
||||||
var pf32 *float32
|
var pf32 *float32
|
||||||
var pf64 *float64
|
var pf64 *float64
|
||||||
|
var a32 aliasf32
|
||||||
|
var a64 aliasf64
|
||||||
|
|
||||||
simpleTests := []struct {
|
simpleTests := []struct {
|
||||||
src pgtype.Float8
|
src pgtype.Float8
|
||||||
@@ -91,6 +96,9 @@ func TestFloat8AssignTo(t *testing.T) {
|
|||||||
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &ui64, expected: uint64(42)},
|
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &ui64, expected: uint64(42)},
|
||||||
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &ui, expected: uint(42)},
|
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &ui, expected: uint(42)},
|
||||||
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &_i8, expected: _int8(42)},
|
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &_i8, expected: _int8(42)},
|
||||||
|
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &a32, expected: aliasf32(42)},
|
||||||
|
{src: pgtype.Float8{Float: 42, Status: pgtype.Present}, dst: &a64, expected: aliasf64(42)},
|
||||||
|
|
||||||
{src: pgtype.Float8{Float: 0, Status: pgtype.Null}, dst: &pi8, expected: ((*int8)(nil))},
|
{src: pgtype.Float8{Float: 0, Status: pgtype.Null}, dst: &pi8, expected: ((*int8)(nil))},
|
||||||
{src: pgtype.Float8{Float: 0, Status: pgtype.Null}, dst: &_pi8, expected: ((*_int8)(nil))},
|
{src: pgtype.Float8{Float: 0, Status: pgtype.Null}, dst: &_pi8, expected: ((*_int8)(nil))},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user