function testTree3() {
  var treeBefore =
      'project()\n' +
      '-select(value_pred(Job.id eq 100))\n' +
      '--cross_product\n' +
      '---table_access(Job)\n' +
      '---table_access(Department)\n';

  var treeAfter =
      'project()\n' +
      '-cross_product\n' +
      '--table_access_by_row_id(Job)\n' +
      '---index_range_scan(Job.pkJob, [100, 100], natural)\n' +
      '--table_access(Department)\n';

  var constructTree = function() {
    var queryContext = new lf.query.SelectContext(hr.db.getSchema());
    queryContext.from = [j, d];
    queryContext.where = j.id.eq('100');

    var crossProductStep = new lf.proc.CrossProductStep();
    var tableAccessJob = new lf.proc.TableAccessFullStep(
        hr.db.getGlobal(), queryContext.from[0]);
    var tableAccessDepartment = new lf.proc.TableAccessFullStep(
        hr.db.getGlobal(), queryContext.from[1]);
    crossProductStep.addChild(tableAccessJob);
    crossProductStep.addChild(tableAccessDepartment);

    var selectStep = new lf.proc.SelectStep(queryContext.where.getId());
    selectStep.addChild(crossProductStep);
    var rootNode = new lf.proc.ProjectStep([], null);
    rootNode.addChild(selectStep);

    return {
      queryContext: queryContext,
      root: rootNode
    };
  };

  lf.testing.treeutil.assertTreeTransformation(
      constructTree(), treeBefore, treeAfter, pass);
}
Tests the case where a SelectStep node is paired with a TableAccessFullStep
and the two are separated by a CrossProductStep. It ensures that other
children of the CrossProductStep are not affected.