in pkg/lib/comparison/comparison.go [156:195]
func (e Expression) EvaluateSuccess(success, total uint64) (*Result, error) {
var lhs float64
if e.Type == TypePercentage {
if total == 0 {
return nil, fmt.Errorf("cannot evaluate success rate if total is 0")
}
lhs = float64(success) / float64(total) * 100
} else if e.Type == TypeValue {
lhs = float64(success)
} else {
return nil, fmt.Errorf("unknown comparison type: %s", e.Type.String())
}
pass := e.Cmp.Compare(lhs, e.RHS)
cmpRes := &Result{Type: e.Type, Op: e.Cmp.Operator()}
if e.Type == TypePercentage {
cmpRes.LHS = fmt.Sprintf("%.2f%%", lhs)
cmpRes.RHS = fmt.Sprintf("%.2f%%", e.RHS)
} else {
cmpRes.LHS = fmt.Sprintf("%.2f", lhs)
cmpRes.RHS = fmt.Sprintf("%.2f", e.RHS)
}
var expr string
if pass {
cmpRes.Pass = true
if e.Type == TypePercentage {
expr = fmt.Sprintf("%.2f%% %s %.2f%%", lhs, e.Cmp.Operator(), e.RHS)
} else {
expr = fmt.Sprintf("%.2f %s %.2f", lhs, e.Cmp.Operator(), e.RHS)
}
} else {
cmpRes.Pass = false
if e.Type == TypePercentage {
expr = fmt.Sprintf("%.2f%% is not %s %.2f%%", lhs, string(e.Cmp.Operator()), e.RHS)
} else {
expr = fmt.Sprintf("%.2f is not %s %.2f", lhs, string(e.Cmp.Operator()), e.RHS)
}
}
cmpRes.Expr = expr
return cmpRes, nil
}