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

  var hireDate = new Date(1422667933572);

  var treeBefore =
      'order_by(Employee.id ASC)\n' +
      '-select(value_pred(Employee.salary gt 1000))\n' +
      '--select(value_pred(Job.minSalary gt 100))\n' +
      '---select(value_pred(Employee.hireDate lt ' + hireDate.toString() +
          '))\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 1000))\n' +
      '---select(value_pred(Employee.hireDate lt ' + hireDate.toString() +
          '))\n' +
      '----table_access(Employee)\n' +
      '--select(value_pred(Job.minSalary gt 100))\n' +
      '---table_access(Job)\n';

  var constructTree = function() {
    var queryContext = new lf.query.SelectContext(hr.db.getSchema());
    queryContext.from = [e, j];
    var predicate1 = e.salary.gt(1000);
    var predicate2 = j.minSalary.gt(100);
    var predicate3 = e.hireDate.lt(hireDate);
    queryContext.where = lf.op.and(predicate1, predicate2, predicate3);
    queryContext.orderBy = [{column: e.id, order: lf.Order.ASC}];

    var orderByNode = new lf.proc.OrderByNode(queryContext.orderBy);
    var selectNode1 = new lf.proc.SelectNode(predicate1);
    orderByNode.addChild(selectNode1);
    var selectNode2 = new lf.proc.SelectNode(predicate2);
    selectNode1.addChild(selectNode2);
    var selectNode3 = new lf.proc.SelectNode(predicate3);
    selectNode2.addChild(selectNode3);
    var crossProductNode = new lf.proc.CrossProductNode();
    selectNode3.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);
}
Tests a simple tree where 3 ValuePredicate selections are pushed below a
cross ploduct node. Two of the selections are pushed on one branch and the
other selections are pushed on the other.