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
|
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)
|
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