         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,

                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)

        throws
        where Reducer.Value: Equatable
    {
        #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,
