package vroom.sandbox;
import java.text.DecimalFormat;
@SuppressWarnings("unused")
public class PrimativeCast {
private static final int LOOP_COUNT = Integer.MAX_VALUE;
public PrimativeCast() {
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("--------------------------------");
System.out.println("Test Run: " + i);
System.out.println("--------------------------------");
// intControl();
// shortControl();
// castIntToShort();
// castShortToInt();
long mb = multiplyBytes();
long ms = multiplyShorts();
long mi = multiplyInts();
long ml = multiplyLongs();
long mf = multiplyFloats();
long md = multiplyDoubles();
DecimalFormat format = new DecimalFormat("0.00");
System.out.println("--- the following figures use int as their reference ---");
System.out.println("multiply byte time - multiply int time = " + (mb - mi) + "ms");
System.out.println("byte execution speed compared to int: " + format.format((100.0 / mi) * mb) + "%");
System.out.println("multiply short time - multiply int time = " + (ms - mi) + "ms");
System.out.println("short execution speed compared to int: " + format.format((100.0 / mi) * ms) + "%");
System.out.println("multiply long time - multiply int time = " + (ml - mi) + "ms");
System.out.println("long execution speed compared to int: " + format.format((100.0 / mi) * ml) + "%");
System.out.println("--- the following figures use float as their reference ---");
System.out.println("multiply float time - multiply double time = " + (md - mf) + "ms");
System.out.println("double execution speed compared to float: " + format.format((100.0 / mf) * md) + "%");
}
}
private int intControl() {
int testInt = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
int result = testInt;
testInt++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("int to int (control): " + duration);
return duration;
}
private int shortControl() {
short testShort = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
short result = testShort;
testShort++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("short to short (control): " + duration);
return duration;
}
private int castIntToShort() {
int testInt = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
short result = (short) testInt;
testInt++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("int to short (simple cast): " + duration);
return duration;
}
private int castShortToInt() {
short testShort = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
int result = testShort;
testShort++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("short to int (simple automatic cast): " + duration);
return duration;
}
private int multiplyBytes() {
byte test = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
byte result = (byte) (test * test);
test++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying bytes: " + duration);
return duration;
}
private int multiplyShorts() {
short test = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
short result = (short) (test * test);
test++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying shorts: " + duration);
return duration;
}
private int multiplyInts() {
int testInt = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
int result = testInt * testInt;
testInt++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying ints: " + duration);
return duration;
}
private int multiplyLongs() {
long test = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
long result = test * test;
test++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying longs: " + duration);
return duration;
}
private int multiplyFloats() {
float test = 0.0f;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
float result = test * test;
test++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying floats: " + duration);
return duration;
}
private int multiplyDoubles() {
double test = 0.0;
long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
double result = test * test;
test++;
result++;
}
long end = System.currentTimeMillis();
int duration = (int) (end - start);
System.out.println("multiplying doubles: " + duration);
return duration;
}
/**
* @param args
*/
public static void main(String[] args) {
PrimativeCast test = new PrimativeCast();
test.run();
}
}