#include <stdio.h>
#include "mxlib.h"

/** Example main functions for demo purposes */
/* The matrices used are embedded in the code to eliminate the need of separate text files */

/** The matrix creation functions */
/*int main(void) {
    Matrix *A = Matrix_create(3, 3,
                              1.0, 2.0, 3.0,
                              4.0, 5.0, 6.0,
                              7.0, 8.0, 9.0);
    Matrix_display(A, 0);
    printf("\n");

    Matrix *B = Matrix_create_nullmatrix(4,6);
    Matrix_display(B, 0);
    printf("\n");

    Matrix *C = Matrix_create_unitmatrix(5);
    Matrix_display(C, 0);
    printf("\n");

    Matrix_delete(A);
    Matrix_delete(B);
    Matrix_delete(C);
    return 0;
}*/

/** Inverse calculation and matrix multiplication */
/*int main(void) {    Matrix *A = Matrix_create(4, 4,
                              6.0, 2.0, 1.0, 3.0,
                              5.0, 7.0, 9.0, 2.0,
                              1.0, 7.0, 8.0, 3.0,
                              9.0, 1.0, 5.0, 1.0);
    Matrix_display(A, 2);
    printf("\n");

    Matrix *I = Matrix_inverse(A);
    Matrix_display(I, 2);
    printf("\n");

    Matrix *AI = Matrix_multiply(A, I);
    Matrix_display(AI, 0);

    Matrix_delete(A);
    Matrix_delete(I);
    Matrix_delete(AI);
    return 0;
}*/

/** Inverse calculation and matrix multiplication using the _adv functions */
/*int main(void) {    Matrix *A = Matrix_create(4, 4,
                              6.0, 2.0, 1.0, 3.0,
                              5.0, 7.0, 9.0, 2.0,
                              1.0, 7.0, 8.0, 3.0,
                              9.0, 1.0, 5.0, 1.0);
    Matrix_display(A, 2);
    printf("\n");

    Matrix_adv_display(1, Matrix_inverse(A), 2);
    printf("\n");

    Matrix_adv_display(1, Matrix_adv_multiply(0, A, 1, Matrix_inverse(A)), 0);
    printf("\n");

    Matrix_delete(A);
    return 0;
}*/

/** Solving a system of linear equations */
/*int main(void) {
    Matrix *A = Matrix_create(4, 4,
                              2.0, -1.0, 6.0, -12.0,
                              2.0, 2.0, 3.0, -24.0,
                              6.0, -1.0, 17.0, -46.0,
                              4.0, -1.0, 13.0, -32.0);
    Matrix_display_with_separator(A, 0, 3);
    printf("\n");

    Matrix_linear_equations_solve(A);
    Matrix_display_with_separator(A, 0, 3);

    Matrix_delete(A);
    return 0;
}*/

/** Calculating determinants */
/*int main(void) {
    Matrix *A = Matrix_create(4, 4,
                              3.0, 12.0, -3.0, -6.0,
                              2.0, 8.0, 3.0, -9.0,
                              1.0, 5.0, -1.0, 0.0,
                              -1.0, -3.0, 3.0, 5.0);
    Matrix_display(A, 0);
    printf("\n");
    printf("The determinant of matrix A is %.2f\n\n", Matrix_determinant(A));

    Matrix *B = Matrix_create(5, 5,
                              0.0, 0.0, 9.0, 0.0, 7.0,
                              2.0, 1.0, 0.0, 0.0, 0.0,
                              0.0, 0.0, 0.0, 5.0, 0.0,
                              6.0, 0.0, 0.0, 0.0, 4.0,
                              0.0, 8.0, 3.0, 0.0, 0.0);
    Matrix_display(B, 0);
    printf("\n");
    printf("The determinant of matrix B is %.2f\n\n", Matrix_determinant(B));

    Matrix_delete(A);
    Matrix_delete(B);
    return 0;
}*/
