 
 class ComparableTests : XCTestCase {
     func testLessThanOperator() {
-        let tests = [
-            (lhs: UInt128.min, rhs: UInt128(1), result: true),
-            (lhs: UInt128.min, rhs: UInt128(upperBits: 1, lowerBits: 0), result: true),
-            (lhs: UInt128(1), rhs: UInt128(upperBits: 1, lowerBits: 0), result: true),
-            (lhs: UInt128(UInt64.max), rhs: UInt128.max, result: true),
-            (lhs: UInt128.min, rhs: UInt128.min, result: false),
-            (lhs: UInt128.max, rhs: UInt128.max, result: false),
-            (lhs: UInt128.max, rhs: UInt128(UInt64.max), result: false)]
+        var tests = [(lhs: UInt128.min, rhs: UInt128(1), result: true)]
+        tests.append((lhs: UInt128.min, rhs: UInt128(upperBits: 1, lowerBits: 0), result: true))
+        tests.append((lhs: UInt128(1), rhs: UInt128(upperBits: 1, lowerBits: 0), result: true))
+        tests.append((lhs: UInt128(UInt64.max), rhs: UInt128.max, result: true))
+        tests.append((lhs: UInt128.min, rhs: UInt128.min, result: false))
+        tests.append((lhs: UInt128.max, rhs: UInt128.max, result: false))
+        tests.append((lhs: UInt128.max, rhs: UInt128(UInt64.max), result: false))
         
         tests.forEach { test in
             XCTAssertEqual(test.lhs < test.rhs, test.result)

}

class HashableTests : XCTestCase {
    let tests = [
        (input: UInt128(), result: 0),
        (input: UInt128(1), result: 1),
        (input: UInt128(Int.max), result: Int.max),
        (input: try! UInt128("85070591730234615862769194512323794261"), result: -1537228672809129302)]
    
    func testHashValueProperty() {
        tests.forEach { test in
            XCTAssertEqual(test.input.hashValue, test.result)
        }
    }
}

class NumericTests : XCTestCase {
    let additionTests = [
        // 0 + 0 = 0
        (augend: UInt128.min, addend: UInt128.min, sum: UInt128.min),
        // 1 + 1 = 2
        (augend: UInt128(1), addend: UInt128(1), sum: UInt128(2)),
        // UInt128.max + 0 = UInt128.max
        (augend: UInt128.max, addend: UInt128.min, sum: UInt128.max),
        // UInt64.max + 1 = UInt64.max + 1
        (augend: UInt128(UInt64.max), addend: UInt128(1), sum: UInt128(upperBits: 1, lowerBits: 0))]
    
    func testAdditionOperator() {
        additionTests.forEach { test in
            let sum = test.augend + test.addend
            XCTAssertEqual(
                sum, test.sum,

    }
    
    func testMaskingRightShiftEqualOperatorEdgeCases() {
        var tests = [(input: UInt128(upperBits: 0, lowerBits: 2),
                      shiftWidth: UInt64(129),
                      expected: UInt128(upperBits: 0, lowerBits: 1))]
        tests.append((input: UInt128(upperBits: UInt64.max, lowerBits: 0),
                      shiftWidth: UInt64(128),
                      expected: UInt128(upperBits: UInt64.max, lowerBits: 0)))
        tests.append((input: UInt128(upperBits: 0, lowerBits: 1),
                      shiftWidth: UInt64(0),
                      expected: UInt128(upperBits: 0, lowerBits: 1)))
        
        tests.forEach { test in
            var testValue = test.input
