DynamicWeightsFromString - parsing for empty fields

This commit is contained in:
DanB
2021-02-11 17:21:19 +01:00
parent f918071ea1
commit fd331429c1
2 changed files with 51 additions and 4 deletions

View File

@@ -34,11 +34,17 @@ func NewDynamicWeightsFromString(s, dWSep, fltrSep string) (dWs []*DynamicWeight
}
dWs = make([]*DynamicWeight, 0, lnDwStrs/nrFlds)
for i := 0; i < lnDwStrs; i += nrFlds {
dw := &DynamicWeight{FilterIDs: strings.Split(dwStrs[i], fltrSep)}
if dw.Weight, err = strconv.ParseFloat(dwStrs[i+1], 64); err != nil {
return nil, fmt.Errorf("invalid Weight <%s> in string: <%s>", dwStrs[i+1], s)
var fltrIDs []string
if len(dwStrs[i]) != 0 {
fltrIDs = strings.Split(dwStrs[i], fltrSep)
}
dWs = append(dWs, dw)
var weight float64
if len(dwStrs[i+1]) != 0 {
if weight, err = strconv.ParseFloat(dwStrs[i+1], 64); err != nil {
return nil, fmt.Errorf("invalid Weight <%s> in string: <%s>", dwStrs[i+1], s)
}
}
dWs = append(dWs, &DynamicWeight{FilterIDs: fltrIDs, Weight: weight})
}
return
}

View File

@@ -43,5 +43,46 @@ func TestNewDynamicWeightsFromString(t *testing.T) {
} else if !reflect.DeepEqual(eDws, dws) {
t.Errorf("expecting: %+v, received: %+v", eDws, dws)
}
eDws = []*DynamicWeight{
{
FilterIDs: []string{"fltr1", "fltr2"},
Weight: 20.0,
},
{
Weight: 30.0,
},
{
FilterIDs: []string{"fltr4", "fltr5"},
Weight: 50.0,
},
}
dwsStr = "fltr1&fltr2;20;;30;fltr4&fltr5;50"
if dws, err := NewDynamicWeightsFromString(dwsStr, ";", "&"); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eDws[1], dws[1]) {
t.Errorf("expecting: %+v, received: %+v", eDws[1], dws[1])
}
eDws = []*DynamicWeight{
{
Weight: 20.0,
},
}
dwsStr = ";20"
if dws, err := NewDynamicWeightsFromString(dwsStr, ";", "&"); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eDws, dws) {
t.Errorf("expecting: %+v, received: %+v", eDws, dws)
}
eDws = []*DynamicWeight{
{
Weight: 0.0,
},
}
dwsStr = ";"
if dws, err := NewDynamicWeightsFromString(dwsStr, ";", "&"); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eDws, dws) {
t.Errorf("expecting: %+v, received: %+v", eDws, dws)
}
}