diff --git a/v1/tasks/reflect.go b/v1/tasks/reflect.go index a17a04b5..5f036cca 100644 --- a/v1/tasks/reflect.go +++ b/v1/tasks/reflect.go @@ -280,8 +280,11 @@ func getIntValue(theType string, value interface{}) (int64, error) { return n.Int64() } - n, ok := value.(int64) - if !ok { + var n int64 + switch val := value.(type) { + case int, int8, int16, int32, int64: + n = int64(val.(int)) + default: return 0, typeConversionError(value, typesMap[theType].String()) } @@ -298,6 +301,7 @@ func getUintValue(theType string, value interface{}) (uint64, error) { return 0, typeConversionError(value, typesMap[theType].String()) } + uintVal, err := strconv.ParseUint(string(n), 10, 64) if err != nil { return 0, err @@ -308,13 +312,12 @@ func getUintValue(theType string, value interface{}) (uint64, error) { var n uint64 switch value := value.(type) { - case uint64: - n = 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 } @@ -326,15 +329,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 5a4e879f..26da0395 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