int main(void) { printf("========= Starts SBM tests 1 for SBM ========= \n"); SparseBlockStructuredMatrix M; FILE *file = fopen("data/SBM1.dat", "r"); newFromFileSBM(&M, file); fclose(file); /*alloc enough memory */ int res = test_SBMRowToDense(&M); if (res) { printf("========= Failed SBM tests 1 for SBM ========= \n"); return 1; } SBMfree(&M, NUMERICS_SBM_FREE_BLOCK); SparseBlockStructuredMatrix M2; file = fopen("data/SBM2.dat", "r"); newFromFileSBM(&M2, file); fclose(file); res = test_SBMRowToDense(&M2); if (res) { printf("========= Failed SBM tests 1 for SBM ========= \n"); return 1; } SBMfree(&M2, NUMERICS_SBM_FREE_BLOCK); printf("\n========= Succeeded SBM tests 1 for SBM ========= \n"); return 0; }
int main(void) { int res; printf("========= Starts SBM tests 4 for SBM ========= \n"); SparseBlockStructuredMatrix M; FILE *file = fopen("data/SBM2.dat", "r"); newFromFileSBM(&M, file); printSBM(&M); fclose(file); /*alloc enough memory */ CSparseMatrix sparseMat; res = SBMtoSparseInitMemory(&M, &sparseMat); if (res) { printf("========= Failed SBM tests 4 for SBM ========= \n"); return 1; } res = SBMtoSparse(&M, &sparseMat); if (res) { printf("========= Failed SBM tests 4 for SBM ========= \n"); return 1; } cs_print(&sparseMat, 1); cs_spfree_on_stack(&sparseMat); int n = M.blocksize0[M.blocknumber0 - 1]; int m = M.blocksize1[M.blocknumber1 - 1]; double * denseMat = (double *)malloc(n * m * sizeof(double)); SBMtoDense(&M, denseMat); if (res) { printf("========= Failed SBM tests 4 for SBM ========= \n"); return 1; } printf("["); for (int i = 0; i < n * m; i++) { printf("%lf ", denseMat[i]); if ((i + 1) % m == 0) printf("\n"); } printf("]"); printf("\n (warning: column-major) \n"); free(denseMat); printf("NUMERICS_SBM_FREE_BLOCK value %d", NUMERICS_SBM_FREE_BLOCK); SBMfree(&M, NUMERICS_SBM_FREE_BLOCK); printf("\n========= Succed SBM tests 4 for SBM ========= \n"); return 0; }
int newFromFile(NumericsMatrix* const m, FILE *file) { if (! m) { fprintf(stderr, "Numerics, NumericsMatrix newFromFile failed, NULL input.\n"); exit(EXIT_FAILURE); } int storageType; size_t size0; size_t size1; int info = 0; void* data = NULL; CHECK_IO(fscanf(file, "%d", &storageType), &info); CHECK_IO(fscanf(file, SN_SIZE_T_F, &size0), &info); CHECK_IO(fscanf(file, SN_SIZE_T_F, &size1), &info); if (storageType == NM_DENSE) { CHECK_IO(fscanf(file, SN_SIZE_T_F "\t" SN_SIZE_T_F "\n", &size0, &size1), &info); data = malloc(size1 * size0 * sizeof(double)); double* data_d = (double*) data; for (size_t i = 0; i < size1 * size0; ++i) { CHECK_IO(fscanf(file, "%le ", &(data_d[i])), &info); } } else if (storageType == NM_SPARSE_BLOCK) { data = newSBM(); newFromFileSBM((SparseBlockStructuredMatrix*)data, file); } fillNumericsMatrix(m, storageType, (int)size0, (int)size1, data); return info; }