-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShrinkTests+Float.swift
More file actions
65 lines (50 loc) · 1.77 KB
/
Copy pathShrinkTests+Float.swift
File metadata and controls
65 lines (50 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//
// ShrinkTests+Float.swift
// PropertyBased
//
// Created by Lennard Sprong on 13/05/2025.
//
import Testing
@testable import PropertyBased
@Suite struct ShrinkFloatTests {
static let args: [Double] = [0, 5000.0, -4000.0, 1.0e40, -1.0e30, .infinity, -.infinity]
@Test(arguments: args, args)
func testShrinkTowardsZero(start: Double, end: Double) throws {
let results = Array(start.shrink(towards: end))
if start == end {
#expect(results.isEmpty)
return
}
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 {
let nan: Double = .nan
#expect(Array(nan.shrink(towards: 1)).isEmpty)
#expect(Array(nan.shrink(towards: -1)).isEmpty)
#expect(Array(1.shrink(towards: nan)).isEmpty)
#expect(Array((-1).shrink(towards: nan)).isEmpty)
#expect(Array(nan.shrink(towards: .signalingNaN)).isEmpty)
}
@Test func testShrinkTowardsBound() throws {
let shrink1 = (4.0).shrink(within: 2...)
#expect(shrink1.current == 2)
let shrink2 = (1.0).shrink(within: ...3)
#expect(shrink2.current == 0)
let shrink3 = (-5.0).shrink(within: ..<(-3))
#expect(shrink3.current < -3)
let shrink4 = (-5.0).shrink(within: -2 ... -1)
#expect(shrink4.current == -1)
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)
}
}