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
case uint64:
return i, nil
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
}
case NumberFormatFloat:
......
package field
import (
"fmt"
"math"
"reflect"
"testing"
)
......@@ -13,12 +15,15 @@ func TestNumberField_Decode(t *testing.T) {
want interface{}
wantErr bool
}{
{"Correct", Number("int"), int64(2), int64(2), false}, // #0
{"Correct", Number("int"), 2.2, int64(2), false}, // #1
{"Correct", Number("int"), 2, int64(2), false}, // #2
{"Correct", Number("int"), float32(2.2), int64(2), false}, // #3
{"Correct", Number("int"), float64(2.6), int64(3), false}, // #4
{"Correct", Number("int"), 2.6, int64(3), false}, // #5
{"Correct", Number("int"), int64(2), int64(2), false}, // #0
{"Correct", Number("int"), 2.2, int64(2), false}, // #1
{"Correct", Number("int"), 2, int64(2), false}, // #2
{"Correct", Number("int"), float32(2.2), int64(2), false}, // #3
{"Correct", Number("int"), float64(2.6), int64(3), false}, // #4
{"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"), 2.2, 2.2, false}, // #7
......@@ -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.
Finish editing this message first!
Please register or to comment