Merge pull request #926 from rxwei/master

diff --git a/Foundation/NSOrderedSet.swift b/Foundation/NSOrderedSet.swift
index 9f85df1..2be3023 100644
--- a/Foundation/NSOrderedSet.swift
+++ b/Foundation/NSOrderedSet.swift
@@ -148,7 +148,7 @@
     open func objects(at indexes: IndexSet) -> [Any] {
         var entries = [Any]()
         for idx in indexes {
-            if idx >= count && idx < 0 {
+            guard idx < count && idx >= 0 else {
                 fatalError("\(self): Index out of bounds")
             }
             entries.append(object(at: idx))
@@ -338,12 +338,12 @@
 open class NSMutableOrderedSet : NSOrderedSet {
     
     open func insert(_ object: Any, at idx: Int) {
-        guard idx < count && idx >= 0 else {
+        guard idx <= count && idx >= 0 else {
             fatalError("\(self): Index out of bounds")
         }
 
         let value = _SwiftValue.store(object)
-        
+
         if contains(value) {
             return
         }
diff --git a/TestFoundation/TestNSOrderedSet.swift b/TestFoundation/TestNSOrderedSet.swift
index 10761b3..0591eb2 100644
--- a/TestFoundation/TestNSOrderedSet.swift
+++ b/TestFoundation/TestNSOrderedSet.swift
@@ -43,7 +43,8 @@
             ("test_ReplaceObject", test_ReplaceObject),
             ("test_ExchangeObjects", test_ExchangeObjects),
             ("test_MoveObjects", test_MoveObjects),
-            ("test_InserObjects", test_InsertObjects),
+            ("test_InsertObjects", test_InsertObjects),
+            ("test_Insert", test_Insert),
             ("test_SetObjectAtIndex", test_SetObjectAtIndex),
             ("test_RemoveObjectsInRange", test_RemoveObjectsInRange),
             ("test_ReplaceObjectsAtIndexes", test_ReplaceObjectsAtIndexes),
@@ -252,6 +253,16 @@
         XCTAssertEqual(set[4] as? String, "baz")
     }
 
+    func test_Insert() {
+        let set = NSMutableOrderedSet()
+        set.insert("foo", at: 0)
+        XCTAssertEqual(set.count, 1)
+        XCTAssertEqual(set[0] as? String, "foo")
+        set.insert("bar", at: 1)
+        XCTAssertEqual(set.count, 2)
+        XCTAssertEqual(set[1] as? String, "bar")
+    }
+
     func test_SetObjectAtIndex() {
         let set = NSMutableOrderedSet(arrayLiteral: "foo", "bar", "baz")
         set.setObject("123", at: 1)