From 9f8e61cc5e07d0af6bf40c40b39ce1e1b4fcc625 Mon Sep 17 00:00:00 2001 From: RoshanDev Date: Mon, 29 Nov 2021 12:22:29 +0800 Subject: [PATCH 1/2] fix(reflect): fix reflect bug add different type support for get value in reflect.go; add test type for result_test.go. --- v1/tasks/reflect.go | 47 +++++++++++++++++++++++++++++------------ v1/tasks/result_test.go | 33 +++++++++++++++++++++++++---- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/v1/tasks/reflect.go b/v1/tasks/reflect.go index 53aa7eb71..5c94394c5 100644 --- a/v1/tasks/reflect.go +++ b/v1/tasks/reflect.go @@ -275,15 +275,26 @@ func getIntValue(theType string, value interface{}) (int64, error) { if !ok { return 0, typeConversionError(value, typesMap[theType].String()) } - + return n.Int64() } - - n, ok := value.(int64) - if !ok { + + var n int64 + switch val := value.(type) { + case int: + n = int64(val) + case int8: + n = int64(val) + case int16: + n = int64(val) + case int32: + n = int64(val) + case int64: + n = val + default: return 0, typeConversionError(value, typesMap[theType].String()) } - + return n, nil } @@ -296,24 +307,29 @@ func getUintValue(theType string, value interface{}) (uint64, error) { if !ok { return 0, typeConversionError(value, typesMap[theType].String()) } - + intVal, err := n.Int64() if err != nil { return 0, err } - + return uint64(intVal), nil } - + var n uint64 switch value := value.(type) { case uint64: n = value + case uint32: + n = uint64(value) + case uint16: + n = uint64(value) case uint8: n = uint64(value) default: return 0, typeConversionError(value, typesMap[theType].String()) } + return n, nil } @@ -325,15 +341,20 @@ func getFloatValue(theType string, value interface{}) (float64, error) { if !ok { return 0, typeConversionError(value, typesMap[theType].String()) } - + return n.Float64() } - - f, ok := value.(float64) - if !ok { + + var f float64 + switch value := value.(type) { + case float32: + f = float64(value) + case float64: + f = value + default: return 0, typeConversionError(value, typesMap[theType].String()) } - + return f, nil } diff --git a/v1/tasks/result_test.go b/v1/tasks/result_test.go index 5a4e879fe..26da0395c 100644 --- a/v1/tasks/result_test.go +++ b/v1/tasks/result_test.go @@ -2,26 +2,51 @@ package tasks_test import ( "testing" - + "github.com/RichardKnop/machinery/v1/tasks" "github.com/stretchr/testify/assert" ) func TestReflectTaskResults(t *testing.T) { t.Parallel() - + taskResults := []*tasks.TaskResult{ { Type: "[]string", Value: []string{"f", "o", "o"}, }, + { + Type: "int", + Value: 0, + }, + { + Type: "int32", + Value: 1, + }, + { + Type: "int64", + Value: 2, + }, + { + Type: "float32", + Value: float32(0.1), + }, + { + Type: "float64", + Value: 0.2, + }, } results, err := tasks.ReflectTaskResults(taskResults) if assert.NoError(t, err) { - assert.Equal(t, 1, len(results)) + assert.Equal(t, 6, len(results)) assert.Equal(t, 3, results[0].Len()) assert.Equal(t, "f", results[0].Index(0).String()) assert.Equal(t, "o", results[0].Index(1).String()) assert.Equal(t, "o", results[0].Index(2).String()) + assert.Equal(t, 0, int(results[1].Int())) + assert.Equal(t, int32(1), int32(results[2].Int())) + assert.Equal(t, 2, int(results[3].Int())) + assert.Equal(t, float32(0.1), float32(results[4].Float())) + assert.Equal(t, 0.2, results[5].Float()) } -} +} \ No newline at end of file From 585826e05163219f25d566e99adfefd4b587a6cb Mon Sep 17 00:00:00 2001 From: Roshan Date: Thu, 21 Mar 2024 15:28:39 +0800 Subject: [PATCH 2/2] modify getIntValue and getUintValue --- v1/tasks/reflect.go | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/v1/tasks/reflect.go b/v1/tasks/reflect.go index c0a17f6c7..5f036ccae 100644 --- a/v1/tasks/reflect.go +++ b/v1/tasks/reflect.go @@ -276,26 +276,18 @@ func getIntValue(theType string, value interface{}) (int64, error) { if !ok { return 0, typeConversionError(value, typesMap[theType].String()) } - + return n.Int64() } - + var n int64 switch val := value.(type) { - case int: - n = int64(val) - case int8: - n = int64(val) - case int16: - n = int64(val) - case int32: - n = int64(val) - case int64: - n = val + case int, int8, int16, int32, int64: + n = int64(val.(int)) default: return 0, typeConversionError(value, typesMap[theType].String()) } - + return n, nil } @@ -317,21 +309,15 @@ func getUintValue(theType string, value interface{}) (uint64, error) { return uintVal, nil } - + var n uint64 switch value := value.(type) { - case uint64: - n = value - case uint32: - n = uint64(value) - case uint16: - n = uint64(value) - case uint8: - n = uint64(value) + case uint8, uint16, uint32, uint64: + n = uint64(value.(uint)) default: return 0, typeConversionError(value, typesMap[theType].String()) } - + return n, nil }