func()

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
}