public class Benchmark { public static int fibonacci(int n) { if (n <= 1) { return n; } return fibonacci(n - 1) + fibonacci(n - 2); } public static int fibonacciIterative(int n) { if (n <= 1) { return n; } int a = 0; int b = 1; for (int i = 2; i <= n; i++) { int temp = a + b; a = b; b = temp; } return b; } public static int countPrimes(int limit) { int count = 0; for (int n = 2; n <= limit; n++) { boolean isPrime = true; for (int i = 2; i * i <= n; i++) { if (n % i == 0) { isPrime = false; break; } } if (isPrime) { count++; } } return count; } public static long sumLoop(int iterations) { long sum = 0L; for (int i = 0; i < iterations; i++) { sum = sum + i; } return sum; } public static int arraySum(int size) { int[] arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = i; } int sum = 0; for (int ii = 0; ii < size; ii++) { sum = sum + arr[ii]; } return sum; } public static int arrayReverse(int size) { int[] arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = i; } for (int ii = 0; ii < size / 2; ii++) { int temp = arr[ii]; arr[ii] = arr[size - 1 - ii]; arr[size - 1 - ii] = temp; } return arr[0]; } public static int nestedLoops(int n) { int sum = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { sum = sum + i + j; } } return sum; } public static int factorial(int n) { if (n <= 1) { return 1; } return n * factorial(n - 1); } public static int ackermann(int m, int n) { if (m == 0) { return n + 1; } if (n == 0) { return ackermann(m - 1, 1); } return ackermann(m - 1, ackermann(m, n - 1)); } public static int identity(int x) { return x; } public static int methodCallOverhead(int iterations) { int sum = 0; for (int i = 0; i < iterations; i++) { sum = sum + identity(i); } return sum; } public static long arithmeticOps(int iterations) { long result = 0L; for (int i = 1; i < iterations; i++) { result = result + i * 2 - i / 2 + i % 7; } return result; } public static int conditionalBranching(int iterations) { int sum = 0; for (int i = 0; i < iterations; i++) { if (i % 2 == 0) { sum = sum + i; } else { sum = sum - i; } } return sum; } public static int complexConditions(int iterations) { int count = 0; for (int i = 0; i < iterations; i++) { if (i % 3 == 0 && i % 5 == 0) { count = count + 1; } else if (i % 3 == 0) { count = count + 2; } else if (i % 5 == 0) { count = count + 3; } } return count; } public static int matrixMultiply(int size) { int[][] a = new int[size][size]; int[][] b = new int[size][size]; int[][] c = new int[size][size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { a[i][j] = i + j; b[i][j] = i - j; } } for (int ii = 0; ii < size; ii++) { for (int jj = 0; jj < size; jj++) { int sum = 0; for (int kk = 0; kk < size; kk++) { sum = sum + a[ii][kk] * b[kk][jj]; } c[ii][jj] = sum; } } return c[0][0]; } public static int bubbleSort(int size) { int[] arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = size - i; } for (int ii = 0; ii < size - 1; ii++) { for (int jj = 0; jj < size - ii - 1; jj++) { if (arr[jj] > arr[jj + 1]) { int temp = arr[jj]; arr[jj] = arr[jj + 1]; arr[jj + 1] = temp; } } } return arr[0]; } public static int main() { System.out.println("=== Rava Comprehensive Benchmark Suite ==="); long start = System.nanoTime(); int fib30 = fibonacci(30); long end = System.nanoTime(); long fibTime = (end - start) / 1000000; System.out.print("Fibonacci(30) recursive = "); System.out.println(fib30); System.out.print("Time: "); System.out.print(fibTime); System.out.println(" ms"); start = System.nanoTime(); int fib40iter = fibonacciIterative(40); end = System.nanoTime(); long fibIterTime = (end - start) / 1000000; System.out.print("Fibonacci(40) iterative = "); System.out.println(fib40iter); System.out.print("Time: "); System.out.print(fibIterTime); System.out.println(" ms"); start = System.nanoTime(); int primes = countPrimes(100000); end = System.nanoTime(); long primeTime = (end - start) / 1000000; System.out.print("Primes up to 100000 = "); System.out.println(primes); System.out.print("Time: "); System.out.print(primeTime); System.out.println(" ms"); start = System.nanoTime(); long sumResult = sumLoop(10000000); end = System.nanoTime(); long sumTime = (end - start) / 1000000; System.out.print("Sum 0..10000000 = "); System.out.println(sumResult); System.out.print("Time: "); System.out.print(sumTime); System.out.println(" ms"); start = System.nanoTime(); int arrSum = arraySum(1000000); end = System.nanoTime(); long arrSumTime = (end - start) / 1000000; System.out.print("Array sum (1M elements) = "); System.out.println(arrSum); System.out.print("Time: "); System.out.print(arrSumTime); System.out.println(" ms"); start = System.nanoTime(); int arrRev = arrayReverse(1000000); end = System.nanoTime(); long arrRevTime = (end - start) / 1000000; System.out.print("Array reverse (1M elements) = "); System.out.println(arrRev); System.out.print("Time: "); System.out.print(arrRevTime); System.out.println(" ms"); start = System.nanoTime(); int nested = nestedLoops(1000); end = System.nanoTime(); long nestedTime = (end - start) / 1000000; System.out.print("Nested loops (1000x1000) = "); System.out.println(nested); System.out.print("Time: "); System.out.print(nestedTime); System.out.println(" ms"); start = System.nanoTime(); int fact = factorial(15); end = System.nanoTime(); long factTime = (end - start) / 1000000; System.out.print("Factorial(15) recursive = "); System.out.println(fact); System.out.print("Time: "); System.out.print(factTime); System.out.println(" ms"); start = System.nanoTime(); int ack = ackermann(3, 6); end = System.nanoTime(); long ackTime = (end - start) / 1000000; System.out.print("Ackermann(3, 6) = "); System.out.println(ack); System.out.print("Time: "); System.out.print(ackTime); System.out.println(" ms"); start = System.nanoTime(); int methodCall = methodCallOverhead(10000000); end = System.nanoTime(); long methodCallTime = (end - start) / 1000000; System.out.print("Method calls (10M) = "); System.out.println(methodCall); System.out.print("Time: "); System.out.print(methodCallTime); System.out.println(" ms"); start = System.nanoTime(); long arith = arithmeticOps(10000000); end = System.nanoTime(); long arithTime = (end - start) / 1000000; System.out.print("Arithmetic ops (10M) = "); System.out.println(arith); System.out.print("Time: "); System.out.print(arithTime); System.out.println(" ms"); start = System.nanoTime(); int cond = conditionalBranching(10000000); end = System.nanoTime(); long condTime = (end - start) / 1000000; System.out.print("Conditional branches (10M) = "); System.out.println(cond); System.out.print("Time: "); System.out.print(condTime); System.out.println(" ms"); start = System.nanoTime(); int complex = complexConditions(10000000); end = System.nanoTime(); long complexTime = (end - start) / 1000000; System.out.print("Complex conditions (10M) = "); System.out.println(complex); System.out.print("Time: "); System.out.print(complexTime); System.out.println(" ms"); start = System.nanoTime(); int matrix = matrixMultiply(50); end = System.nanoTime(); long matrixTime = (end - start) / 1000000; System.out.print("Matrix multiply (50x50) = "); System.out.println(matrix); System.out.print("Time: "); System.out.print(matrixTime); System.out.println(" ms"); start = System.nanoTime(); int bubble = bubbleSort(5000); end = System.nanoTime(); long bubbleTime = (end - start) / 1000000; System.out.print("Bubble sort (5000 elements) = "); System.out.println(bubble); System.out.print("Time: "); System.out.print(bubbleTime); System.out.println(" ms"); System.out.println("=== Benchmark Complete ==="); return 0; } }