                 try writer.writeWithoutTransaction(recordedUpdates)
                 
                 let expectation = recorder.next(expectedValues.count)
-                let values = try wait(for: expectation, timeout: 0.3)
+                let values = try wait(for: expectation, timeout: timeout)
                 XCTAssertEqual(
                     values, expectedValues,
                     "\(#function), \(writer), \(scheduler)", file: file, line: line)

                if waitForLast {
                    // Optimization!
                    let expectation = recorder.prefix(until: { $0 == lastExpectedValue } )
                    recordedValues = try wait(for: expectation, timeout: 1)
                } else {
                    // Slow!
                    assertionFailure("Please rewrite your test, because it is too slow: make sure the last expected value is unique.")
                    let expectation = recorder
                        .prefix(expectedValues.count + 2 /* pool may perform double initial fetch */)
                        .inverted
                    #if SQLITE_HAS_CODEC || GRDBCUSTOMSQLITE
                    // debug SQLite builds can be *very* slow
                    recordedValues = try wait(for: expectation, timeout: 1)
                    #else
                    recordedValues = try wait(for: expectation, timeout: 0.3)
                    #endif
                }
                
                XCTAssertEqual(recordedValues.first, expectedValues.first)

        line: UInt = #line)
        throws
    {
        #if SQLITE_HAS_CODEC || GRDBCUSTOMSQLITE
        // debug SQLite builds can be *very* slow
        let timeout: TimeInterval = 1
        #else
        let timeout: TimeInterval = 0.3
        #endif
        
        func test(
            observation: ValueObservation<Reducer>,
            scheduling scheduler: ValueObservationScheduler,
