Пример #1
0
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);
}
Пример #2
0
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
}
Пример #3
0
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;
}