static void vector_3(void) { vector_t v; vector_init(&v, __func__, 1); CU_ASSERT(vector_size(&v) == 0); CU_ASSERT(vector_pages(&v) == 0); CU_ASSERT(vector_capacity(&v) == 0); CU_ASSERT(vector_elem_size(&v) == 1); FILE * f = fopen("my_vector.bin", "r"); CU_ASSERT_FATAL(f != NULL); CU_ASSERT(COUNT < vector_load(&v, f)); fclose(f), f = NULL; crc3 = 0; for (int i=0; i<COUNT; i++) { unsigned char c; vector_get(&v, i, &c); crc3 = clib_crc32(c, crc3); } CU_ASSERT_FATAL(crc3 != 0); CU_ASSERT_FATAL(crc2 == crc3); vector_delete(&v); }
bool test(const char* filename, FILE* fout) { FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror(filename); return false; } int fmt; int suc = fscanf(fp, "%d", &fmt); if (suc == EOF || suc != 1) { fclose(fp); return false; } if (fclose(fp) != 0) { perror(filename); } switch (fmt) { case FMT_VECTOR: { Vector vect = { .count = 0, .items = NULL }; if (!vector_load(&vect, filename)) { return false; } vector_print(&vect, fout); vector_free(&vect); } break; case FMT_MATRIX: { Matrix mat = { .rows = 0, .cols = 0, .items = NULL }; if (!matrix_load(&mat, filename)) { return false; } matrix_print(&mat, fout); matrix_free(&mat); } break; case FMT_VECTOR_OF_MATRICES: { VectorOfMatrices vm = { .count = 0, .rows = 0, .cols = 0, .items = NULL }; if (!vm_load(&vm, filename)) { return false; } vm_print(&vm, fout); vm_free(&vm); } break; default: return false; } return true; } bool vector_load(Vector* vect, const char* filename) { assert(vect != NULL); FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror(filename); goto return_false; } int fmt; unsigned long count; int suc = fscanf(fp, "%d", &fmt); CHECK_IO(suc, 1, return_false); if (fmt != FMT_VECTOR) { goto return_false; } suc = fscanf(fp, "%lu", &count); CHECK_IO(suc, 1, return_false); if (count <= 0) { goto return_false; } vect->count = count; if (!vector_alloc(vect)) { goto return_false; } int* pVect = vect->items; for (size_t i = 0; i < vect->count; ++i) { suc = fscanf(fp, "%d", pVect++); CHECK_IO(suc, 1, return_false); } if (fclose(fp) != 0) { perror(filename); } return true; return_false: if (fp != NULL && fclose(fp) != 0) { perror(filename); } vector_free(vect); return false; } void vector_print(const Vector* vect, FILE* fp) { assert(vect != NULL); assert(fp != NULL); assert(vect->count > 0); assert(vect->items != NULL); fprintf(fp, "%d\n", FMT_VECTOR); fprintf(fp, "%zu\n", vect->count); int* pVect = vect->items; for (size_t i = 0; i < vect->count; ++i) { fprintf(fp, "%d ", *pVect++); } } void noop_print(FILE* fp) { assert(fp != NULL); fprintf(fp, "false\n"); }
int main (void) { { __v2si val; __v2si val2; __v2si val3; init_val(&val); /* Copy val to val2. */ vector_store (&val2, val); /* Copy val2 to val3. */ val3 = vector_load (&val2); /* Compare val to val3. */ { char *p = (char*)&val; char *p2 = (char*)&val3; if (p[0] != p2[0]) return 1; if (p[1] != p2[1]) return 1; if (p[2] != p2[2]) return 1; if (p[3] != p2[3]) return 1; if (p[4] != p2[4]) return 1; if (p[5] != p2[5]) return 1; if (p[6] != p2[6]) return 1; if (p[7] != p2[7]) return 1; } } { __v2si val4 = vector_const (); char *p = (char*)&val4; if (p[0] != 1) return 1; if (p[1] != 0) return 1; if (p[2] != 0) return 1; if (p[3] != 0) return 1; if (p[4] != 2) return 1; if (p[5] != 0) return 1; if (p[6] != 0) return 1; if (p[7] != 0) return 1; } return 0; }