Skip to content

Commit d30af16

Browse files
test coverage improvement reporting
1 parent 4f0c403 commit d30af16

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

examples/Constrained/Examples/Basic.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,6 @@ pairCant = constrained' $ \ [var| i |] [var| p |] ->
363363
, not_ $ k `elem_` lit [1..9]
364364
]
365365
]
366+
367+
signumPositive :: Specification Rational
368+
signumPositive = constrained $ \ x -> signum (x * 30) >=. 1

src/Constrained/NumOrd.hs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,33 @@ instance {-# OVERLAPPABLE #-} (HasSpec a, MaybeBounded a, Integral a, TypeSpec a
774774
then r - signum a
775775
else r
776776

777+
instance HasDivision (Ratio Integer) where
778+
doDivide = (/)
779+
780+
divideSpec 0 _ = TrueSpec
781+
divideSpec a (NumSpecInterval ml mu) = typeSpec ts
782+
where
783+
ts | a > 0 = NumSpecInterval ml' mu'
784+
| otherwise = NumSpecInterval mu' ml'
785+
ml' = adjustLowerBound <$> ml
786+
mu' = adjustUpperBound <$> mu
787+
adjustLowerBound l =
788+
let r = l / a
789+
l' = r * a
790+
in
791+
if l' < l
792+
then r + (l - l') * 2 / a
793+
else r
794+
795+
adjustUpperBound u =
796+
let r = u / a
797+
u' = r * a
798+
in
799+
if u < u'
800+
then r - (u' - u) * 2 / a
801+
else r
802+
803+
777804
instance HasDivision Float where
778805
doDivide = (/)
779806

test/Constrained/Tests.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ testAll = hspec $ tests False
6060
tests :: Bool -> Spec
6161
tests nightly =
6262
describe "constrained" . modifyMaxSuccess (\ms -> if nightly then ms * 10 else ms) $ do
63+
testSpec "signumPositive" signumPositive
6364
testSpec "setOfPairLetSpec" setOfPairLetSpec
6465
testSpec "setPair" setPair
6566
testSpec "mapElemSpec" mapElemSpec

0 commit comments

Comments
 (0)