123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- discard """
- cmd: "nim c -d:release --rangeChecks:on $file"
- disabled: "windows"
- output: '''StrictPositiveRange
- float
- range fail expected
- range fail expected
- '''
- """
- import math, fenv
- type
- Positive = range[0.0..Inf]
- StrictPositive = range[minimumPositiveValue(float)..Inf]
- Negative32 = range[-maximumPositiveValue(float32) .. -1.0'f32]
- proc myoverload(x: float) =
- echo "float"
- proc myoverload(x: Positive) =
- echo "PositiveRange"
- proc myoverload(x: StrictPositive) =
- echo "StrictPositiveRange"
- let x = 9.0.StrictPositive
- myoverload(x)
- myoverload(9.0)
- doAssert(sqrt(x) == 3.0)
- var z = -10.0
- try:
- myoverload(StrictPositive(z))
- except:
- echo "range fail expected"
- proc strictOnlyProc(x: StrictPositive): bool =
- if x > 1.0: true else: false
- let x2 = 5.0.Positive
- doAssert(strictOnlyProc(x2))
- try:
- let x4 = 0.0.Positive
- discard strictOnlyProc(x4)
- except:
- echo "range fail expected"
|