     }
     return result
 }
+// MARK: - Comparable
+extension UInt128: Comparable {}
+/// Comparable conforming operator that checks if the `lhs` UInt128 is
+/// less than the `rhs` UInt128.
+public func <(lhs: UInt128, rhs: UInt128) -> Bool {
+    if lhs.value.upperBits < rhs.value.upperBits {
+        return true
+    } else if lhs.value.upperBits == rhs.value.upperBits && lhs.value.lowerBits < rhs.value.lowerBits {
+        return true
+    }
+    return false
+}
+// MARK: - Equatable
+extension UInt128: Equatable {}
+/// Equatable conforming operator that checks if the lhs UInt128 is
+/// equal to the rhs UInt128.
+public func ==(lhs: UInt128, rhs: UInt128) -> Bool {
+    if lhs.value.lowerBits == rhs.value.lowerBits && lhs.value.upperBits == rhs.value.upperBits {
+        return true
+    }
+    return false
+}
+// MARK: - CustomStringConvertible
+extension UInt128: CustomStringConvertible {
+    public var description: String {
+        return self.toString()
+    }
+}
 // MARK: - Extend SignedIntegerType for UInt128
 extension SignedIntegerType {
     // TODO: Need to break this out into each Signed Type to check for overflows.

    default: return UInt128(0)
    }
}
/// Shifts `lhs`' bits right by `rhs` bits and returns the result.
public func >>(lhs: UInt128, rhs: UInt128) -> UInt128 {
    if rhs.value.upperBits > 0 || rhs.value.lowerBits > 128 {

    default: return UInt128(0)
    }
}
public func >>=(inout lhs: UInt128, rhs: UInt128) {
    lhs = lhs >> rhs
}
// MARK: IntegerArithmeticType Conformance
extension UInt128: IntegerArithmeticType {
    public func toIntMax() -> IntMax {
