function testTree_ValuePredicates3() {
  var e = schema.getEmployee();
  var j = schema.getJob();

  var treeBefore =
      'order_by(Employee.id ASC)\n' +
      '-select(value_pred(Employee.salary gt 10))\n' +
      '--cross_product\n' +
      '---table_access(Employee)\n' +
      '---table_access(Job)\n';

  var treeAfter =
      'order_by(Employee.id ASC)\n' +
      '-cross_product\n' +
      '--select(value_pred(Employee.salary gt 10))\n' +
      '---table_access(Employee)\n' +
      '--table_access(Job)\n';

  var constructTree = function() {
    var queryContext = new lf.query.SelectContext(hr.db.getSchema());
    queryContext.from = [e, j];
    queryContext.where = e.salary.gt(10);
    queryContext.orderBy = [{column: e.id, order: lf.Order.ASC}];

    var orderByNode = new lf.proc.OrderByNode(queryContext.orderBy);
    var selectNode = new lf.proc.SelectNode(queryContext.where);
    orderByNode.addChild(selectNode);
    var crossProductNode = new lf.proc.CrossProductNode();
    selectNode.addChild(crossProductNode);
    queryContext.from.forEach(function(tableSchema) {
      crossProductNode.addChild(new lf.proc.TableAccessNode(tableSchema));

    });

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

  lf.testing.treeutil.assertTreeTransformation(
      constructTree(), treeBefore, treeAfter, pass);
}
Ensuring that the order of cross-product/join children is not changed during
re-writing.