hunk.code_window: var RxOld = require('rx');
   var RxNew = require('../../../../index');
   module.exports = function (suite) {
  
hunk.labels: keep keep add keep
hunk.after_edit: var source = Array.apply(null, { length: 25 });
  
hunk.file_path: perf/micro/current-thread-scheduler/operators/mergeall.js
hunk.type: add
file: import {Observable} from '../Observable';
  import {ArrayObservable} from '../observables/ArrayObservable';
  import {CombineLatestOperator} from './combineLatest-support';
  
  /**
   * Combines the values from this observable with values from observables passed as arguments. This is done by subscribing
   * to each observable, in order, and collecting an array of each of the most recent values any time any of the observables
   * emits, then either taking that array and passing it as arguments to an option `project` function and emitting the return
   * value of that, or just emitting the array of recent values directly if there is no `project` function.
   * @param {...Observable} observables the observables to combine the source with
   * @param {function} [project] an optional function to project the values from the combined recent values into a new value for emission.
   * @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of
   * the most recent values from each observable.
   */
  export function combineLatest<R>(...observables: Array<Observable<any> | ((...values: Array<any>) => R)>): Observable<R> {
    observables.unshift(this);
    let project;
    if (typeof observables[observables.length - 1] === 'function') {
      project = observables.pop();
    }
    return new ArrayObservable(observables).lift(new CombineLatestOperator(project));
  }