From 573489aec6308fa0fcdf1b6bf414bb5058fe1672 Mon Sep 17 00:00:00 2001 From: Lennard Sprong Date: Fri, 23 Jan 2026 19:52:59 +0100 Subject: [PATCH] Fix Float shrinker skipping some values --- Sources/PropertyBased/Shrink+Float.swift | 2 +- Tests/PropertyBasedTests/ShrinkTests+Float.swift | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Sources/PropertyBased/Shrink+Float.swift b/Sources/PropertyBased/Shrink+Float.swift index 88e7dfa..0f6ed2f 100644 --- a/Sources/PropertyBased/Shrink+Float.swift +++ b/Sources/PropertyBased/Shrink+Float.swift @@ -25,7 +25,7 @@ extension Shrink { current = bound end = from - leap = (from / 2) - (bound / 2) + leap = from - bound if leap.isNaN { current = .nan } else if leap.isInfinite { diff --git a/Tests/PropertyBasedTests/ShrinkTests+Float.swift b/Tests/PropertyBasedTests/ShrinkTests+Float.swift index 94af89d..87056bc 100644 --- a/Tests/PropertyBasedTests/ShrinkTests+Float.swift +++ b/Tests/PropertyBasedTests/ShrinkTests+Float.swift @@ -24,6 +24,12 @@ import Testing try #require(results.count > 1) #expect(results.first == end) #expect(!results.contains(start)) + + if start > end { + #expect(results.allSatisfy { $0 >= end }) + } else { + #expect(results.allSatisfy { $0 <= end }) + } } @Test func testShrinkWithNan() throws { @@ -51,5 +57,9 @@ import Testing let shrink5 = (20).shrink(within: 1.5...10) #expect(shrink5.current == 1.5) + + var shrink6 = (10.0).shrink(towards: 0) + _ = shrink6.next() + #expect(shrink6.current == 5) } }