Skip to content

Commit 9dcaa4b

Browse files
authored
Fix Infallible CombineLatest arity helpers (#2520)
1 parent 565cc5f commit 9dcaa4b

File tree

4 files changed

+273
-7
lines changed

4 files changed

+273
-7
lines changed

RxSwift/Traits/Infallible/Infallible+CombineLatest+arity.swift

+7-7
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extension Infallible {
2929
}
3030
}
3131

32-
extension InfallibleType {
32+
extension InfallibleType where Element == Any {
3333
/**
3434
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
3535

@@ -67,7 +67,7 @@ extension Infallible {
6767
}
6868
}
6969

70-
extension InfallibleType {
70+
extension InfallibleType where Element == Any {
7171
/**
7272
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
7373

@@ -105,7 +105,7 @@ extension Infallible {
105105
}
106106
}
107107

108-
extension InfallibleType {
108+
extension InfallibleType where Element == Any {
109109
/**
110110
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
111111

@@ -143,7 +143,7 @@ extension Infallible {
143143
}
144144
}
145145

146-
extension InfallibleType {
146+
extension InfallibleType where Element == Any {
147147
/**
148148
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
149149

@@ -181,7 +181,7 @@ extension Infallible {
181181
}
182182
}
183183

184-
extension InfallibleType {
184+
extension InfallibleType where Element == Any {
185185
/**
186186
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
187187

@@ -219,7 +219,7 @@ extension Infallible {
219219
}
220220
}
221221

222-
extension InfallibleType {
222+
extension InfallibleType where Element == Any {
223223
/**
224224
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
225225

@@ -257,7 +257,7 @@ extension Infallible {
257257
}
258258
}
259259

260-
extension InfallibleType {
260+
extension InfallibleType where Element == Any {
261261
/**
262262
Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element.
263263

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Tests/RxSwiftTests/Infallible+CombineLatestTests+arity.swift

Sources/AllTestz/main.swift

+19
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,24 @@ final class HistoricalSchedulerTest_ : HistoricalSchedulerTest, RxTestCase {
315315
] }
316316
}
317317

318+
final class InfallibleCombineLatestTest_ : InfallibleCombineLatestTest, RxTestCase {
319+
#if os(macOS)
320+
required override init() {
321+
super.init()
322+
}
323+
#endif
324+
325+
static var allTests: [(String, (InfallibleCombineLatestTest_) -> () -> Void)] { return [
326+
("testCombineLatest_Arity", InfallibleCombineLatestTest.testCombineLatest_Arity),
327+
("testCombineLatest_3_Arity", InfallibleCombineLatestTest.testCombineLatest_3_Arity),
328+
("testCombineLatest_4_Arity", InfallibleCombineLatestTest.testCombineLatest_4_Arity),
329+
("testCombineLatest_5_Arity", InfallibleCombineLatestTest.testCombineLatest_5_Arity),
330+
("testCombineLatest_6_Arity", InfallibleCombineLatestTest.testCombineLatest_6_Arity),
331+
("testCombineLatest_7_Arity", InfallibleCombineLatestTest.testCombineLatest_7_Arity),
332+
("testCombineLatest_8_Arity", InfallibleCombineLatestTest.testCombineLatest_8_Arity),
333+
] }
334+
}
335+
318336
final class InfallibleTest_ : InfallibleTest, RxTestCase {
319337
#if os(macOS)
320338
required override init() {
@@ -2217,6 +2235,7 @@ func XCTMain(_ tests: [() -> Void]) {
22172235
testCase(DriverTest_.allTests),
22182236
testCase(EventTests_.allTests),
22192237
testCase(HistoricalSchedulerTest_.allTests),
2238+
testCase(InfallibleCombineLatestTest_.allTests),
22202239
testCase(InfallibleTest_.allTests),
22212240
testCase(MainSchedulerTest_.allTests),
22222241
testCase(MaybeTest_.allTests),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
//
2+
// Infallible+CombineLatestTests+arity.swift
3+
// Tests
4+
//
5+
// Created by Hal Lee on 5/11/23.
6+
// Copyright © 2023 Krunoslav Zaher. All rights reserved.
7+
//
8+
9+
import XCTest
10+
import RxSwift
11+
import RxTest
12+
13+
class InfallibleCombineLatestTest: RxTest {
14+
15+
func testCombineLatest_Arity() {
16+
let scheduler = TestScheduler(initialClock: 0)
17+
let firstStream = scheduler.createColdObservable([
18+
.next(1, 1)
19+
]).asInfallible(onErrorFallbackTo: .never())
20+
21+
let secondStream = scheduler.createColdObservable([
22+
.next(1, 1)
23+
]).asInfallible(onErrorFallbackTo: .never())
24+
25+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
26+
return Infallible
27+
.combineLatest(firstStream, secondStream)
28+
.map { $0 + $1 }
29+
}
30+
31+
XCTAssertEqual(observer.events, [
32+
.next(1, 2),
33+
])
34+
}
35+
36+
func testCombineLatest_3_Arity() {
37+
let scheduler = TestScheduler(initialClock: 0)
38+
let firstStream = scheduler.createColdObservable([
39+
.next(1, 1)
40+
]).asInfallible(onErrorFallbackTo: .never())
41+
42+
let secondStream = scheduler.createColdObservable([
43+
.next(1, 1)
44+
]).asInfallible(onErrorFallbackTo: .never())
45+
46+
let thirdStream = scheduler.createColdObservable([
47+
.next(1, 1)
48+
]).asInfallible(onErrorFallbackTo: .never())
49+
50+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
51+
return Infallible
52+
.combineLatest(firstStream, secondStream, thirdStream)
53+
.map { $0 + $1 + $2 }
54+
}
55+
56+
XCTAssertEqual(observer.events, [
57+
.next(1, 3),
58+
])
59+
}
60+
61+
func testCombineLatest_4_Arity() {
62+
let scheduler = TestScheduler(initialClock: 0)
63+
let firstStream = scheduler.createColdObservable([
64+
.next(1, 1)
65+
]).asInfallible(onErrorFallbackTo: .never())
66+
67+
let secondStream = scheduler.createColdObservable([
68+
.next(1, 1)
69+
]).asInfallible(onErrorFallbackTo: .never())
70+
71+
let thirdStream = scheduler.createColdObservable([
72+
.next(1, 1)
73+
]).asInfallible(onErrorFallbackTo: .never())
74+
75+
let fourthStream = scheduler.createColdObservable([
76+
.next(1, 1)
77+
]).asInfallible(onErrorFallbackTo: .never())
78+
79+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
80+
return Infallible
81+
.combineLatest(firstStream, secondStream, thirdStream, fourthStream)
82+
.map { (a: Int, b: Int, c: Int, d: Int) -> Int in a + b + c + d }
83+
}
84+
85+
XCTAssertEqual(observer.events, [
86+
.next(1, 4),
87+
])
88+
}
89+
90+
func testCombineLatest_5_Arity() {
91+
let scheduler = TestScheduler(initialClock: 0)
92+
let firstStream = scheduler.createColdObservable([
93+
.next(1, 1)
94+
]).asInfallible(onErrorFallbackTo: .never())
95+
96+
let secondStream = scheduler.createColdObservable([
97+
.next(1, 1)
98+
]).asInfallible(onErrorFallbackTo: .never())
99+
100+
let thirdStream = scheduler.createColdObservable([
101+
.next(1, 1)
102+
]).asInfallible(onErrorFallbackTo: .never())
103+
104+
let fourthStream = scheduler.createColdObservable([
105+
.next(1, 1)
106+
]).asInfallible(onErrorFallbackTo: .never())
107+
108+
let fifthStream = scheduler.createColdObservable([
109+
.next(1, 1)
110+
]).asInfallible(onErrorFallbackTo: .never())
111+
112+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
113+
return Infallible
114+
.combineLatest(firstStream, secondStream, thirdStream, fourthStream, fifthStream)
115+
.map { (a: Int, b: Int, c: Int, d: Int, e: Int) -> Int in a + b + c + d + e }
116+
}
117+
118+
XCTAssertEqual(observer.events, [
119+
.next(1, 5),
120+
])
121+
}
122+
123+
func testCombineLatest_6_Arity() {
124+
let scheduler = TestScheduler(initialClock: 0)
125+
let firstStream = scheduler.createColdObservable([
126+
.next(1, 1)
127+
]).asInfallible(onErrorFallbackTo: .never())
128+
129+
let secondStream = scheduler.createColdObservable([
130+
.next(1, 1)
131+
]).asInfallible(onErrorFallbackTo: .never())
132+
133+
let thirdStream = scheduler.createColdObservable([
134+
.next(1, 1)
135+
]).asInfallible(onErrorFallbackTo: .never())
136+
137+
let fourthStream = scheduler.createColdObservable([
138+
.next(1, 1)
139+
]).asInfallible(onErrorFallbackTo: .never())
140+
141+
let fifthStream = scheduler.createColdObservable([
142+
.next(1, 1)
143+
]).asInfallible(onErrorFallbackTo: .never())
144+
145+
let sixthStream = scheduler.createColdObservable([
146+
.next(1, 1)
147+
]).asInfallible(onErrorFallbackTo: .never())
148+
149+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
150+
return Infallible
151+
.combineLatest(firstStream, secondStream, thirdStream, fourthStream, fifthStream, sixthStream)
152+
.map { (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) -> Int in a + b + c + d + e + f }
153+
}
154+
155+
XCTAssertEqual(observer.events, [
156+
.next(1, 6),
157+
])
158+
}
159+
160+
func testCombineLatest_7_Arity() {
161+
let scheduler = TestScheduler(initialClock: 0)
162+
let firstStream = scheduler.createColdObservable([
163+
.next(1, 1)
164+
]).asInfallible(onErrorFallbackTo: .never())
165+
166+
let secondStream = scheduler.createColdObservable([
167+
.next(1, 1)
168+
]).asInfallible(onErrorFallbackTo: .never())
169+
170+
let thirdStream = scheduler.createColdObservable([
171+
.next(1, 1)
172+
]).asInfallible(onErrorFallbackTo: .never())
173+
174+
let fourthStream = scheduler.createColdObservable([
175+
.next(1, 1)
176+
]).asInfallible(onErrorFallbackTo: .never())
177+
178+
let fifthStream = scheduler.createColdObservable([
179+
.next(1, 1)
180+
]).asInfallible(onErrorFallbackTo: .never())
181+
182+
let sixthStream = scheduler.createColdObservable([
183+
.next(1, 1)
184+
]).asInfallible(onErrorFallbackTo: .never())
185+
186+
let seventhStream = scheduler.createColdObservable([
187+
.next(1, 1)
188+
]).asInfallible(onErrorFallbackTo: .never())
189+
190+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
191+
return Infallible
192+
.combineLatest(firstStream, secondStream, thirdStream, fourthStream, fifthStream, sixthStream, seventhStream)
193+
.map { (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int) -> Int in a + b + c + d + e + f + g }
194+
}
195+
196+
XCTAssertEqual(observer.events, [
197+
.next(1, 7),
198+
])
199+
}
200+
201+
func testCombineLatest_8_Arity() {
202+
let scheduler = TestScheduler(initialClock: 0)
203+
let firstStream = scheduler.createColdObservable([
204+
.next(1, 1)
205+
]).asInfallible(onErrorFallbackTo: .never())
206+
207+
let secondStream = scheduler.createColdObservable([
208+
.next(1, 1)
209+
]).asInfallible(onErrorFallbackTo: .never())
210+
211+
let thirdStream = scheduler.createColdObservable([
212+
.next(1, 1)
213+
]).asInfallible(onErrorFallbackTo: .never())
214+
215+
let fourthStream = scheduler.createColdObservable([
216+
.next(1, 1)
217+
]).asInfallible(onErrorFallbackTo: .never())
218+
219+
let fifthStream = scheduler.createColdObservable([
220+
.next(1, 1)
221+
]).asInfallible(onErrorFallbackTo: .never())
222+
223+
let sixthStream = scheduler.createColdObservable([
224+
.next(1, 1)
225+
]).asInfallible(onErrorFallbackTo: .never())
226+
227+
let seventhStream = scheduler.createColdObservable([
228+
.next(1, 1)
229+
]).asInfallible(onErrorFallbackTo: .never())
230+
231+
let eighthStream = scheduler.createColdObservable([
232+
.next(1, 1)
233+
]).asInfallible(onErrorFallbackTo: .never())
234+
235+
let observer = scheduler.start(created: 0, subscribed: 0, disposed: 100) {
236+
return Infallible
237+
.combineLatest(firstStream, secondStream, thirdStream, fourthStream, fifthStream, sixthStream, seventhStream, eighthStream)
238+
.map { (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int) -> Int in a + b + c + d + e + f + g + h }
239+
}
240+
241+
XCTAssertEqual(observer.events, [
242+
.next(1, 8),
243+
])
244+
}
245+
246+
}

0 commit comments

Comments
 (0)