function testCrossProduct() {
  var leftRowCount = 3;
  var rightRowCount = 4;

  var leftRows = new Array(leftRowCount);
  var leftTable = schema.table('tableA');
  for (var i = 0; i < leftRowCount; i++) {
    leftRows[i] = leftTable.createRow({
      'id': 'id' + i.toString(),
      'name': 'name' + i.toString()
    });
  }

  var rightRows = new Array(rightRowCount);
  var rightTable = schema.table('tableE');
  for (var i = 0; i < rightRowCount; i++) {
    rightRows[i] = rightTable.createRow({
      'id': 'id' + i.toString(),
      'email': 'email' + i.toString()
    });
  }

  var leftChild = new lf.proc.NoOpStep(
      [lf.proc.Relation.fromRows(leftRows, [leftTable.getName()])]);
  var rightChild = new lf.proc.NoOpStep(
      [lf.proc.Relation.fromRows(rightRows, [rightTable.getName()])]);

  var step = new lf.proc.CrossProductStep();
  step.addChild(leftChild);
  step.addChild(rightChild);

  return step.exec().then(function(relations) {
    var relation = relations[0];
    assertEquals(leftRowCount * rightRowCount, relation.entries.length);
    relation.entries.forEach(function(entry) {
      assertTrue(entry.getField(leftTable['id']) != null);
      assertTrue(entry.getField(leftTable['name']) != null);
      assertTrue(entry.getField(rightTable['id']) != null);
      assertTrue(entry.getField(rightTable['email']) != null);
    });
  });
}
Tests that a cross product is calculated correctly.
@return {!IThenable}