MCPcopy Create free account
hub / github.com/gavv/httpexpect / InDeltaRelative

Method InDeltaRelative

number.go:321–421  ·  view source on GitHub ↗

InDeltaRelative succeeds if two numbers are within relative delta of each other. The relative delta is expressed as a decimal. For example, to determine if a number and a value are within 1% of each other, use 0.01. A number and a value are within relative delta if Abs(number-value) / Abs(number)

(value, delta float64)

Source from the content-addressed store, hash-verified

319// number := NewNumber(t, 123.0)
320// number.InDeltaRelative(126.5, 0.03)
321func (n *Number) InDeltaRelative(value, delta float64) *Number {
322 opChain := n.chain.enter("InDeltaRelative()")
323 defer opChain.leave()
324
325 if opChain.failed() {
326 return n
327 }
328
329 if math.IsNaN(delta) || math.IsInf(delta, 0) {
330 opChain.fail(AssertionFailure{
331 Type: AssertUsage,
332 Errors: []error{
333 fmt.Errorf("unexpected non-number delta argument: %v", delta),
334 },
335 })
336 return n
337 }
338
339 if delta < 0 {
340 opChain.fail(AssertionFailure{
341 Type: AssertUsage,
342 Errors: []error{
343 fmt.Errorf("unexpected negative delta argument: %v", delta),
344 },
345 })
346 return n
347 }
348
349 // Fail if any of the numbers is NaN with specific error message
350 anyNumIsNaN := math.IsNaN(n.value) || math.IsNaN(value)
351 if anyNumIsNaN {
352 var assertionErrors []error
353 assertionErrors = append(
354 assertionErrors,
355 errors.New("expected: can compare values with relative delta"),
356 )
357 if math.IsNaN(n.value) {
358 assertionErrors = append(
359 assertionErrors,
360 errors.New("actual value is NaN"),
361 )
362 }
363 if math.IsNaN(value) {
364 assertionErrors = append(
365 assertionErrors,
366 errors.New("expected value is NaN"),
367 )
368 }
369 opChain.fail(AssertionFailure{
370 Type: AssertEqual,
371 Actual: &AssertionValue{n.value},
372 Expected: &AssertionValue{value},
373 Delta: &AssertionValue{relativeDelta(delta)},
374 Errors: assertionErrors,
375 })
376 return n
377 }
378

Callers 2

TestNumber_FailedChainFunction · 0.80

Calls 7

relativeDeltaTypeAlias · 0.85
deltaRelativeErrorCheckFunction · 0.85
enterMethod · 0.80
leaveMethod · 0.80
failedMethod · 0.80
failMethod · 0.80
ErrorfMethod · 0.65

Tested by 2

TestNumber_FailedChainFunction · 0.64