mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
New data converter: *divide
This commit is contained in:
@@ -66,6 +66,11 @@ func NewDataConverter(params string) (
|
||||
return NewMultiplyConverter("")
|
||||
}
|
||||
return NewMultiplyConverter(params[len(MetaMultiply)+1:])
|
||||
case strings.HasPrefix(params, MetaDivide):
|
||||
if len(params) == len(MetaDivide) { // no extra params, defaults implied
|
||||
return NewDivideConverter("")
|
||||
}
|
||||
return NewDivideConverter(params[len(MetaDivide)+1:])
|
||||
default:
|
||||
return nil,
|
||||
fmt.Errorf("unsupported converter definition: <%s>",
|
||||
@@ -159,3 +164,31 @@ func (m *MultiplyConverter) Convert(in interface{}) (
|
||||
out = inFloat64 * m.Value
|
||||
return
|
||||
}
|
||||
|
||||
func NewDivideConverter(constructParams string) (
|
||||
hdlr DataConverter, err error) {
|
||||
if constructParams == "" {
|
||||
return nil, ErrMandatoryIeMissingNoCaps
|
||||
}
|
||||
var val float64
|
||||
if val, err = strconv.ParseFloat(constructParams, 64); err != nil {
|
||||
return
|
||||
}
|
||||
return &DivideConverter{Value: val}, nil
|
||||
}
|
||||
|
||||
// DivideConverter divides input with value in params
|
||||
// encapsulates the output as float64 value
|
||||
type DivideConverter struct {
|
||||
Value float64
|
||||
}
|
||||
|
||||
func (m *DivideConverter) Convert(in interface{}) (
|
||||
out interface{}, err error) {
|
||||
var inFloat64 float64
|
||||
if inFloat64, err = IfaceAsFloat64(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out = inFloat64 / m.Value
|
||||
return
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ func TestNewDataConverter(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConvertFloatToSeconds(t *testing.T) {
|
||||
b, err := NewDurationSecondsConverter("")
|
||||
b, err := NewDataConverter(MetaDurationSeconds)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
@@ -53,7 +53,7 @@ func TestConvertFloatToSeconds(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRoundConverterFloat64(t *testing.T) {
|
||||
b, err := NewRoundConverter("2")
|
||||
b, err := NewDataConverter("*round:2")
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
@@ -77,7 +77,7 @@ func TestRoundConverterFloat64(t *testing.T) {
|
||||
//testRoundconv string / float / int / time
|
||||
|
||||
func TestRoundConverterString(t *testing.T) {
|
||||
b, err := NewRoundConverter("2")
|
||||
b, err := NewDataConverter("*round:2")
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
@@ -99,7 +99,7 @@ func TestRoundConverterString(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRoundConverterInt64(t *testing.T) {
|
||||
b, err := NewRoundConverter("2")
|
||||
b, err := NewDataConverter("*round:2")
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
@@ -121,7 +121,7 @@ func TestRoundConverterInt64(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRoundConverterTime(t *testing.T) {
|
||||
b, err := NewRoundConverter("2")
|
||||
b, err := NewDataConverter("*round:2")
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
@@ -144,7 +144,7 @@ func TestRoundConverterTime(t *testing.T) {
|
||||
|
||||
func TestMultiplyConverter(t *testing.T) {
|
||||
eMpl := &MultiplyConverter{1024.0}
|
||||
m, err := NewMultiplyConverter("1024.0")
|
||||
m, err := NewDataConverter("*multiply:1024.0")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(eMpl, m) {
|
||||
@@ -163,3 +163,25 @@ func TestMultiplyConverter(t *testing.T) {
|
||||
t.Errorf("expecting: %+v, received: %+v", expOut, out)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDivideConverter(t *testing.T) {
|
||||
eDvd := &DivideConverter{1024.0}
|
||||
d, err := NewDataConverter("*divide:1024.0")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(eDvd, d) {
|
||||
t.Errorf("expecting: %+v, received: %+v", eDvd, d)
|
||||
}
|
||||
expOut := 2.0
|
||||
if out, err := d.Convert(time.Duration(2048)); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expOut, out) {
|
||||
t.Errorf("expecting: %+v, received: %+v", expOut, out)
|
||||
}
|
||||
expOut = 1.5
|
||||
if out, err := d.Convert(1536.0); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expOut, out) {
|
||||
t.Errorf("expecting: %+v, received: %+v", expOut, out)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user