Made the IpAddress comparable, which is the front door to the type IpRange.
Signed-off-by: Adam Rocska <adam.rocska@adams.solutions>
This commit is contained in:
parent
d646b47877
commit
6abcb9669a
|
@ -190,3 +190,28 @@ public func ==(lhs: IpAddress, rhs: IpAddress) -> Bool {
|
|||
case (.v6, .v4): return IpAddress.v6(rhs) == lhs
|
||||
}
|
||||
}
|
||||
|
||||
extension IpAddress: Comparable {
|
||||
public static func <(lhs: IpAddress, rhs: IpAddress) -> Bool {
|
||||
let left: Data
|
||||
let right: Data
|
||||
switch (lhs, rhs) {
|
||||
case (.v4, .v6):
|
||||
left = IpAddress.v6(lhs).data
|
||||
right = rhs.data
|
||||
case (.v6, .v4):
|
||||
left = lhs.data
|
||||
right = IpAddress.v6(rhs).data
|
||||
default:
|
||||
left = lhs.data
|
||||
right = rhs.data
|
||||
}
|
||||
var rightSideIndex = right.startIndex
|
||||
for leftByte in left {
|
||||
defer { rightSideIndex = right.index(after: rightSideIndex) }
|
||||
let rightByte = right[rightSideIndex]
|
||||
if leftByte < rightByte { return true }
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
|
@ -234,4 +234,21 @@ class IpAddressTest: XCTestCase {
|
|||
XCTAssertEqual("192.168.6.1", IpAddress("192.168.6.1").description)
|
||||
}
|
||||
|
||||
func testComparability() {
|
||||
XCTAssertGreaterThan(IpAddress("192.168.0.1"), IpAddress("192.168.0.0"))
|
||||
XCTAssertGreaterThan(IpAddress("192.168.1.0"), IpAddress("192.168.0.0"))
|
||||
XCTAssertGreaterThan(IpAddress("192.169.0.0"), IpAddress("192.168.0.0"))
|
||||
XCTAssertGreaterThan(IpAddress("193.168.0.0"), IpAddress("192.168.0.0"))
|
||||
XCTAssertGreaterThan(IpAddress("193.168.0.0"), IpAddress("80.99.18.166"))
|
||||
XCTAssertLessThan(IpAddress("192.168.0.0"), IpAddress("192.168.0.1"))
|
||||
XCTAssertLessThan(IpAddress("192.168.0.0"), IpAddress("192.168.1.0"))
|
||||
XCTAssertLessThan(IpAddress("192.168.0.0"), IpAddress("192.169.0.0"))
|
||||
XCTAssertLessThan(IpAddress("192.168.0.0"), IpAddress("193.168.0.0"))
|
||||
XCTAssertLessThan(IpAddress("80.99.18.166"), IpAddress("193.168.0.0"))
|
||||
XCTAssertGreaterThan(IpAddress("0000:0000:0000:0000:0000:ffff:5063:12a7"), IpAddress("::ffff:80.99.18.166"))
|
||||
XCTAssertGreaterThan(IpAddress("0000:0000:0000:0000:0000:ffff:5063:12a7"), IpAddress("80.99.18.166"))
|
||||
XCTAssertLessThan(IpAddress("::ffff:80.99.18.166"), IpAddress("0000:0000:0000:0000:0000:ffff:5063:12a7"))
|
||||
XCTAssertLessThan(IpAddress("80.99.18.166"), IpAddress("0000:0000:0000:0000:0000:ffff:5063:12a7"))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue