package ch.epfl.data.squall.thetajoin.matrix_assignment.exp;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeoutException;
import ch.epfl.data.squall.thetajoin.matrix_assignment.ArrangementIterator;
import ch.epfl.data.squall.thetajoin.matrix_assignment.CubeNAssignmentEqui;
public class HCEquiPartitionExp {
public static void main(String[] args) throws IOException {
// Bootstrap squall
long[] sizes = { 4, 2 };
new CubeNAssignmentEqui(sizes, 10, -1);
// System.setOut(new PrintStream(new FileOutputStream("exp_partition.csv", false)));
System.out.format("#dims\t#joiners\trelations\t#regions\tassignment\truntime(ms)%n");
for (int d = 8; d <= 8; d++) {
for (int r = 1000; r <= 1000; r+=100) {
expInstance(d, r);
}
}
}
private static void expInstance(int d, int r) {
ArrangementIterator me = new ArrangementIterator(Arrays.asList(100, 1000, 10000), d, true);
while (me.hasNext()) {
List<Integer> combination = me.next();
// long[] sizes = ArrayUtils.toPrimitive(combination.toArray(new
// Long[0]));
long[] sizes = new long[combination.size()];
for (int i = 0; i < sizes.length; i++) {
sizes[i] = combination.get(i);
}
boolean timeout = !instance(d, r, sizes);
if (timeout) break;
}
}
private static boolean instance(int d, final int r, final long[] sizes) {
MyTaskEqui task = new MyTaskEqui(sizes, r);
try {
TimeoutController.execute(task, 1000L);
} catch (TimeoutException e) {
// e.printStackTrace();
}
CubeNAssignmentEqui result = task.result;
if (result != null) {
long totalTime = task.totalTime;
System.out.format("%d\t%d\t%s\t%d\t%s\t%s%n", d, r, Arrays.toString(sizes), result.getNumberOfRegions(), result.toString(), totalTime);
return true;
} else {
System.out.format("%d\t%d\t%s\t%d\t%s\t%s%n", d, r, Arrays.toString(sizes), 0, "NA", ">1s");
return false;
}
}
}
class MyTaskEqui implements Runnable {
CubeNAssignmentEqui result = null;
long[] sizes;
int r;
long totalTime;
public MyTaskEqui(long[] sizes, int r) {
this.sizes = sizes;
this.r = r;
}
@Override
public void run() {
long startTime = System.currentTimeMillis();
result = new CubeNAssignmentEqui(sizes, r, -1);
totalTime = System.currentTimeMillis() - startTime;
}
}