static void test_file_sort(unsigned buffer_size, unsigned temp_files, file_merger_feed_record_t callback, int skip_writeback) { file_sorter_error_t ret; int i = 0; create_file(); ret = sort_file(UNSORTED_FILE_PATH, SORT_TMP_DIR, temp_files, buffer_size, read_record, write_record, callback, compare_records, free_record, skip_writeback, &i); cb_assert(ret == FILE_SORTER_SUCCESS); if (!skip_writeback) { cb_assert(check_file_sorted(UNSORTED_FILE_PATH)); } else { cb_assert(check_file_sorted(UNSORTED_FILE_PATH) == 0); } remove(UNSORTED_FILE_PATH); }
static void test_file_sort(unsigned buffer_size, unsigned temp_files, file_merger_feed_record_t callback, int skip_writeback) { #ifdef _MSC_VER fprintf(stderr, "This test is broken on WIN32. See MB-10292\n"); #else file_sorter_error_t ret; int i = 0; create_file(); ret = sort_file(UNSORTED_FILE_PATH, SORT_TMP_DIR, temp_files, buffer_size, read_record, write_record, callback, compare_records, free_record, skip_writeback, &i); assert(ret == FILE_SORTER_SUCCESS); if (!skip_writeback) { assert(check_file_sorted(UNSORTED_FILE_PATH)); } else { assert(check_file_sorted(UNSORTED_FILE_PATH) == 0); } remove(UNSORTED_FILE_PATH); #endif }
int main(void) { const char *source_files[N_FILES] = { "merger_sorted_file_1.tmp", "merger_sorted_file_2.tmp", "merger_sorted_file_3.tmp", "merger_sorted_file_4.tmp" }; const char *dest_file = "merged_file.tmp"; const int batches[N_FILES][MAX_RECORDS_PER_FILE] = { {3, 5, 6, 14, 18, 19, 29, 30, 35, 38, 44, 45, 46, 51, 54, 57, 62, 65, 75, 76, 81, 83, 91, 92, 95, 104, 105, 107}, {1, 2, 4, 9, 17, 23, 25, 32, 33, 37, 41, 49, 55, 58, 61, 68, 70, 71, 72, 77, 80, 87, 89, 94, 98, 100, 111, 112, 113, 114, 115, 116, 117, 119}, {10, 12, 15, 20, 21, 22, 27, 34, 36, 39, 42, 47, 52, 53, 56, 63, 64, 74, 78, 79, 86, 88, 93, 99, 103, 106, 108, 109, 121, 122, 123}, {7, 8, 11, 13, 16, 24, 26, 28, 31, 40, 43, 48, 50, 59, 60, 66, 69, 73, 82, 84, 85, 90, 96, 97, 101, 102, 110, 118, 120} }; unsigned i, j; unsigned num_records = 0; file_merger_error_t ret; fprintf(stderr, "\nRunning file merger tests...\n"); for (i = 0; i < N_FILES; ++i) { FILE *f; remove(source_files[i]); f = fopen(source_files[i], "ab"); cb_assert(f != NULL); for (j = 0; j < MAX_RECORDS_PER_FILE; ++j) { if (batches[i][j] == 0) { break; } if (j > 0) { cb_assert(batches[i][j] > batches[i][j - 1]); } cb_assert(fwrite(&batches[i][j], sizeof(batches[i][j]), 1, f) == 1); num_records += 1; } fclose(f); } remove(dest_file); ret = merge_files(source_files, N_FILES, dest_file, read_record, write_record, NULL, compare_records, NULL, free_record, 0, NULL); cb_assert(ret == FILE_MERGER_SUCCESS); cb_assert(check_file_sorted(dest_file) == num_records); for (i = 0; i < N_FILES; ++i) { remove(source_files[i]); } remove(dest_file); fprintf(stderr, "Running file merger tests passed\n\n"); return 0; }