Merge pull request #668 from UberJason/master

Fixes for Date Manipulations
diff --git a/Foundation/DateComponents.swift b/Foundation/DateComponents.swift
index aa16723..9cde6ab 100644
--- a/Foundation/DateComponents.swift
+++ b/Foundation/DateComponents.swift
@@ -189,7 +189,7 @@
     
     /// Set to true if these components represent a leap month.
     public var isLeapMonth: Bool? {
-        get { return _handle.map { $0.isLeapMonth } }
+        get { return _handle.map { $0.leapMonthSet ? $0.isLeapMonth : nil } }
         set {
             _applyMutation {
                 // Technically, the underlying class does not support setting isLeapMonth to nil, but it could - so we leave the API consistent.
diff --git a/Foundation/NSCalendar.swift b/Foundation/NSCalendar.swift
index d6d0d4f..624b103 100644
--- a/Foundation/NSCalendar.swift
+++ b/Foundation/NSCalendar.swift
@@ -461,7 +461,7 @@
         _convert(comps.weekday, type: "E", vector: &vector, compDesc: &compDesc)
         _convert(comps.weekdayOrdinal, type: "F", vector: &vector, compDesc: &compDesc)
         _convert(comps.month, type: "M", vector: &vector, compDesc: &compDesc)
-        _convert(comps.isLeapMonth, type: "L", vector: &vector, compDesc: &compDesc)
+        _convert(comps.isLeapMonth, type: "l", vector: &vector, compDesc: &compDesc)
         _convert(comps.day, type: "d", vector: &vector, compDesc: &compDesc)
         _convert(comps.hour, type: "H", vector: &vector, compDesc: &compDesc)
         _convert(comps.minute, type: "m", vector: &vector, compDesc: &compDesc)
@@ -579,7 +579,7 @@
     
     open func date(byAdding comps: DateComponents, to date: Date, options opts: Options = []) -> Date? {
         var (vector, compDesc) = _convert(comps)
-        var at: CFAbsoluteTime = 0.0
+        var at: CFAbsoluteTime = date.timeIntervalSinceReferenceDate
         
         let res: Bool = withUnsafeMutablePointer(to: &at) { t in
             return vector.withUnsafeMutableBufferPointer { (vectorBuffer: inout UnsafeMutableBufferPointer<Int32>) in
diff --git a/TestFoundation/TestNSCalendar.swift b/TestFoundation/TestNSCalendar.swift
index 71e2ec4..3b11faa 100644
--- a/TestFoundation/TestNSCalendar.swift
+++ b/TestFoundation/TestNSCalendar.swift
@@ -24,6 +24,7 @@
             ("test_gettingDatesOnHebrewCalendar", test_gettingDatesOnHebrewCalendar ),
             ("test_gettingDatesOnChineseCalendar", test_gettingDatesOnChineseCalendar),
             ("test_copy",test_copy),
+            ("test_addingDates", test_addingDates)
             // Disabled because this fails on linux https://bugs.swift.org/browse/SR-320
             // ("test_currentCalendarRRstability", test_currentCalendarRRstability),
         ]
@@ -89,6 +90,18 @@
         XCTAssertEqual(copy.firstWeekday, 2)
         XCTAssertEqual(copy.minimumDaysInFirstWeek, 2)
     }
+    
+    func test_addingDates() {
+        let calendar = Calendar(identifier: .gregorian)
+        let thisDay = calendar.date(from: DateComponents(year: 2016, month: 10, day: 4))!
+        let diffComponents = DateComponents(day: 1)
+        let dayAfter = calendar.date(byAdding: diffComponents, to: thisDay)
+        
+        let dayAfterComponents = calendar.dateComponents([.year, .month, .day], from: dayAfter!)
+        XCTAssertEqual(dayAfterComponents.year, 2016)
+        XCTAssertEqual(dayAfterComponents.month, 10)
+        XCTAssertEqual(dayAfterComponents.day, 5)
+    }
 }
 
 class TestNSDateComponents: XCTestCase {