package edu.washington.escience.myria.operator; import static org.junit.Assert.assertEquals; import org.junit.Test; import edu.washington.escience.myria.DbException; import edu.washington.escience.myria.Schema; import edu.washington.escience.myria.storage.TupleBatch; import edu.washington.escience.myria.util.JoinTestUtils; import edu.washington.escience.myria.util.TestEnvVars; public class SymmetricHashJoinTest { @Test public void testSymmetricHashJoin() throws DbException { BatchTupleSource left = new BatchTupleSource(JoinTestUtils.leftInput); BatchTupleSource right = new BatchTupleSource(JoinTestUtils.rightInput); Operator join = new SymmetricHashJoin( left, right, new int[] {1, 0, 2}, new int[] {2, 1, 0}, new int[] {0}, new int[] {0}); join.open(TestEnvVars.get()); assertEquals( Schema.merge( JoinTestUtils.leftSchema.getSubSchema(new int[] {0}), JoinTestUtils.rightSchema.getSubSchema(new int[] {0})), join.getSchema()); long count = 0; while (!join.eos()) { TupleBatch tb = join.nextReady(); if (tb == null) { continue; } count += tb.numTuples(); } join.close(); assertEquals(7L, count); } @Test(expected = IllegalStateException.class) public void testIncompatibleJoinKeys() throws DbException { BatchTupleSource left = new BatchTupleSource(JoinTestUtils.leftInput); BatchTupleSource right = new BatchTupleSource(JoinTestUtils.rightInput); Operator join = new SymmetricHashJoin( left, right, new int[] {0}, new int[] {0}, new int[] {0}, new int[] {0}); join.open(TestEnvVars.get()); } }