package sizzle.aggregators;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Test;
import sizzle.io.EmitKey;
import sizzle.io.EmitValue;
public class TestSetAggregator {
@Test
public void testSetAggregatorCombineDistinct() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("three"));
final ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue> reduceDriver = new ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue>(
new SetSizzleCombiner());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("two"));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("one"));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("three"));
reduceDriver.runTest();
}
@Test
public void testSetAggregatorCombineIndistinct() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("three"));
values.add(new EmitValue("one"));
values.add(new EmitValue("one"));
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("two"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("two"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("three"));
final ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue> reduceDriver = new ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue>(
new SetSizzleCombiner());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("two"));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("one"));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("three"));
reduceDriver.runTest();
}
@Test
public void testSetAggregatorCombineLess() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
final ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue> reduceDriver = new ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue>(
new SetSizzleCombiner());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("two"));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("one"));
reduceDriver.runTest();
}
@Test
public void testSetAggregatorCombineMore() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("three"));
values.add(new EmitValue("four"));
final ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue> reduceDriver = new ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue>(
new SetSizzleCombiner());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.runTest();
}
@Test
public void testSetAggregatorReduceDistinct() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("three"));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new SetSizzleReducer());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new Text("test[] = two"), NullWritable.get());
reduceDriver.addOutput(new Text("test[] = one"), NullWritable.get());
reduceDriver.addOutput(new Text("test[] = three"), NullWritable.get());
reduceDriver.runTest();
}
@Test
public void testSetAggregatorReduceInistinct() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("three"));
values.add(new EmitValue("one"));
values.add(new EmitValue("one"));
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("two"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("two"));
values.add(new EmitValue("two"));
values.add(new EmitValue("one"));
values.add(new EmitValue("three"));
values.add(new EmitValue("three"));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new SetSizzleReducer());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new Text("test[] = two"), NullWritable.get());
reduceDriver.addOutput(new Text("test[] = one"), NullWritable.get());
reduceDriver.addOutput(new Text("test[] = three"), NullWritable.get());
reduceDriver.runTest();
}
@Test
public void testSetAggregatorReduceLess() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new SetSizzleReducer());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new Text("test[] = two"), NullWritable.get());
reduceDriver.addOutput(new Text("test[] = one"), NullWritable.get());
reduceDriver.runTest();
}
@Test
public void testSetAggregatorReduceMore() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("one"));
values.add(new EmitValue("two"));
values.add(new EmitValue("three"));
values.add(new EmitValue("four"));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new SetSizzleReducer());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.runTest();
}
}
class SetSizzleCombiner extends sizzle.runtime.SizzleCombiner {
public SetSizzleCombiner() {
super();
this.tables.put("test", new Table(new sizzle.aggregators.SetAggregator(3)));
}
}
class SetSizzleReducer extends sizzle.runtime.SizzleReducer {
public SetSizzleReducer() {
super();
this.tables.put("test", new Table(new sizzle.aggregators.SetAggregator(3)));
}
}