package uk.ac.imperial.lsds.seep.integration.performance.microbenchmarks;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import uk.ac.imperial.lsds.seep.api.data.ITuple;
import uk.ac.imperial.lsds.seep.api.data.OTuple;
import uk.ac.imperial.lsds.seep.api.data.Schema;
import uk.ac.imperial.lsds.seep.api.data.Type;
import uk.ac.imperial.lsds.seep.api.data.Schema.SchemaBuilder;
public class ITupleAccessCostTest {
@Test
public void testITupleAccessCost() {
int u = 15;
long t = System.currentTimeMillis();
Schema outputSchema = SchemaBuilder.getInstance().newField(Type.INT, "userId").newField(Type.LONG, "ts").build();
OTuple output = new OTuple(outputSchema);
byte[] serializedData = OTuple.create(outputSchema, new String[]{"userId", "ts"}, new Object[]{u, t});
ITuple input = new ITuple(outputSchema); // share output and input schema in the simplest case
// Test get by name
int repetitions = 1000000;
long s1 = System.nanoTime();
for(int i = 0; i<repetitions; i++) {
input.setData(serializedData);
int userId = input.getInt("userId");
long ts = input.getLong("ts");
assertEquals(u, userId);
assertEquals(t, ts);
}
long e1 = System.nanoTime();
long s2 = System.nanoTime();
for(int i = 0; i<repetitions; i++) {
input.setData(serializedData);
int idx_userId = input.getIndexFor("userId");
int idx_ts = input.getIndexFor("ts");
int userId = input.getInt(idx_userId);
long ts = input.getLong(idx_ts);
assertEquals(u, userId);
assertEquals(t, ts);
}
long e2 = System.nanoTime();
System.out.println("TIME by name: " + (e1-s1));
System.out.println("TIME by index: " + (e2-s2));
}
}