Skip to content

Instantly share code, notes, and snippets.

@TheLivan
Created June 5, 2024 14:45
Show Gist options
  • Save TheLivan/9f301c4ded3a1d95807c18e9da35bbe1 to your computer and use it in GitHub Desktop.
Save TheLivan/9f301c4ded3a1d95807c18e9da35bbe1 to your computer and use it in GitHub Desktop.
Test bitwise and logical
public final class Main {
public static void main(String[] args) {
boolean[] data = new boolean[10000];
java.util.Random r = new java.util.Random(0);
for (int i = 0; i < data.length; i++) {
data[i] = r.nextInt(2) > 0;
}
long t0, t1, t2, t3, t4, t5, t6, tEnd;
int sz1 = 100;
int sz2 = 100;
int sum = 0;
t0 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop1(data, i, sz1, sz2);
}
t1 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop2(data, i, sz1, sz2);
}
t2 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop3(data, i, sz1, sz2);
}
t3 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop4(data, i, sz1, sz2);
}
t4 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop5(data, i, sz1, sz2);
}
t5 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loop6(data, i, sz1, sz2);
}
t6 = System.currentTimeMillis();
for (int i = 0; i < data.length - sz1 - sz2; i++) {
sum += loopNone(data, i, sz1, sz2);
}
tEnd = System.currentTimeMillis();
System.out.println("a&&b || b&&c || a&&c : " + (t1 - t0) + " ms");
System.out.println("a&b | b&c | c&a : " + (t2 - t1) + " ms" + " (" + ((float) (t2 - t1) / (t1 - t0)) + ")");
System.out.println("------------------------------------------");
System.out.println("a && b && c : " + (t3 - t2) + " ms");
System.out.println("a & b & c : " + (t4 - t3) + " ms" + " (" + ((float) (t4 - t3) / (t3 - t2)) + ")");
System.out.println("------------------------------------------");
System.out.println("a || b || c : " + (t5 - t4) + " ms");
System.out.println("a | b | c : " + (t6 - t5) + " ms " + " (" + ((float) (t6 - t5) / (t5 - t4)) + ")");
System.out.println("------------------------------------------");
System.out.println("NONE : " + (tEnd - t6) + " ms");
System.out.println("sum: " + sum);
}
public static boolean testNone(boolean a, boolean b, boolean c) {
return a;
}
public static boolean test1(boolean a, boolean b, boolean c) {
return a && b || b && c || a && c;
}
public static boolean test2(boolean a, boolean b, boolean c) {
return a & b | b & c | c & a;
}
public static boolean test3(boolean a, boolean b, boolean c) {
return a && b && c;
}
public static boolean test4(boolean a, boolean b, boolean c) {
return a & b & c;
}
public static boolean test5(boolean a, boolean b, boolean c) {
return a || b || c;
}
public static boolean test6(boolean a, boolean b, boolean c) {
return a | b | c;
}
public static int loop1(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test1(data[i], data[j], data[k]) ? 1 : 0;
sum += test1(data[i], data[k], data[j]) ? 1 : 0;
sum += test1(data[j], data[k], data[i]) ? 1 : 0;
sum += test1(data[j], data[i], data[k]) ? 1 : 0;
sum += test1(data[k], data[i], data[j]) ? 1 : 0;
sum += test1(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loop2(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test2(data[i], data[j], data[k]) ? 1 : 0;
sum += test2(data[i], data[k], data[j]) ? 1 : 0;
sum += test2(data[j], data[k], data[i]) ? 1 : 0;
sum += test2(data[j], data[i], data[k]) ? 1 : 0;
sum += test2(data[k], data[i], data[j]) ? 1 : 0;
sum += test2(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loop3(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test3(data[i], data[j], data[k]) ? 1 : 0;
sum += test3(data[i], data[k], data[j]) ? 1 : 0;
sum += test3(data[j], data[k], data[i]) ? 1 : 0;
sum += test3(data[j], data[i], data[k]) ? 1 : 0;
sum += test3(data[k], data[i], data[j]) ? 1 : 0;
sum += test3(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loop4(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test4(data[i], data[j], data[k]) ? 1 : 0;
sum += test4(data[i], data[k], data[j]) ? 1 : 0;
sum += test4(data[j], data[k], data[i]) ? 1 : 0;
sum += test4(data[j], data[i], data[k]) ? 1 : 0;
sum += test4(data[k], data[i], data[j]) ? 1 : 0;
sum += test4(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loop5(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test5(data[i], data[j], data[k]) ? 1 : 0;
sum += test5(data[i], data[k], data[j]) ? 1 : 0;
sum += test5(data[j], data[k], data[i]) ? 1 : 0;
sum += test5(data[j], data[i], data[k]) ? 1 : 0;
sum += test5(data[k], data[i], data[j]) ? 1 : 0;
sum += test5(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loop6(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += test6(data[i], data[j], data[k]) ? 1 : 0;
sum += test6(data[i], data[k], data[j]) ? 1 : 0;
sum += test6(data[j], data[k], data[i]) ? 1 : 0;
sum += test6(data[j], data[i], data[k]) ? 1 : 0;
sum += test6(data[k], data[i], data[j]) ? 1 : 0;
sum += test6(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
public static int loopNone(boolean[] data, int i, int sz1, int sz2) {
int sum = 0;
for (int j = i; j < i + sz1; j++) {
for (int k = j; k < j + sz2; k++) {
sum += testNone(data[i], data[j], data[k]) ? 1 : 0;
sum += testNone(data[i], data[k], data[j]) ? 1 : 0;
sum += testNone(data[j], data[k], data[i]) ? 1 : 0;
sum += testNone(data[j], data[i], data[k]) ? 1 : 0;
sum += testNone(data[k], data[i], data[j]) ? 1 : 0;
sum += testNone(data[k], data[j], data[i]) ? 1 : 0;
}
}
return sum;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment