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 TestTopAggregator {
@Test
public void testTopAggregatorTopTenCombine() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("two"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("four"));
values.add(new EmitValue("six"));
values.add(new EmitValue("two"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("six"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("four"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("six"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("four"));
values.add(new EmitValue("six"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("four"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("six"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("six"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("three"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("three"));
values.add(new EmitValue("five"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("three"));
values.add(new EmitValue("five"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("five"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("five"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("seven"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("one"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("nine"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("twelve"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("eight"));
values.add(new EmitValue("eleven"));
values.add(new EmitValue("ten"));
values.add(new EmitValue("thirteen"));
values.add(new EmitValue("five"));
values.add(new EmitValue("fourteen"));
values.add(new EmitValue("eight"));
final ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue> reduceDriver = new ReduceDriver<EmitKey, EmitValue, EmitKey, EmitValue>(
new TopSizzleCombiner());
reduceDriver.setInput(new EmitKey("test"), values);
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("ten", 10));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("five", 5));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("one", 1));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("eleven", 11));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("nine", 9));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("eight", 8));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("six", 6));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("two", 2));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("seven", 7));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("three", 3));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("twelve", 12));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("fourteen", 14));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("four", 4));
reduceDriver.addOutput(new EmitKey("test"), new EmitValue("thirteen", 13));
reduceDriver.runTest();
}
@Test
public void testTopAggregatorTopTenReduce() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("two", 2));
values.add(new EmitValue("thirteen", 13));
values.add(new EmitValue("six", 6));
values.add(new EmitValue("four", 4));
values.add(new EmitValue("seven", 7));
values.add(new EmitValue("fourteen", 14));
values.add(new EmitValue("three", 3));
values.add(new EmitValue("nine", 9));
values.add(new EmitValue("one", 1));
values.add(new EmitValue("twelve", 12));
values.add(new EmitValue("ten", 10));
values.add(new EmitValue("eleven", 11));
values.add(new EmitValue("five", 5));
values.add(new EmitValue("eight", 8));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver10 = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new TopSizzleReducerTen());
reduceDriver10.setInput(new EmitKey("test"), values);
reduceDriver10.addOutput(new Text("test[] = fourteen, 14, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = thirteen, 13, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = twelve, 12, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = eleven, 11, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = ten, 10, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = nine, 9, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = eight, 8, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = seven, 7, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = six, 6, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = five, 5, 0"), NullWritable.get());
reduceDriver10.runTest();
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver1 = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new TopSizzleReducerOne());
reduceDriver1.setInput(new EmitKey("test"), values);
reduceDriver1.addOutput(new Text("test[] = fourteen, 14, 0"), NullWritable.get());
reduceDriver1.runTest();
}
@Test
public void testTopAggregatorAllEqual() {
final List<EmitValue> values = new ArrayList<EmitValue>();
values.add(new EmitValue("two", 1));
values.add(new EmitValue("thirteen", 1));
values.add(new EmitValue("six", 1));
values.add(new EmitValue("four", 1));
values.add(new EmitValue("seven", 1));
values.add(new EmitValue("fourteen", 1));
values.add(new EmitValue("three", 1));
values.add(new EmitValue("nine", 1));
values.add(new EmitValue("one", 1));
values.add(new EmitValue("twelve", 1));
values.add(new EmitValue("ten", 1));
values.add(new EmitValue("eleven", 1));
values.add(new EmitValue("five", 1));
values.add(new EmitValue("eight", 1));
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver10 = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new TopSizzleReducerTen());
reduceDriver10.setInput(new EmitKey("test"), values);
reduceDriver10.addOutput(new Text("test[] = eight, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = eleven, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = five, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = four, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = fourteen, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = nine, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = one, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = seven, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = six, 1, 0"), NullWritable.get());
reduceDriver10.addOutput(new Text("test[] = ten, 1, 0"), NullWritable.get());
reduceDriver10.runTest();
final ReduceDriver<EmitKey, EmitValue, Text, NullWritable> reduceDriver1 = new ReduceDriver<EmitKey, EmitValue, Text, NullWritable>(
new TopSizzleReducerOne());
reduceDriver1.setInput(new EmitKey("test"), values);
reduceDriver1.addOutput(new Text("test[] = eight, 1, 0"), NullWritable.get());
reduceDriver1.runTest();
}
}
class TopSizzleCombiner extends sizzle.runtime.SizzleCombiner {
public TopSizzleCombiner() {
super();
this.tables.put("test", new Table(new sizzle.aggregators.TopAggregator(10)));
}
}
class TopSizzleReducerTen extends sizzle.runtime.SizzleReducer {
public TopSizzleReducerTen() {
super();
this.tables.put("test", new Table(new sizzle.aggregators.TopAggregator(10)));
}
}
class TopSizzleReducerOne extends sizzle.runtime.SizzleReducer {
public TopSizzleReducerOne() {
super();
this.tables.put("test", new Table(new sizzle.aggregators.TopAggregator(1)));
}
}