1010//
1111//===----------------------------------------------------------------------===//
1212
13- #if canImport(TestSupport)
14- import TestSupport
15- #endif
13+ import Testing
1614
1715#if FOUNDATION_FRAMEWORK
1816@testable import Foundation
@@ -21,15 +19,16 @@ import TestSupport
2119@testable import FoundationEssentials
2220#endif // FOUNDATION_FRAMEWORK
2321
24- final class CalendarRecurrenceRuleTests : XCTestCase {
22+ @Suite ( " Calendar RecurrenceRule " )
23+ private struct CalendarRecurrenceRuleTests {
2524 /// A Gregorian calendar with a time zone set to California
2625 var gregorian : Calendar = {
2726 var gregorian = Calendar ( identifier: . gregorian)
2827 gregorian. timeZone = . init( identifier: " US/Pacific " ) !
2928 return gregorian
3029 } ( )
3130
32- func testYearlyRecurrenceInLunarCalendar ( ) {
31+ @ Test func yearlyRecurrenceInLunarCalendar ( ) {
3332 // Find the first day of the lunar new year
3433 let start = Date ( timeIntervalSince1970: 1726876800.0 ) // 2024-09-21T00:00:00-0000
3534 let end = Date ( timeIntervalSince1970: 1855699200.0 ) // 2028-10-21T00:00:00-0000
@@ -50,10 +49,10 @@ final class CalendarRecurrenceRuleTests: XCTestCase {
5049 Date ( timeIntervalSince1970: 1832508000.0 ) , // 2028-01-26T14:00:00-0000
5150 ]
5251
53- XCTAssertEqual ( results, expectedResults)
52+ #expect ( results == expectedResults)
5453 }
5554
56- func testExpandToLeapMonths ( ) {
55+ @ Test func expandToLeapMonths ( ) {
5756 var lunarCalendar = Calendar ( identifier: . chinese)
5857 lunarCalendar. timeZone = . gmt
5958
@@ -64,14 +63,14 @@ final class CalendarRecurrenceRuleTests: XCTestCase {
6463 rule. daysOfTheMonth = [ 1 ]
6564 var sequence = rule. recurrences ( of: start) . makeIterator ( )
6665
67- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
68- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1786579200.0 ) ) // 2026-08-13T00:00:00-0000 (Seventh month)
69- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1817164800.0 ) ) // 2027-08-02T00:00:00-0000 (Seventh month)
70- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1850342400.0 ) ) // 2028-08-20T00:00:00-0000 (Seventh month)
71- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1881014400.0 ) ) // 2029-08-10T00:00:00-0000 (Seventh month)
66+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
67+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1786579200.0 ) ) // 2026-08-13T00:00:00-0000 (Seventh month)
68+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1817164800.0 ) ) // 2027-08-02T00:00:00-0000 (Seventh month)
69+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1850342400.0 ) ) // 2028-08-20T00:00:00-0000 (Seventh month)
70+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1881014400.0 ) ) // 2029-08-10T00:00:00-0000 (Seventh month)
7271 }
7372
74- func testStartFromLeapMonth ( ) {
73+ @ Test func startFromLeapMonth ( ) {
7574 var lunarCalendar = Calendar ( identifier: . chinese)
7675 lunarCalendar. timeZone = . gmt
7776
@@ -82,29 +81,29 @@ final class CalendarRecurrenceRuleTests: XCTestCase {
8281 let rule = Calendar . RecurrenceRule ( calendar: lunarCalendar, frequency: . yearly, matchingPolicy: . nextTimePreservingSmallerComponents)
8382 var sequence = rule. recurrences ( of: start) . makeIterator ( )
8483
85- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
86- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1786579200.0 ) ) // 2026-08-13T00:00:00-0000 (Seventh month)
87- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1817164800.0 ) ) // 2027-08-02T00:00:00-0000 (Seventh month)
88- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1850342400.0 ) ) // 2028-08-20T00:00:00-0000 (Seventh month)
89- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1881014400.0 ) ) // 2029-08-10T00:00:00-0000 (Seventh month)
90- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1911600000.0 ) ) // 2030-07-30T00:00:00-0000 (Seventh month)
91- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1944777600.0 ) ) // 2031-08-18T00:00:00-0000 (Seventh month)
92- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 1975363200.0 ) ) // 2032-08-06T00:00:00-0000 (Seventh month)
93- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2005948800.0 ) ) // 2033-07-26T00:00:00-0000 (Seventh month)
94- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2039126400.0 ) ) // 2034-08-14T00:00:00-0000 (Seventh month)
95- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2069798400.0 ) ) // 2035-08-04T00:00:00-0000 (Seventh month)
96- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2100384000.0 ) ) // 2036-07-23T00:00:00-0000 (Sixth leap month)
97- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2133561600.0 ) ) // 2037-08-11T00:00:00-0000 (Seventh month)
98- XCTAssertEqual ( sequence. next ( ) , Date ( timeIntervalSince1970: 2164233600.0 ) ) // 2038-08-01T00:00:00-0000 (Seventh month)
84+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
85+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1786579200.0 ) ) // 2026-08-13T00:00:00-0000 (Seventh month)
86+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1817164800.0 ) ) // 2027-08-02T00:00:00-0000 (Seventh month)
87+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1850342400.0 ) ) // 2028-08-20T00:00:00-0000 (Seventh month)
88+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1881014400.0 ) ) // 2029-08-10T00:00:00-0000 (Seventh month)
89+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1911600000.0 ) ) // 2030-07-30T00:00:00-0000 (Seventh month)
90+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1944777600.0 ) ) // 2031-08-18T00:00:00-0000 (Seventh month)
91+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 1975363200.0 ) ) // 2032-08-06T00:00:00-0000 (Seventh month)
92+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2005948800.0 ) ) // 2033-07-26T00:00:00-0000 (Seventh month)
93+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2039126400.0 ) ) // 2034-08-14T00:00:00-0000 (Seventh month)
94+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2069798400.0 ) ) // 2035-08-04T00:00:00-0000 (Seventh month)
95+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2100384000.0 ) ) // 2036-07-23T00:00:00-0000 (Sixth leap month)
96+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2133561600.0 ) ) // 2037-08-11T00:00:00-0000 (Seventh month)
97+ #expect ( sequence. next ( ) == Date ( timeIntervalSince1970: 2164233600.0 ) ) // 2038-08-01T00:00:00-0000 (Seventh month)
9998
10099 // A strict recurrence only matches in years with leap months
101100 let strictRule = Calendar . RecurrenceRule ( calendar: lunarCalendar, frequency: . yearly, matchingPolicy: . strict)
102101 var strictSequence = strictRule. recurrences ( of: start) . makeIterator ( )
103- XCTAssertEqual ( strictSequence. next ( ) , Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
104- XCTAssertEqual ( strictSequence. next ( ) , Date ( timeIntervalSince1970: 2100384000.0 ) ) // 2036-07-23T00:00:00-0000 (Sixth leap month)
102+ #expect ( strictSequence. next ( ) == Date ( timeIntervalSince1970: 1753401600.0 ) ) // 2025-07-25T00:00:00-0000 (Sixth leap month)
103+ #expect ( strictSequence. next ( ) == Date ( timeIntervalSince1970: 2100384000.0 ) ) // 2036-07-23T00:00:00-0000 (Sixth leap month)
105104 }
106105
107- func testDaylightSavingsRepeatedTimePolicyFirst ( ) {
106+ @ Test func daylightSavingsRepeatedTimePolicyFirst ( ) {
108107 let start = Date ( timeIntervalSince1970: 1730535600.0 ) // 2024-11-02T01:20:00-0700
109108 var rule = Calendar . RecurrenceRule ( calendar: gregorian, frequency: . daily)
110109 rule. repeatedTimePolicy = . first
@@ -117,10 +116,10 @@ final class CalendarRecurrenceRuleTests: XCTestCase {
117116 /// 02:00 PDT)
118117 Date ( timeIntervalSince1970: 1730712000.0 ) , // 2024-11-04T01:20:00-0800
119118 ]
120- XCTAssertEqual ( results, expectedResults)
119+ #expect ( results == expectedResults)
121120 }
122121
123- func testDaylightSavingsRepeatedTimePolicyLast ( ) {
122+ @ Test func daylightSavingsRepeatedTimePolicyLast ( ) {
124123 let start = Date ( timeIntervalSince1970: 1730535600.0 ) // 2024-11-02T01:20:00-0700
125124 var rule = Calendar . RecurrenceRule ( calendar: gregorian, frequency: . daily)
126125 rule. repeatedTimePolicy = . last
@@ -133,6 +132,6 @@ final class CalendarRecurrenceRuleTests: XCTestCase {
133132 Date ( timeIntervalSince1970: 1730625600.0 ) , // 2024-11-03T01:20:00-0800
134133 Date ( timeIntervalSince1970: 1730712000.0 ) , // 2024-11-04T01:20:00-0800
135134 ]
136- XCTAssertEqual ( results, expectedResults)
135+ #expect ( results == expectedResults)
137136 }
138137}
0 commit comments