#include <iostream>
#include <cstdlib>
#include <ctime>
#include <sys/mman.h>
#include <unistd.h>
#include "ProlificScheduler.hpp"

using namespace std;

void print_matrix(double* mat, int n) { 
	for (int i = 0; i < n; i++) {
        	for (int j = 0; j < n; j++) {
                        cout << mat[i * n + j] << " ";
                                }
                          cout << endl;
                        }
                   cout << endl;
                  }

int main() {
	int n = 5; // Μικρό n για να φαίνεται η εκτύπωση
        size_t size = n * n * sizeof(double);
        double* A = (double*)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

        srand((unsigned int)time(NULL));
        for (int i = 0; i < n * n; i++) {
        	A[i] = (rand() % 2001) - 1000.0;
                }

	cout << " Matrix  A: " << endl;
    	print_matrix(A, n);

        ProlificScheduler prolific;
        
        prolific.execute(n, n, A, n);

        cout << " Sorted Matrix A :" << endl;
               print_matrix(A, n);

        munmap(A, size);
 return 0;
 };
