diff --git a/Sources/XCTest/Public/XCTAssert.swift b/Sources/XCTest/Public/XCTAssert.swift
index dd94dd8..f16b10b 100644
--- a/Sources/XCTest/Public/XCTAssert.swift
+++ b/Sources/XCTest/Public/XCTAssert.swift
@@ -169,61 +169,6 @@
     }
 }
 
-public func XCTAssertEqual<T: Equatable>(_ expression1: @autoclosure () throws -> T?, _ expression2: @autoclosure () throws -> T?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.equal, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 == value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(String(describing: value1))\") is not equal to (\"\(String(describing: value2))\")")
-        }
-    }
-}
-
-public func XCTAssertEqual<T: Equatable>(_ expression1: @autoclosure () throws -> ArraySlice<T>, _ expression2: @autoclosure () throws -> ArraySlice<T>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.equal, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 == value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertEqual<T: Equatable>(_ expression1: @autoclosure () throws -> ContiguousArray<T>, _ expression2: @autoclosure () throws -> ContiguousArray<T>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.equal, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 == value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertEqual<T: Equatable>(_ expression1: @autoclosure () throws -> [T], _ expression2: @autoclosure () throws -> [T], _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.equal, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 == value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertEqual<T, U: Equatable>(_ expression1: @autoclosure () throws -> [T: U], _ expression2: @autoclosure () throws -> [T: U], _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.equal, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 == value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\")")
-        }
-    }
-}
-
 public func XCTAssertEqual<T: FloatingPoint>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
     _XCTEvaluateAssertion(.equalWithAccuracy, message: message, file: file, line: line) {
         let (value1, value2) = (try expression1(), try expression2())
@@ -317,61 +262,6 @@
     }
 }
 
-public func XCTAssertNotEqual<T: Equatable>(_ expression1: @autoclosure () throws -> T?, _ expression2: @autoclosure () throws -> T?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.notEqual, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 != value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(String(describing: value1))\") is equal to (\"\(String(describing: value2))\")")
-        }
-    }
-}
-
-public func XCTAssertNotEqual<T: Equatable>(_ expression1: @autoclosure () throws -> ContiguousArray<T>, _ expression2: @autoclosure () throws -> ContiguousArray<T>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.notEqual, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 != value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertNotEqual<T: Equatable>(_ expression1: @autoclosure () throws -> ArraySlice<T>, _ expression2: @autoclosure () throws -> ArraySlice<T>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.notEqual, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 != value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertNotEqual<T: Equatable>(_ expression1: @autoclosure () throws -> [T], _ expression2: @autoclosure () throws -> [T], _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.notEqual, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 != value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\")")
-        }
-    }
-}
-
-public func XCTAssertNotEqual<T, U: Equatable>(_ expression1: @autoclosure () throws -> [T: U], _ expression2: @autoclosure () throws -> [T: U], _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
-    _XCTEvaluateAssertion(.notEqual, message: message, file: file, line: line) {
-        let (value1, value2) = (try expression1(), try expression2())
-        if value1 != value2 {
-            return .success
-        } else {
-            return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\")")
-        }
-    }
-}
-
 public func XCTAssertNotEqual<T: FloatingPoint>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) {
     _XCTEvaluateAssertion(.notEqualWithAccuracy, message: message, file: file, line: line) {
         let (value1, value2) = (try expression1(), try expression2())
