Merge pull request #1002 from norio-nomura/fix-sr-4903-on-31

diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift
index ca1a5cb..600e53b 100644
--- a/Foundation/NSArray.swift
+++ b/Foundation/NSArray.swift
@@ -310,6 +310,13 @@
                 if val1 != val2 {
                     return false
                 }
+            } else if let val1 = object(at: idx) as? _ObjectBridgeable,
+                let val2 = otherArray[idx] as? _ObjectBridgeable {
+                if !(val1._bridgeToAnyObject() as! NSObject).isEqual(val2._bridgeToAnyObject()) {
+                    return false
+                }
+            } else {
+                return false
             }
         }
         
diff --git a/TestFoundation/TestNSArray.swift b/TestFoundation/TestNSArray.swift
index c905e52..e6b974e 100644
--- a/TestFoundation/TestNSArray.swift
+++ b/TestFoundation/TestNSArray.swift
@@ -421,6 +421,12 @@
 
         XCTAssertFalse(array1.isEqual(nil))
         XCTAssertFalse(array1.isEqual(NSObject()))
+
+        let objectsArray1 = NSArray(array: [NSArray(array: [0])])
+        let objectsArray2 = NSArray(array: [NSArray(array: [1])])
+        XCTAssertFalse(objectsArray1 == objectsArray2)
+        XCTAssertFalse(objectsArray1.isEqual(objectsArray2))
+        XCTAssertFalse(objectsArray1.isEqual(to: Array(objectsArray2)))
     }
 
     /// - Note: value type conversion will destroy identity. So use index(of:) instead of indexOfObjectIdentical(to:)
diff --git a/TestFoundation/TestNSDictionary.swift b/TestFoundation/TestNSDictionary.swift
index ff415ef..096f0a6 100644
--- a/TestFoundation/TestNSDictionary.swift
+++ b/TestFoundation/TestNSDictionary.swift
@@ -134,6 +134,24 @@
 
         XCTAssertFalse(dict1.isEqual(nil))
         XCTAssertFalse(dict1.isEqual(NSObject()))
+
+        let nestedDict1 = NSDictionary(dictionary: [
+            "key.entities": [
+                ["key": 0]
+            ]
+        ])
+        let nestedDict2 = NSDictionary(dictionary: [
+            "key.entities": [
+                ["key": 1]
+            ]
+        ])
+        XCTAssertFalse(nestedDict1 == nestedDict2)
+        XCTAssertFalse(nestedDict1.isEqual(nestedDict2))
+        XCTAssertFalse(nestedDict1.isEqual(to: [
+            "key.entities": [
+                ["key": 1]
+            ]
+        ]))
     }
 
     func test_copying() {