import java.util.Random;
import java.util.concurrent.*;

public class main {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        int[][] matrix = generateMatrix(1000, 1000);

        long startTime = System.nanoTime();
        int singleThreadedMax = SingleThreaded.findMax(matrix);
        long endTime = System.nanoTime();
        System.out.println("Single-threaded max: " + singleThreadedMax);
        System.out.println("Single-threaded time: " + (endTime - startTime) + " ns");

        startTime = System.nanoTime();
        int threadPoolMax = ThreadPool.findMax(matrix, 10);
        endTime = System.nanoTime();
        System.out.println("ThreadPoolExecutor max: " + threadPoolMax);
        System.out.println("ThreadPoolExecutor time: " + (endTime - startTime) + " ns");

        startTime = System.nanoTime();
        int forkJoinMax = ForkJoin.findMax(matrix);
        endTime = System.nanoTime();
        System.out.println("ForkJoinPool max: " + forkJoinMax);
        System.out.println("ForkJoinPool time: " + (endTime - startTime) + " ns");
    }

    public static int[][] generateMatrix(int rows, int cols) {
        int[][] matrix = new int[rows][cols];
        Random random = new Random();
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                matrix[i][j] = random.nextInt(10000);
            }
        }
        return matrix;
    }
}
