package org.olap4j.driver.olap4ld.test; import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Random; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import edu.kit.aifb.exrunner.ExperimentRun; import edu.kit.aifb.exrunner.model.ExperimentSystem; import edu.kit.aifb.exrunner.model.ParameterSet; import edu.kit.aifb.exrunner.model.ParameterSetProvider; import edu.kit.aifb.exrunner.model.attribute.Attribute; import edu.kit.aifb.exrunner.model.attribute.IntAttribute; import edu.kit.aifb.exrunner.model.attribute.StringAttribute; /** * Example for exrunner used for LDCX performance evaluation. * @author günter ladwig * */ public class SortExperiments { public static class SortAttributes { public static final Attribute SIZE = new IntAttribute("size"); public static final Attribute DIST = new StringAttribute("dist"); public static final Attribute ALGORITHM = new StringAttribute("algorithm"); public static final Attribute TIME = new IntAttribute("time"); } public static class SortParameterSetProvider extends ParameterSetProvider { public SortParameterSetProvider() { registerAttributes(SortAttributes.SIZE, SortAttributes.DIST); } @Override public List<ParameterSet> getParameterSets() { List<ParameterSet> params = Lists.newArrayList(); params.add(new SortParameterSet(512, "rand")); params.add(new SortParameterSet(1024, "rand")); params.add(new SortParameterSet(2048, "rand")); params.add(new SortParameterSet(4096, "rand")); params.add(new SortParameterSet(8192, "rand")); params.add(new SortParameterSet(16384, "rand")); params.add(new SortParameterSet(32768, "rand")); return params; } } public static class SortParameterSet extends ParameterSet { public SortParameterSet(int size, String dist) { m_attrValues.put(SortAttributes.SIZE, size); m_attrValues.put(SortAttributes.DIST, dist); } public int[] getData() { int[] data = new int[(Integer)getValue(SortAttributes.SIZE)]; String dist = (String)getValue(SortAttributes.DIST); if ("rand".equals(dist)) { Random r = new Random(0); for (int i = 0; i < data.length; i++) data[i] = r.nextInt(); } return data; } } public static class BubbleSortSystem extends ExperimentSystem { public BubbleSortSystem() { super("bubble"); registerSystemAttribute(SortAttributes.ALGORITHM); registerExecutionAttribute(SortAttributes.TIME); } @Override public Map<Attribute,Object> open() throws IOException { return ImmutableMap.<Attribute,Object>of(SortAttributes.ALGORITHM, "bubble"); } @Override public void close() throws IOException { } public static void sort(int[] x) { boolean unsorted = true; int temp; while (unsorted) { unsorted = false; for (int i = 0; i < x.length - 1; i++) if (x[i] > x[i + 1]) { temp = x[i]; x[i] = x[i + 1]; x[i + 1] = temp; unsorted = true; } } } @Override public Map<Attribute,Object> execute(ParameterSet query) throws IOException { int[] data = ((SortParameterSet)query).getData(); long time = System.currentTimeMillis(); sort(data); time = System.currentTimeMillis() - time; return ImmutableMap.<Attribute,Object>of(SortAttributes.TIME, time); } } public static class JavaSortSystem extends ExperimentSystem { public JavaSortSystem() { super("java"); registerSystemAttribute(SortAttributes.ALGORITHM); registerExecutionAttribute(SortAttributes.TIME); } @Override public Map<Attribute,Object> open() throws IOException { return ImmutableMap.<Attribute,Object>of(SortAttributes.ALGORITHM, "java"); } @Override public void close() throws IOException { } @Override public Map<Attribute,Object> execute(ParameterSet query) throws IOException { int[] data = ((SortParameterSet)query).getData(); long time = System.currentTimeMillis(); Arrays.sort(data); time = System.currentTimeMillis() - time; return ImmutableMap.<Attribute,Object>of(SortAttributes.TIME, time); } } public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException { ExperimentRun run1 = new ExperimentRun(new BubbleSortSystem(), new SortParameterSetProvider(), 2, new File("sort.db"), null); run1.run(); run1 = new ExperimentRun(new JavaSortSystem(), new SortParameterSetProvider(), 2, new File("sort.db"), null); run1.run(); } }