MCPcopy Create free account
hub / github.com/goadesign/goa / byMinMax

Function byMinMax

expr/example.go:299–383  ·  view source on GitHub ↗
(a *AttributeExpr, r *ExampleGenerator)

Source from the content-addressed store, hash-verified

297}
298
299func byMinMax(a *AttributeExpr, r *ExampleGenerator) any {
300 if !hasMinMaxValidation(a) {
301 return nil
302 }
303 var (
304 minimum float64
305 maximum = math.Inf(1)
306 sign = 1
307 )
308 if a.Validation.ExclusiveMaximum != nil {
309 maximum = *a.Validation.ExclusiveMaximum
310 } else if a.Validation.Maximum != nil {
311 maximum = *a.Validation.Maximum
312 }
313 switch {
314 case a.Validation.ExclusiveMinimum != nil:
315 minimum = *a.Validation.ExclusiveMinimum
316 case a.Validation.Minimum != nil:
317 minimum = *a.Validation.Minimum
318 default:
319 sign = -1
320 minimum = maximum
321 maximum = math.Inf(1)
322 }
323
324 if math.IsInf(maximum, 1) {
325 switch a.Type.Kind() {
326 case IntKind:
327 return sign * (r.Int() + int(minimum))
328 case Int32Kind:
329 return int32(sign) * (r.Int32() + int32(minimum))
330 case Int64Kind:
331 return int64(sign) * (r.Int64() + int64(minimum))
332 case UIntKind:
333 return r.UInt() + uint(minimum)
334 case UInt32Kind:
335 return r.UInt32() + uint32(minimum)
336 case UInt64Kind:
337 return r.UInt64() + uint64(minimum)
338 case Float32Kind:
339 return float32(sign) * (r.Float32() + float32(minimum))
340 default:
341 return float64(sign) * (r.Float64() + minimum)
342 }
343 }
344 if minimum < maximum {
345 delta := maximum - minimum
346 switch a.Type.Kind() {
347 case IntKind:
348 return r.Int()%int(delta) + int(minimum)
349 case Int32Kind:
350 return r.Int32()%int32(delta) + int32(minimum)
351 case Int64Kind:
352 return r.Int64()%int64(delta) + int64(minimum)
353 case UIntKind:
354 return r.UInt()%uint(delta) + uint(minimum)
355 case UInt32Kind:
356 return r.UInt32()%uint32(delta) + uint32(minimum)

Callers 1

ExampleMethod · 0.85

Calls 10

hasMinMaxValidationFunction · 0.85
KindMethod · 0.65
IntMethod · 0.65
Int32Method · 0.65
Int64Method · 0.65
UIntMethod · 0.65
UInt32Method · 0.65
UInt64Method · 0.65
Float32Method · 0.65
Float64Method · 0.65

Tested by

no test coverage detected