Skip to content
Snippets Groups Projects
Commit 612be0c7 authored by ko_oler's avatar ko_oler
Browse files

Добавлена дополнительная проверка при выполнении декодирования из типа float64...

Добавлена дополнительная проверка при выполнении декодирования из типа float64 при переводе к int64 для поля типа "Number"
parent 30b5e866
No related branches found
No related tags found
No related merge requests found
...@@ -88,6 +88,9 @@ func (NumberType) decode(_ context.Context, field *Field, v interface{}) (interf ...@@ -88,6 +88,9 @@ func (NumberType) decode(_ context.Context, field *Field, v interface{}) (interf
case uint64: case uint64:
return i, nil return i, nil
case float64: case float64:
if i >= math.MaxInt64 || i <= math.MinInt64 {
return nil, errors.Errorf("the passed value must be no more than %d and no less than %d", math.MaxInt64, math.MinInt64)
}
return int64(math.Round(i)), nil return int64(math.Round(i)), nil
} }
case NumberFormatFloat: case NumberFormatFloat:
......
package field package field
import ( import (
"fmt"
"math"
"reflect" "reflect"
"testing" "testing"
) )
...@@ -19,6 +21,9 @@ func TestNumberField_Decode(t *testing.T) { ...@@ -19,6 +21,9 @@ func TestNumberField_Decode(t *testing.T) {
{"Correct", Number("int"), float32(2.2), int64(2), false}, // #3 {"Correct", Number("int"), float32(2.2), int64(2), false}, // #3
{"Correct", Number("int"), float64(2.6), int64(3), false}, // #4 {"Correct", Number("int"), float64(2.6), int64(3), false}, // #4
{"Correct", Number("int"), 2.6, int64(3), false}, // #5 {"Correct", Number("int"), 2.6, int64(3), false}, // #5
{"Convert error", Number(NumberFormatInt), math.MaxFloat64, nil, true}, // #6
{"Convert error", Number(NumberFormatInt), float64(-9223372036854776000.0), nil, true}, // #7
{"Convert error", Number(NumberFormatInt), float64(9223372036854776000.0), nil, true}, // #7
{"Correct", Number("float"), int8(2), 2.0, false}, // #6 {"Correct", Number("float"), int8(2), 2.0, false}, // #6
{"Correct", Number("float"), 2.2, 2.2, false}, // #7 {"Correct", Number("float"), 2.2, 2.2, false}, // #7
...@@ -86,3 +91,32 @@ func TestNumberField_Encode(t *testing.T) { ...@@ -86,3 +91,32 @@ func TestNumberField_Encode(t *testing.T) {
}) })
} }
} }
func TestNumberField_ConvertToInt64(t *testing.T) {
tests := []struct {
name string
number float64
want int64
}{
{
name: "float64 to int64",
number: 9223372036854775807.0,
want: 9223372036854775807,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
num := int64(tt.number)
if reflect.DeepEqual(num, tt.want) {
return
}
t.Errorf("Convert() got = %v, want %v", int64(tt.number), tt.want)
})
}
fmt.Println(math.MaxInt64)
fmt.Println(float64(math.MaxInt64))
r := float64(math.MaxInt64)
fmt.Println(int64(r))
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment