 
         subject.subscribe(onNext: { string, int in
             received.append("\(string): \(int)")
-        }, onDone: {
-            exp.fulfill()
         })
 
         string.on(.next("The value"))

        let observable = Observable<String>()
        var received: [String] = []

        observable.skip(first: 2).subscribe(onNext: { string in
            received.append(string)

            XCTAssert(received.count == 1)
            XCTAssert(received.first == "3")
        })

        observable.on(.next("1"))
        observable.on(.next("2"))
        observable.on(.next("3"))
    }

    func testSkipError() {
        let observable = Observable<String>()

        var error: Error?

        observable.skip(first: 2).subscribe(onError: {
            error = $0
        })

        observable.on(.error(TestError.test))

        XCTAssertNotNil(error)
        XCTAssert(error is TestError)
    }

    func testForward() {
        var received: [String] = []
        var receivedError: Error?

        let exp = expectation(description: "forward")

        let subject = Observable<String>()
        let observable = Observable<String>()

        int.on(.next(3))
        int.on(.done)

        XCTAssertEqual(received.count, 4)
        XCTAssertEqual(received[0], "The number: 1")
        XCTAssertEqual(received[1], "The number: 2")
        XCTAssertEqual(received[2], "The digit: 2")
        XCTAssertEqual(received[3], "The digit: 3")
    }

    func testCombineLatestOptional() {
        var received: [String] = []

        let string = Observable<String?>()
