Skip to content

Commit f7a4d2a

Browse files
authored
Migrate to Swift Testing
1 parent c37406b commit f7a4d2a

File tree

63 files changed

+2376
-1900
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2376
-1900
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ let package = Package(
66
name: "gis-tools",
77
platforms: [
88
.iOS(.v15),
9-
.macOS(.v13),
9+
.macOS(.v14),
1010
.tvOS(.v15),
1111
.watchOS(.v7),
1212
],

Sources/GISTools/Algorithms/Truncate.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ extension Coordinate3D {
3131
/// - Parameters:
3232
/// - precision: The coordinate decimal precision (default *6*)
3333
/// - removeAltitude: Whether to remove the coordinate's altitude value (default *false*)
34+
/// - removeM: Whether to remote the coordinate's `m` value (default *false*)
3435
public mutating func truncate(
3536
precision: Int,
3637
removeAltitude: Bool = false,
@@ -51,6 +52,7 @@ extension GeoJson {
5152
/// - Parameters:
5253
/// - precision: The coordinate decimal precision (default *6*)
5354
/// - removeAltitude: Whether to remove the coordinate's altitude value (default *false*)
55+
/// - removeM: Whether to remote the coordinate's `m` value (default *false*)
5456
public func truncated(
5557
precision: Int = 6,
5658
removeAltitude: Bool = false,
@@ -143,6 +145,7 @@ extension GeoJson {
143145
/// - Parameters:
144146
/// - precision: The coordinate decimal precision (default *6*)
145147
/// - removeAltitude: Whether to remove the coordinate's altitude value (default *false*)
148+
/// - removeM: Whether to remote the coordinate's `m` value (default *false*)
146149
public mutating func truncate(
147150
precision: Int = 6,
148151
removeAltitude: Bool = false,
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
@testable import GISTools
2-
import XCTest
2+
import Testing
33

4-
final class AlongTests: XCTestCase {
4+
struct AlongTests {
55

6-
func testAlong() {
7-
let lineString = TestData.lineString(package: "Along", name: "AlongLineString1")
6+
@Test
7+
func along() async throws {
8+
let lineString = try TestData.lineString(package: "Along", name: "AlongLineString1")
89

910
let distance1: Double = GISTool.convert(length: 1.0, from: .miles, to: .meters)!
1011
let distance2: Double = GISTool.convert(length: 100.0, from: .miles, to: .meters)!
1112

1213
let coordinate1: Coordinate3D = lineString.coordinateAlong(distance: distance1)
1314
let coordinate2: Coordinate3D = lineString.coordinateAlong(distance: distance2)
1415

15-
XCTAssertEqual(coordinate1, Coordinate3D(latitude: 38.88533832382329, longitude: -77.02418026178886))
16-
XCTAssertEqual(coordinate2, lineString.coordinates[lineString.coordinates.count - 1])
16+
#expect(coordinate1 == Coordinate3D(latitude: 38.88533832382329, longitude: -77.02418026178886))
17+
#expect(coordinate2 == lineString.coordinates[lineString.coordinates.count - 1])
1718
}
1819

1920
}
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
@testable import GISTools
2-
import XCTest
2+
import Testing
33

4-
final class AreaTests: XCTestCase {
4+
struct AreaTests {
55

6-
func testArea() throws {
7-
let polygon1 = try XCTUnwrap(Polygon([[
6+
@Test
7+
func area() async throws {
8+
let polygon1 = try #require(Polygon([[
89
Coordinate3D(x: 0.0, y: 0.0),
910
Coordinate3D(x: 100.0, y: 0.0),
1011
Coordinate3D(x: 100.0, y: 100.0),
1112
Coordinate3D(x: 0.0, y: 100.0),
1213
Coordinate3D(x: 0.0, y: 0.0)
1314
]]))
14-
let polygon2 = try XCTUnwrap(Polygon([[
15+
let polygon2 = try #require(Polygon([[
1516
Coordinate3D(x: 0.0, y: 0.0),
1617
Coordinate3D(x: 100.0, y: 0.0),
1718
Coordinate3D(x: 100.0, y: 100.0),
@@ -25,8 +26,8 @@ final class AreaTests: XCTestCase {
2526
Coordinate3D(x: 25.0, y: 25.0)
2627
]]))
2728

28-
XCTAssertEqual(polygon1.area, 10000.0, accuracy: 0.1)
29-
XCTAssertEqual(polygon2.area, 7500.0, accuracy: 0.1)
29+
#expect(abs(polygon1.area - 10000.0) < 0.1)
30+
#expect(abs(polygon2.area - 7500.0) < 0.1)
3031
}
3132

3233
}

Tests/GISToolsTests/Algorithms/BearingTests.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,29 @@
22
import CoreLocation
33
#endif
44
@testable import GISTools
5-
import XCTest
5+
import Testing
66

7-
final class BearingTests: XCTestCase {
7+
struct BearingTests {
88

9-
func testBearing() {
9+
@Test
10+
func bearing() async throws {
1011
let start = Coordinate3D(latitude: 45.0, longitude: -75.0)
1112
let end = Coordinate3D(latitude: 60.0, longitude: 20.0)
1213

1314
let initialBearing: CLLocationDegrees = start.bearing(to: end)
1415
let finalBearing: CLLocationDegrees = start.bearing(to: end, final: true)
1516

16-
XCTAssertEqual(initialBearing, 37.75, accuracy: 0.01)
17-
XCTAssertEqual(finalBearing, 120.01, accuracy: 0.01)
17+
#expect(abs(initialBearing - 37.75) < 0.01)
18+
#expect(abs(finalBearing - 120.01) < 0.01)
1819
}
1920

20-
func testBearingToAzimuth() {
21-
XCTAssertEqual(40.0.bearingToAzimuth, 40.0)
22-
XCTAssertEqual((-105.0).bearingToAzimuth, 255.0)
23-
XCTAssertEqual(410.0.bearingToAzimuth, 50.0)
24-
XCTAssertEqual((-200.0).bearingToAzimuth, 160.0)
25-
XCTAssertEqual((-395.0).bearingToAzimuth, 325.0)
21+
@Test
22+
func bearingToAzimuth() async throws {
23+
#expect(40.0.bearingToAzimuth == 40.0)
24+
#expect((-105.0).bearingToAzimuth == 255.0)
25+
#expect(410.0.bearingToAzimuth == 50.0)
26+
#expect((-200.0).bearingToAzimuth == 160.0)
27+
#expect((-395.0).bearingToAzimuth == 325.0)
2628
}
2729

2830
}
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
@testable import GISTools
2-
import XCTest
2+
import Testing
33

4-
final class BooleanClockwiseTests: XCTestCase {
4+
struct BooleanClockwiseTests {
55

6-
func testBooleanClockwise() {
6+
@Test
7+
func booleanClockwise() async throws {
78
let ring = Ring([
89
Coordinate3D(latitude: 0.0, longitude: 0.0),
910
Coordinate3D(latitude: 1.0, longitude: 1.0),
1011
Coordinate3D(latitude: 0.0, longitude: 1.0),
1112
Coordinate3D(latitude: 0.0, longitude: 0.0),
1213
])!
1314

14-
XCTAssertEqual(ring.isClockwise, true)
15-
XCTAssertEqual(ring.isCounterClockwise, false)
15+
#expect(ring.isClockwise)
16+
#expect(ring.isCounterClockwise == false)
1617
}
1718

18-
func testBooleanCounterClockwise() {
19+
@Test
20+
func booleanCounterClockwise() async throws {
1921
let ring = Ring([
2022
Coordinate3D(latitude: 0.0, longitude: 0.0),
2123
Coordinate3D(latitude: 0.0, longitude: 1.0),
2224
Coordinate3D(latitude: 1.0, longitude: 1.0),
2325
Coordinate3D(latitude: 0.0, longitude: 0.0),
2426
])!
2527

26-
XCTAssertEqual(ring.isClockwise, false)
27-
XCTAssertEqual(ring.isCounterClockwise, true)
28+
#expect(ring.isClockwise == false)
29+
#expect(ring.isCounterClockwise)
2830
}
2931

3032
}
Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,85 @@
11
@testable import GISTools
2-
import XCTest
2+
import Testing
33

4-
final class BooleanDisjointTests: XCTestCase {
4+
struct BooleanDisjointTests {
55

6-
func testTrue() {
7-
let point1 = TestData.point(package: "BooleanDisjoint", name: "Point1")
8-
let point2 = TestData.point(package: "BooleanDisjoint", name: "Point2")
9-
let multiPoint1 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint1")
10-
let multiPoint2 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint2")
11-
let multiPoint3 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint3")
12-
let lineString1 = TestData.lineString(package: "BooleanDisjoint", name: "LineString1")
13-
let lineString2 = TestData.lineString(package: "BooleanDisjoint", name: "LineString2")
14-
let polygon1 = TestData.polygon(package: "BooleanDisjoint", name: "Polygon1")
15-
let polygon2 = TestData.polygon(package: "BooleanDisjoint", name: "Polygon2")
16-
let multiPolygon1 = TestData.multiPolygon(package: "BooleanDisjoint", name: "MultiPolygon1")
6+
@Test
7+
func isTrue() async throws {
8+
let point1 = try TestData.point(package: "BooleanDisjoint", name: "Point1")
9+
let point2 = try TestData.point(package: "BooleanDisjoint", name: "Point2")
10+
let multiPoint1 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint1")
11+
let multiPoint2 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint2")
12+
let multiPoint3 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint3")
13+
let lineString1 = try TestData.lineString(package: "BooleanDisjoint", name: "LineString1")
14+
let lineString2 = try TestData.lineString(package: "BooleanDisjoint", name: "LineString2")
15+
let polygon1 = try TestData.polygon(package: "BooleanDisjoint", name: "Polygon1")
16+
let polygon2 = try TestData.polygon(package: "BooleanDisjoint", name: "Polygon2")
17+
let multiPolygon1 = try TestData.multiPolygon(package: "BooleanDisjoint", name: "MultiPolygon1")
1718

18-
XCTAssertTrue(point1.isDisjoint(with: point2))
19-
XCTAssertTrue(point1.isDisjoint(with: multiPoint2))
20-
XCTAssertTrue(point1.isDisjoint(with: lineString2))
21-
XCTAssertTrue(point2.isDisjoint(with: point1))
22-
XCTAssertTrue(point2.isDisjoint(with: polygon1))
23-
XCTAssertTrue(point2.isDisjoint(with: multiPolygon1))
19+
#expect(point1.isDisjoint(with: point2))
20+
#expect(point1.isDisjoint(with: multiPoint2))
21+
#expect(point1.isDisjoint(with: lineString2))
22+
#expect(point2.isDisjoint(with: point1))
23+
#expect(point2.isDisjoint(with: polygon1))
24+
#expect(point2.isDisjoint(with: multiPolygon1))
2425

25-
XCTAssertTrue(multiPoint1.isDisjoint(with: multiPoint2))
26-
XCTAssertTrue(multiPoint2.isDisjoint(with: point1))
27-
XCTAssertTrue(multiPoint2.isDisjoint(with: multiPoint1))
28-
XCTAssertTrue(multiPoint3.isDisjoint(with: polygon1))
26+
#expect(multiPoint1.isDisjoint(with: multiPoint2))
27+
#expect(multiPoint2.isDisjoint(with: point1))
28+
#expect(multiPoint2.isDisjoint(with: multiPoint1))
29+
#expect(multiPoint3.isDisjoint(with: polygon1))
2930

30-
XCTAssertTrue(lineString1.isDisjoint(with: lineString2))
31-
XCTAssertTrue(lineString1.isDisjoint(with: polygon1))
32-
XCTAssertTrue(lineString2.isDisjoint(with: point1))
33-
XCTAssertTrue(lineString2.isDisjoint(with: multiPoint1))
34-
XCTAssertTrue(lineString2.isDisjoint(with: lineString1))
31+
#expect(lineString1.isDisjoint(with: lineString2))
32+
#expect(lineString1.isDisjoint(with: polygon1))
33+
#expect(lineString2.isDisjoint(with: point1))
34+
#expect(lineString2.isDisjoint(with: multiPoint1))
35+
#expect(lineString2.isDisjoint(with: lineString1))
3536

36-
XCTAssertTrue(polygon1.isDisjoint(with: point2))
37-
XCTAssertTrue(polygon1.isDisjoint(with: multiPoint3))
38-
XCTAssertTrue(polygon1.isDisjoint(with: lineString1))
39-
XCTAssertTrue(polygon1.isDisjoint(with: polygon2))
40-
XCTAssertTrue(polygon2.isDisjoint(with: multiPolygon1))
41-
XCTAssertTrue(polygon2.isDisjoint(with: polygon1))
37+
#expect(polygon1.isDisjoint(with: point2))
38+
#expect(polygon1.isDisjoint(with: multiPoint3))
39+
#expect(polygon1.isDisjoint(with: lineString1))
40+
#expect(polygon1.isDisjoint(with: polygon2))
41+
#expect(polygon2.isDisjoint(with: multiPolygon1))
42+
#expect(polygon2.isDisjoint(with: polygon1))
4243

43-
XCTAssertTrue(multiPolygon1.isDisjoint(with: polygon2))
44-
XCTAssertTrue(multiPolygon1.isDisjoint(with: point2))
44+
#expect(multiPolygon1.isDisjoint(with: polygon2))
45+
#expect(multiPolygon1.isDisjoint(with: point2))
4546
}
4647

47-
func testFalse() {
48-
let point3 = TestData.point(package: "BooleanDisjoint", name: "Point3")
49-
let point4 = TestData.point(package: "BooleanDisjoint", name: "Point4")
50-
let multiPoint2 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint2")
51-
let multiPoint4 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint4")
52-
let multiPoint5 = TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint5")
53-
let lineString2 = TestData.lineString(package: "BooleanDisjoint", name: "LineString2")
54-
let lineString3 = TestData.lineString(package: "BooleanDisjoint", name: "LineString3")
55-
let lineString4 = TestData.lineString(package: "BooleanDisjoint", name: "LineString4")
56-
let polygon1 = TestData.polygon(package: "BooleanDisjoint", name: "Polygon1")
57-
let polygon3 = TestData.polygon(package: "BooleanDisjoint", name: "Polygon3")
58-
let multiPolygon1 = TestData.multiPolygon(package: "BooleanDisjoint", name: "MultiPolygon1")
48+
@Test
49+
func isFalse() async throws {
50+
let point3 = try TestData.point(package: "BooleanDisjoint", name: "Point3")
51+
let point4 = try TestData.point(package: "BooleanDisjoint", name: "Point4")
52+
let multiPoint2 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint2")
53+
let multiPoint4 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint4")
54+
let multiPoint5 = try TestData.multiPoint(package: "BooleanDisjoint", name: "MultiPoint5")
55+
let lineString2 = try TestData.lineString(package: "BooleanDisjoint", name: "LineString2")
56+
let lineString3 = try TestData.lineString(package: "BooleanDisjoint", name: "LineString3")
57+
let lineString4 = try TestData.lineString(package: "BooleanDisjoint", name: "LineString4")
58+
let polygon1 = try TestData.polygon(package: "BooleanDisjoint", name: "Polygon1")
59+
let polygon3 = try TestData.polygon(package: "BooleanDisjoint", name: "Polygon3")
60+
let multiPolygon1 = try TestData.multiPolygon(package: "BooleanDisjoint", name: "MultiPolygon1")
5961

60-
XCTAssertFalse(point3.isDisjoint(with: lineString2))
61-
XCTAssertFalse(point4.isDisjoint(with: lineString2))
62+
#expect(point3.isDisjoint(with: lineString2) == false)
63+
#expect(point4.isDisjoint(with: lineString2) == false)
6264

63-
XCTAssertFalse(multiPoint2.isDisjoint(with: multiPoint4))
64-
XCTAssertFalse(multiPoint4.isDisjoint(with: lineString2))
65-
XCTAssertFalse(multiPoint5.isDisjoint(with: polygon1))
65+
#expect(multiPoint2.isDisjoint(with: multiPoint4) == false)
66+
#expect(multiPoint4.isDisjoint(with: lineString2) == false)
67+
#expect(multiPoint5.isDisjoint(with: polygon1) == false)
6668

67-
XCTAssertFalse(lineString2.isDisjoint(with: point3))
68-
XCTAssertFalse(lineString2.isDisjoint(with: point4))
69-
XCTAssertFalse(lineString2.isDisjoint(with: lineString3))
70-
XCTAssertFalse(lineString2.isDisjoint(with: multiPoint4))
71-
XCTAssertFalse(lineString3.isDisjoint(with: lineString2))
72-
XCTAssertFalse(lineString3.isDisjoint(with: polygon1))
73-
XCTAssertFalse(lineString4.isDisjoint(with: polygon1))
69+
#expect(lineString2.isDisjoint(with: point3) == false)
70+
#expect(lineString2.isDisjoint(with: point4) == false)
71+
#expect(lineString2.isDisjoint(with: lineString3) == false)
72+
#expect(lineString2.isDisjoint(with: multiPoint4) == false)
73+
#expect(lineString3.isDisjoint(with: lineString2) == false)
74+
#expect(lineString3.isDisjoint(with: polygon1) == false)
75+
#expect(lineString4.isDisjoint(with: polygon1) == false)
7476

75-
XCTAssertFalse(polygon1.isDisjoint(with: multiPoint5))
76-
XCTAssertFalse(polygon1.isDisjoint(with: lineString3))
77-
XCTAssertFalse(polygon1.isDisjoint(with: lineString4))
78-
XCTAssertFalse(polygon3.isDisjoint(with: multiPolygon1))
77+
#expect(polygon1.isDisjoint(with: multiPoint5) == false)
78+
#expect(polygon1.isDisjoint(with: lineString3) == false)
79+
#expect(polygon1.isDisjoint(with: lineString4) == false)
80+
#expect(polygon3.isDisjoint(with: multiPolygon1) == false)
7981

80-
XCTAssertFalse(multiPolygon1.isDisjoint(with: polygon3))
82+
#expect(multiPolygon1.isDisjoint(with: polygon3) == false)
8183
}
8284

8385
}

0 commit comments

Comments
 (0)