Skip to content

Commit c794b7a

Browse files
committed
Implemented Comparable on NSOperatingSystemVersion with tests
1 parent 338f4bf commit c794b7a

File tree

2 files changed

+22
-20
lines changed

2 files changed

+22
-20
lines changed

Foundation/NSProcessInfo.swift

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public struct NSOperatingSystemVersion {
2020
public var majorVersion: Int
2121
public var minorVersion: Int
2222
public var patchVersion: Int
23+
2324
public init() {
2425
self.init(majorVersion: 0, minorVersion: 0, patchVersion: 0)
2526
}
@@ -31,6 +32,21 @@ public struct NSOperatingSystemVersion {
3132
}
3233
}
3334

35+
extension NSOperatingSystemVersion : Comparable {}
36+
37+
public func ==(lhs: NSOperatingSystemVersion, rhs: NSOperatingSystemVersion) -> Bool {
38+
let lhsTuple = (lhs.majorVersion, lhs.minorVersion, lhs.patchVersion)
39+
let rhsTuple = (rhs.majorVersion, rhs.minorVersion, rhs.patchVersion)
40+
41+
return lhsTuple == rhsTuple
42+
}
43+
44+
public func <(lhs: NSOperatingSystemVersion, rhs: NSOperatingSystemVersion) -> Bool {
45+
let lhsTuple = (lhs.majorVersion, lhs.minorVersion, lhs.patchVersion)
46+
let rhsTuple = (rhs.majorVersion, rhs.minorVersion, rhs.patchVersion)
47+
48+
return lhsTuple < rhsTuple
49+
}
3450

3551

3652
public class NSProcessInfo : NSObject {
@@ -123,26 +139,7 @@ public class NSProcessInfo : NSObject {
123139
}
124140

125141
public func isOperatingSystemAtLeastVersion(version: NSOperatingSystemVersion) -> Bool {
126-
let ourVersion = operatingSystemVersion
127-
if ourVersion.majorVersion < version.majorVersion {
128-
return false
129-
}
130-
if ourVersion.majorVersion > version.majorVersion {
131-
return true
132-
}
133-
if ourVersion.minorVersion < version.minorVersion {
134-
return false
135-
}
136-
if ourVersion.minorVersion > version.minorVersion {
137-
return true
138-
}
139-
if ourVersion.patchVersion < version.patchVersion {
140-
return false
141-
}
142-
if ourVersion.patchVersion > version.patchVersion {
143-
return true
144-
}
145-
return true
142+
return operatingSystemVersion >= version
146143
}
147144

148145
public var systemUptime: NSTimeInterval {

TestFoundation/TestNSProcessInfo.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ class TestNSProcessInfo : XCTestCase {
3434

3535
let version = processInfo.operatingSystemVersion
3636
XCTAssertNotNil(version.majorVersion != 0)
37+
38+
XCTAssertEqual(NSOperatingSystemVersion(), NSOperatingSystemVersion())
39+
XCTAssertEqual(NSOperatingSystemVersion(majorVersion: 0, minorVersion: 0, patchVersion: 0), NSOperatingSystemVersion())
40+
XCTAssertLessThan(NSOperatingSystemVersion(majorVersion: 0, minorVersion: 0, patchVersion: 1), NSOperatingSystemVersion(majorVersion: 0, minorVersion: 0, patchVersion: 2))
41+
XCTAssertGreaterThan(NSOperatingSystemVersion(majorVersion: 0, minorVersion: 0, patchVersion: 2), NSOperatingSystemVersion(majorVersion: 0, minorVersion: 0, patchVersion: 1)) //Guards against false positives in LT test
3742
}
3843

3944
func test_processName() {

0 commit comments

Comments
 (0)