function testTree_WithInPredicate() {
  var treeBefore =
      'project()\n' +
      '-select(value_pred(Employee.id in 1,2,3))\n' +
      '--table_access(Employee)\n';

  var treeAfter =
      'project()\n' +
      '-table_access_by_row_id(Employee)\n' +
      '--index_range_scan(' +
          'Employee.pkEmployee, [1, 1],[2, 2],[3, 3], natural)\n';

  var indexStats = new lf.index.Stats();
  lf.testing.util.simulateIndexStats(
      propertyReplacer, indexStore, e.getRowIdIndexName(), indexStats);

  // Simulating case where the IN predicate has a low enough number of values
  // with respect to the total number of rows to be eligible for optimization.
  indexStats.totalRows = 200; // limit = 200 * 0.02 = 4
  lf.testing.treeutil.assertTreeTransformation(
      constructTreeWithInPredicate(3), treeBefore, treeAfter, pass);

  // Simulating case where the IN predicate has a high enough number of values
  // with respect to the total number of rows to NOT be eligible for
  // optimization.
  indexStats.totalRows = 100; // limit = 100 * 0.02 = 2
  lf.testing.treeutil.assertTreeTransformation(
      constructTreeWithInPredicate(3), treeBefore, treeBefore, pass);
}
Test a tree that has an IN predicate on a column that has an index. It
ensures that the optimization is applied only if the number of values in the
IN predicate is small enough compared to the total number of rows.