returnnil,fmt.Errorf("at least one point must be specified")
}
fori:=1;i<n;i++{
ifpoints[i-1].Utilization>=points[i].Utilization{
returnnil,fmt.Errorf("utilization values must be sorted. Utilization[%d]==%d >= Utilization[%d]==%d",i-1,points[i-1].Utilization,i,points[i].Utilization)
}
}
fori,point:=rangepoints{
ifpoint.Utilization<minUtilization{
returnnil,fmt.Errorf("utilization values must not be less than %d. Utilization[%d]==%d",minUtilization,i,point.Utilization)
}
ifpoint.Utilization>maxUtilization{
returnnil,fmt.Errorf("utilization values must not be greater than %d. Utilization[%d]==%d",maxUtilization,i,point.Utilization)
}
ifpoint.Score<minScore{
returnnil,fmt.Errorf("score values must not be less than %d. Score[%d]==%d",minScore,i,point.Score)
}
ifpoint.Score>maxScore{
returnnil,fmt.Errorf("score valuses not be greater than %d. Score[%d]==%d",maxScore,i,point.Score)
}
}
// We make defensive copy so we make no assumption if array passed as argument is not changed afterwards
pointsCopy:=make(FunctionShape,n)
copy(pointsCopy,points)
returnpointsCopy,nil
}
// RequestedToCapacityRatioResourceAllocationPriorityDefault creates a requestedToCapacity based
// ResourceAllocationPriority using default resource scoring function shape.
// The default function assigns 1.0 to resource when all capacity is available
// and 0.0 when requested amount is equal to capacity.