[コピペ用] Resultのためのテスト関数群 [XCTest]

僕のためのコピペ用です。

```swift

func M_XCTAssertResultIsSuccess<T, E>(_ result: @autoclosure () -> Result<T, E>, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case .success: ()
    case .failure:
        XCTFail("M_XCTAssertResultIsSuccess faild: Reuslt is not Success.", file: file, line: line)
    }
}

func M_XCTAssertResultIsFailure<T, E>(_ result: @autoclosure () -> Result<T, E>, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case .failure: ()
    case .success:
        XCTFail("M_XCTAssertResultIsFailure faild: Reuslt is not Failure.", file: file, line: line)
    }
}

///
func M_XCTAssertResultEqualValue<T: Equatable, E>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .success(r):
        if r != value() {
            XCTFail("M_XCTAssertResultEqualValue faild: \(r) is not equal to \(value()).", file: file, line: line)
        }
    case .failure:
        XCTFail("M_XCTAssertResultEqualValue faild: result is Failure.", file: file, line: line)
    }
}

func M_XCTAssertResultEqualError<T, E: Equatable>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> E, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .failure(e):
        if e != value() {
            XCTFail("M_XCTAssertResultEqualError faild: \(e) is not equal to \(value()).", file: file, line: line)
        }
    case .success:
        XCTFail("M_XCTAssertResultEqualError faild: result is Success.", file: file, line: line)
    }
}

///
func M_XCTAssertResultGreaterThan<T: Comparable, E>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .success(r):
        if r <= value() {
            XCTFail("M_XCTAssertResultGreaterThan faild: \(r) is not greater than \(value()).", file: file, line: line)
        }
    case .failure:
        XCTFail("M_XCTAssertResultGreaterThan faild: result is Failure.", file: file, line: line)
    }
}

func M_XCTAssertResultGreaterThanOrEqual<T: Comparable, E>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .success(r):
        if r < value() {
            XCTFail("M_XCTAssertResultGreaterThanOrEqual faild: \(r) is not greater than or equal to \(value()).", file: file, line: line)
        }
    case .failure:
        XCTFail("M_XCTAssertResultGreaterThanOrEqual faild: result is Failure.", file: file, line: line)
    }
}

func M_XCTAssertResultLessThan<T: Comparable, E>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .success(r):
        if r >= value() {
            XCTFail("M_XCTAssertResultLessThan faild: \(r) is not less than \(value()).", file: file, line: line)
        }
    case .failure:
        XCTFail("M_XCTAssertResultLessThan faild: result is Failure.", file: file, line: line)
    }
}

func M_XCTAssertResultLessThanOrEqual<T: Comparable, E>(_ result: @autoclosure () -> Result<T, E>, _ value: @autoclosure () -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) {
    switch result() {
    case let .success(r):
        if r > value() {
            XCTFail("M_XCTAssertResultLessThanOrEqual faild: \(r) is not less than or equal to \(value()).", file: file, line: line)
        }
    case .failure:
        XCTFail("M_XCTAssertResultLessThanOrEqual faild: result is Failure.", file: file, line: line)
    }
}
```