#include <mkl.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const double a[] = {1, 2, 3, 4};
    const double b[] = {5, 6, 7, 8};
    const double expected[] = {19, 22, 43, 50};
    double c[4] = {0};
    cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
                2, 2, 2, 1.0, a, 2, b, 2, 0.0, c, 2);
    for (int i = 0; i < 4; ++i)
        if (!isfinite(c[i]) || fabs(c[i] - expected[i]) > 1e-12)
            return EXIT_FAILURE;

    double matrix[] = {3, 1, 1, 2};
    double rhs[] = {9, 8};
    MKL_INT pivots[2];
    MKL_INT info = LAPACKE_dgesv(LAPACK_ROW_MAJOR, 2, 1, matrix, 2,
                               pivots, rhs, 1);
    if (info != 0 || !isfinite(rhs[0]) || !isfinite(rhs[1]) ||
        fabs(rhs[0] - 2.0) > 1e-12 || fabs(rhs[1] - 3.0) > 1e-12)
        return EXIT_FAILURE;
    puts("PASS: BLAS matrix product and LAPACK linear solve");
    return EXIT_SUCCESS;
}
