Пример #1
0
static void test_textfile_read_line_generic(const char *filename,
                                            enum RFtext_encoding encoding,
                                            enum RFendianess endianess)
{
    struct RFtextfile f;
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_fname, filename, strlen(filename)));
    ck_assert(rf_textfile_init(&f, &g_fname, RF_FILE_READ, endianess,
                               encoding, RF_EOL_LF));

    /* 1st line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(encoding, endianess, false, line_scenario1));
    /* 2nd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(encoding, endianess, false, line_scenario2));
    /* 3rd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(encoding, endianess, false, line_scenario3));
    /* EOF */
    ck_assert(RE_FILE_EOF == rf_textfile_read_line(&f, &g_buff));

    rf_textfile_deinit(&f);
}
Пример #2
0
}END_TEST

START_TEST(test_stringx_reset) {
    struct RFstringx s;
    static const struct RFstring sub1 = RF_STRING_STATIC_INIT("に");
    ck_assert(
        rf_stringx_init(
            &s,
            "中国共産党総書記に習近平氏 新指導部の7人発表"
        )
    );

    /* resetting an unmoved string has no effect */
    rf_stringx_reset(&s);
    ck_assert_rf_str_eq_cstr(
        &s,
        "中国共産党総書記に習近平氏 新指導部の7人発表"
    );

    /* move and reset */
    ck_assert(RF_FAILURE != rf_stringx_move_after(&s, &sub1, NULL, 0));
    ck_assert_rf_str_eq_cstr(&s, "習近平氏 新指導部の7人発表");
    rf_stringx_reset(&s);
    ck_assert_rf_str_eq_cstr(
        &s,
        "中国共産党総書記に習近平氏 新指導部の7人発表"
    );

    rf_stringx_deinit(&s);
}END_TEST
Пример #3
0
}END_TEST

START_TEST(test_textfile_insert_before) {
    struct RFtextfile f;
    static const char *s;
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_fname, CLIB_TESTS_PATH"temp_file",
                  strlen(CLIB_TESTS_PATH"temp_file")));
    ck_assert(rf_textfile_init(&f, &g_fname, RF_FILE_NEW,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));

    /* write line 1 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario1);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* write line 3 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario3);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* now insert line before 1st */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario2);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_insert(&f, 1, &g_buff, false));

    /* go to the starting position and switch to reading */
    ck_assert(RF_SUCCESS == rf_textfile_go_to_line(&f, 1));
    ck_assert(rf_textfile_set_mode(&f, RF_FILE_READ));

    /* read 1st line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario2));

    /* read 2nd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario1));

    /* read 3rd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario3));
    /* check for empty line and EOF */
    ck_assert(RE_FILE_EOF == rf_textfile_read_line(&f, &g_buff));

    rf_textfile_deinit(&f);
    ck_assert(rf_system_delete_file(&g_fname));
}END_TEST
Пример #4
0
}END_TEST

START_TEST(test_textfile_replace) {
    struct RFtextfile f;
    static const char *s;
    static struct RFstring str = RF_STRING_STATIC_INIT("Line Replacement");
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_fname, CLIB_TESTS_PATH"temp_file",
                  strlen(CLIB_TESTS_PATH"temp_file")));
    ck_assert(rf_textfile_init(&f, &g_fname, RF_FILE_NEW,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));

    /* write line 1 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario1);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* write line 2 */
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, SECOND_LINE_UTF8"\n",
                  strlen(SECOND_LINE_UTF8"\n")));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* write line 3 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario3);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, THIRD_LINE_UTF8"\n",
                  strlen(THIRD_LINE_UTF8"\n")));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* replace the 2nd line */
    ck_assert(rf_textfile_replace(&f, 2, &str));

    /* go to the starting position and switch to reading */
    ck_assert(RF_SUCCESS == rf_textfile_go_to_line(&f, 1));
    ck_assert(rf_textfile_set_mode(&f, RF_FILE_READ));

    /* read 1st line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario1));

    /* read 2nd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert(rf_string_equal(&str, RF_STRX2STR(&g_buff)));

    /* read 3rd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(&g_buff, THIRD_LINE_UTF8);

    /* check for empty line and EOF */
    ck_assert(RE_FILE_EOF == rf_textfile_read_line(&f, &g_buff));

    ck_assert(rf_system_delete_file(&g_fname));
    rf_textfile_deinit(&f);
}END_TEST
Пример #5
0
}END_TEST

START_TEST(test_textfile_copy) {
    struct RFtextfile f;
    struct RFtextfile copy_f;
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_fname, CLIB_TESTS_PATH"utf8stringfile",
                  strlen(CLIB_TESTS_PATH"utf8stringfile")));
    ck_assert(rf_textfile_init(&f, &g_fname, RF_FILE_READ,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));

    /* 1st line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario1));

    /* make a copy */
    ck_assert(rf_textfile_copy_in(&copy_f, &f));
    /* 2nd line from copy */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&copy_f, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario2));

    rf_textfile_deinit(&f);
    rf_textfile_deinit(&copy_f);
}END_TEST
Пример #6
0
} END_TEST

START_TEST (test_type_to_str) {

    struct type *t_u32 = testsupport_analyzer_type_create_simple_elementary(ELEMENTARY_TYPE_UINT_32);
    struct type *t_f64 = testsupport_analyzer_type_create_simple_elementary(ELEMENTARY_TYPE_FLOAT_64);
    struct type *t_string = testsupport_analyzer_type_create_simple_elementary(ELEMENTARY_TYPE_STRING);
    struct type *t_prod_1 = testsupport_analyzer_type_create_operator(TYPEOP_PRODUCT,
                                                                     t_u32,
                                                                     t_f64);
    struct type *t_sum_1 = testsupport_analyzer_type_create_operator(TYPEOP_SUM,
                                                                     t_f64,
                                                                     t_string);
    static const struct RFstring id_person =  RF_STRING_STATIC_INIT("person");
    struct type *t_defined_1 = testsupport_analyzer_type_create_defined(&id_person,
                                                                        t_sum_1);

    struct RFstring *ts;
    RFS_PUSH();
    ck_assert((ts = type_str(t_u32, TSTR_DEFAULT)));
    ck_assert_rf_str_eq_cstr(ts, "u32");
    ck_assert((ts = type_str(t_prod_1, TSTR_DEFAULT)));
    ck_assert_rf_str_eq_cstr(ts, "u32,f64");
    ck_assert((ts = type_str(t_defined_1, TSTR_DEFAULT)));
    ck_assert_rf_str_eq_cstr(ts, "person");
    RFS_POP();
} END_TEST
Пример #7
0
}END_TEST

START_TEST(test_stringx_move_after_pair) {
    struct RFstringx s;
    struct RFstring res_str_good;
    struct RFstring res_str_bad;
    struct RFstring dependent_s;
    static const struct RFstring sub1 = RF_STRING_STATIC_INIT("「");
    static const struct RFstring sub2 = RF_STRING_STATIC_INIT("」");
    static const struct RFstring sub3 = RF_STRING_STATIC_INIT("eleos");
    static const struct RFstring sub4 = RF_STRING_STATIC_INIT("notthere");

    ck_assert(
        rf_stringx_init(
            &s,
            "これがMoveAfterPairのテストですね!「Δεν θα επιστραφω εγω"
            "」 Γεμιζουμε το στρινγκ "
            "με διαφορα 「ブラケットの中のテ"
            "キストは結果になる」Let's see if the function will work "
            "as expected."
        )
    );


    ck_assert(
        rf_stringx_move_after_pair(&s, &sub1, &sub2, &res_str_good, 0, 2)
    );
    ck_assert_rf_str_eq_cstr(
        &s, "Let's see if the function will work as expected."
    );
    ck_assert_rf_str_eq_cstr(
        &res_str_good, "ブラケットの中のテキストは結果になる"
    );

    /* dependent string */
    rf_stringx_reset(&s);
    ck_assert(
        rf_stringx_move_after_pair(&s, &sub1, &sub2,
                                   &dependent_s, RF_STRING_DEPENDENT, 2)
    );
    ck_assert_rf_str_eq_cstr(
        &s, "Let's see if the function will work as expected."
    );
    ck_assert_rf_str_eq_cstr(
        &dependent_s, "ブラケットの中のテキストは結果になる"
    );

    /* non existing substrings */
    ck_assert(!rf_stringx_move_after_pair(&s, &sub3, &sub4, &res_str_bad, 0, 2));

    rf_stringx_deinit(&s);
    rf_string_deinit(&res_str_good);
    rf_string_deinit(&dependent_s);
}END_TEST
Пример #8
0
}END_TEST

START_TEST(test_textfile_read_lines) {
    struct RFtextfile f;
    static const struct RFstring fname = RF_STRING_STATIC_INIT(
        CLIB_TESTS_PATH"utf8stringfile"
    );
    uint32_t buff_arr[64];
    struct RFarray line_arr = RF_ARRAY_SHALLOW_INIT(buff_arr);
    ck_assert(rf_textfile_init(&f, &fname, RF_FILE_READ,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));

    rf_stringx_reset(&g_buff);
    /* read all lines (3 + 1 empty line) */
    ck_assert_int_eq(4, rf_textfile_read_lines(&f, 0, &g_buff, &line_arr));
    ck_assert_rf_str_eq_cstr(&g_buff,
                             FIRST_LINE_UTF8"\n"
                             SECOND_LINE_UTF8"\n"
                             THIRD_LINE_UTF8"\n\n"
    );

    ck_assert_int_eq(rf_array_at_unsafe(&line_arr, 0, uint32_t), 0);
    ck_assert_int_eq(rf_array_at_unsafe(&line_arr, 1, uint32_t), 11);
    ck_assert_int_eq(rf_array_at_unsafe(&line_arr, 2, uint32_t), 366);
    ck_assert_int_eq(rf_array_at_unsafe(&line_arr, 3, uint32_t), 1166);

    ck_assert(RF_SUCCESS == rf_textfile_go_to_line(&f, 1));

    /* read 3 lines */
    ck_assert(3 == rf_textfile_read_lines(&f, 3, &g_buff, 0));
    ck_assert_rf_str_eq_cstr(&g_buff,
                             FIRST_LINE_UTF8"\n"
                             SECOND_LINE_UTF8"\n"
                             THIRD_LINE_UTF8"\n"
    );

    ck_assert(RF_SUCCESS == rf_textfile_go_to_line(&f, 1));

    /* read 2 lines */
    ck_assert(2 == rf_textfile_read_lines(&f, 2, &g_buff, 0));
    ck_assert_rf_str_eq_cstr(&g_buff,
                             FIRST_LINE_UTF8"\n"
                             SECOND_LINE_UTF8"\n"
    );

    ck_assert(RF_SUCCESS == rf_textfile_go_to_line(&f, 1));

    /* read 1 line */
    ck_assert(1 == rf_textfile_read_lines(&f, 1, &g_buff, 0));
    ck_assert_rf_str_eq_cstr(&g_buff, FIRST_LINE_UTF8"\n");

    rf_textfile_deinit(&f);
}END_TEST
Пример #9
0
} END_TEST

START_TEST (test_type_op_create_str) {

    struct type *t_u32 = testsupport_analyzer_type_create_simple_elementary(ELEMENTARY_TYPE_UINT_32);
    struct type *t_f64 = testsupport_analyzer_type_create_simple_elementary(ELEMENTARY_TYPE_FLOAT_64);
    RFS_PUSH();
    ck_assert_rf_str_eq_cstr(type_op_create_str(t_u32, t_f64, TYPEOP_PRODUCT), "u32,f64");
    ck_assert_rf_str_eq_cstr(type_op_create_str(t_u32, t_f64, TYPEOP_SUM), "u32|f64");
    ck_assert_rf_str_eq_cstr(type_op_create_str(t_u32, t_f64, TYPEOP_IMPLICATION), "u32->f64");
    RFS_POP();
} END_TEST
Пример #10
0
}END_TEST

START_TEST(test_stringx_move_to_index) {
    struct RFstringx s;
    unsigned int pr_index;

    ck_assert(
        rf_stringx_init(
            &s,
            "Με την κεντρική εκδήλωση, μετά τις 2 το "
            "μεσημέρι, και την "
            "πορεία προς την αμερικανική πρεσβεία, "
            "περίπου μία ώρα "
            "αργότερα, κορυφώνονται το Σάββατο οι "
            "εκδηλώσεις για την "
            "39η επέτειο από την Εξέγερση του "
            "Πολυτεχνείου. Λόγω των "
            "εκδηλώσεων, θα ισχύσουν έκτακτες "
            "κυκλοφοριακές ρυθμίσεις "
            "έως και το πρωί της Κυριακής."
        )
    );
    pr_index = s.bIndex;


    rf_stringx_move_forward(&s, 96);
    ck_assert_rf_str_eq_cstr(
        &s,
        "περίπου μία ώρα αργότερα, κορυφώνονται το "
        "Σάββατο οι "
        "εκδηλώσεις για την 39η επέτειο από την Εξέγερση "
        "του Πολυτεχνείου. Λόγω των εκδηλώσεων, θα "
        "ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και το πρωί "
        "της Κυριακής."
    );
    rf_stringx_move_to_index(&s, pr_index);
    ck_assert_rf_str_eq_cstr(
        &s,
        "Με την κεντρική εκδήλωση, μετά τις 2 το "
        "μεσημέρι, και την "
        "πορεία προς την αμερικανική πρεσβεία, "
        "περίπου μία ώρα "
        "αργότερα, κορυφώνονται το Σάββατο οι "
        "εκδηλώσεις για την "
        "39η επέτειο από την Εξέγερση του "
        "Πολυτεχνείου. Λόγω των "
        "εκδηλώσεων, θα ισχύσουν έκτακτες "
        "κυκλοφοριακές ρυθμίσεις "
        "έως και το πρωί της Κυριακής."
    );
    rf_stringx_deinit(&s);
}END_TEST
Пример #11
0
} END_TEST

START_TEST (test_RFS_same_ptr) {
    struct RFstring *s1;
    RFS_PUSH();
    s1 = RFS("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    ck_assert_rf_str_eq_cstr(s1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    s1 = RFS(RFS_PF "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ",
             RFS_PA(s1));
    ck_assert_rf_str_eq_cstr(s1,
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
    RFS_POP();
} END_TEST
Пример #12
0
} END_TEST

START_TEST (test_RFS_realloc_vararg_at_second_use) {
    struct RFstring *s1;
    struct RFstring *s2;
    RFS_PUSH();
    s1 = RFS("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%d%d", 23, 24);
    ck_assert_rf_str_eq_cstr(s1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz2324");
    RFS_PUSH();
    s2 = RFS("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ%s%d", "eleos", 124);
    ck_assert_rf_str_eq_cstr(s1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz2324");
    ck_assert_rf_str_eq_cstr(s2, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZeleos124");
    RFS_POP();
    RFS_POP();
} END_TEST
Пример #13
0
}END_TEST

START_TEST(test_stringx_move_forward) {
    struct RFstringx s;
    struct RFstringx s2;

    ck_assert(
        rf_stringx_init(
            &s,
            "Με την κεντρική εκδήλωση, μετά τις 2 το "
            "μεσημέρι, και την "
            "πορεία προς την αμερικανική πρεσβεία, "
            "περίπου μία ώρα "
            "αργότερα, κορυφώνονται το Σάββατο οι "
            "εκδηλώσεις για την "
            "39η επέτειο από την Εξέγερση του "
            "Πολυτεχνείου. Λόγω των "
            "εκδηλώσεων, θα ισχύσουν έκτακτες "
            "κυκλοφοριακές ρυθμίσεις "
            "έως και το πρωί της Κυριακής."
        )
    );

    rf_stringx_move_forward(&s, 96);
    ck_assert_rf_str_eq_cstr(
        &s,
        "περίπου μία ώρα αργότερα, κορυφώνονται το "
        "Σάββατο οι "
        "εκδηλώσεις για την 39η επέτειο από την Εξέγερση "
        "του Πολυτεχνείου. Λόγω των εκδηλώσεων, θα "
        "ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και το πρωί "
        "της Κυριακής."
    );

    ck_assert(
        rf_stringx_init(&s2, "中国共産党総書記に習近平氏 新指導部の7人発表")
    );
    rf_stringx_move_forward(&s2, 3);
    ck_assert_rf_str_eq_cstr(&s2, "産党総書記に習近平氏 新指導部の7人発表");

    /* go forward more than the length */
    rf_stringx_move_forward(&s2, 999);
    ck_assert_rf_str_eq_cstr(&s2, "");

    rf_stringx_deinit(&s);
    rf_stringx_deinit(&s2);
}END_TEST
Пример #14
0
static void test_RFS_in_recursive_functions()
{
    RFS_PUSH();
    struct RFstring *s1;
    s1 = get_str_rec(NULL, 0, true);
    ck_assert_rf_str_eq_cstr(
        s1,
        "0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    RFS_POP();
    RFS_PUSH();
    struct RFstring *s2;
    s2 = get_str_rec(NULL, 1, true);
    ck_assert_rf_str_eq_cstr(
        s2,
        "1abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    RFS_POP();
}
Пример #15
0
static void test_RFS_in_recursive_functions_with_local()
{
    RFS_PUSH();
    struct RFstring *s1;
    s1 = get_str_rec_with_local(NULL, 0);
    ck_assert_rf_str_eq_cstr(
        s1,
        "pre0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    RFS_POP();
    RFS_PUSH();
    struct RFstring *s2;
    s2 = get_str_rec_with_local(NULL, 1);
    ck_assert_rf_str_eq_cstr(
        s2,
        "pre0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre1abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
    );
    RFS_POP();
    RFS_PUSH();
    struct RFstring *s3;
    s3 = get_str_rec_with_local(NULL, 2);
    ck_assert_rf_str_eq_cstr(
        s3,
        "pre0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre1abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre2abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
    );
    RFS_POP();
    RFS_PUSH();
    struct RFstring *s4;
    s4 = get_str_rec_with_local(NULL, 3);
    ck_assert_rf_str_eq_cstr(
        s4,
        "pre0abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre1abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre2abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "pre3abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
    );
    RFS_POP();
}
Пример #16
0
} END_TEST

START_TEST (test_RFS_NT) {
    struct RFstring *s1 = RFS_NT("a string");
    struct RFstring *s2 = RFS_NT("a string %s %d", "with", 123);
    ck_assert_rf_str_eq_cstr(s1, "a string");
    ck_assert(rf_string_data(s1)[rf_string_length_bytes(s1)] == '\0');
    ck_assert_rf_str_eq_cstr(s2, "a string with 123");
    ck_assert(rf_string_data(s2)[rf_string_length_bytes(s2)] == '\0');
    struct RFstring *s3 = RFS_NT_OR_DIE("a string");
    struct RFstring *s4 = RFS_NT("a string %s %d", "with", 123);
    ck_assert_rf_str_eq_cstr(s3, "a string");
    ck_assert(rf_string_data(s3)[rf_string_length_bytes(s3)] == '\0');
    ck_assert_rf_str_eq_cstr(s4, "a string with 123");
    ck_assert(rf_string_data(s4)[rf_string_length_bytes(s4)] == '\0');

    // test that subsequent allocations don't overwite the null terminating
    // character
    ck_assert(rf_string_data(s1)[rf_string_length_bytes(s1)] == '\0');
    ck_assert(rf_string_data(s2)[rf_string_length_bytes(s2)] == '\0');
    ck_assert(rf_string_data(s3)[rf_string_length_bytes(s3)] == '\0');
    ck_assert(rf_string_data(s4)[rf_string_length_bytes(s4)] == '\0');
} END_TEST
Пример #17
0
} END_TEST

START_TEST (test_RFS_realloc_at_first_use) {
    struct RFstring *s1;
    struct RFstring *s2;
    RFS_PUSH();
    s1 = RFS(
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    ck_assert_rf_str_eq_cstr(
        s1,
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    RFS_PUSH();
    s2 = RFS("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
    ck_assert_rf_str_eq_cstr(
        s1,
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
    ck_assert_rf_str_eq_cstr(s2, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
    RFS_POP();
    RFS_POP();
} END_TEST
Пример #18
0
} END_TEST

START_TEST(test_acc_ws_none_empty) {
    struct inpfile *f;
    struct front_ctx *front;
    struct inpoffset *off;
    struct RFstringx *str;
    front = front_testdriver_new_main_source(rf_string_empty_get());
    f = front->file;
    ck_assert_msg(f, "Failed to assign string to file ");

    inpfile_acc_ws(f);
    off = inpfile_offset(f);
    ck_assert_inpoffset_eq(off, 0, 0, 0);
    str = inpfile_str(f);
    ck_assert_rf_str_eq_cstr(str, "");
} END_TEST
Пример #19
0
}END_TEST

START_TEST(test_stringx_move_end) {
    struct RFstringx s;
    ck_assert(
        rf_stringx_init(
            &s,
            "中国共産党総書記に習近平氏 新指導部の7人発表")
    );
    rf_stringx_move_end(&s);

    ck_assert_rf_str_eq_cstr(&s, "");
    ck_assert(s.bIndex == strlen(
                  "中国共産党総書記に習近平氏 新指導部の7人発表")
    );

    rf_stringx_deinit(&s);
}END_TEST
Пример #20
0
} END_TEST

START_TEST(test_acc_ws_full) {
    struct inpfile *f;
    struct front_ctx *front;
    struct inpoffset *off;
    struct RFstringx *str;
    static const struct RFstring s = RF_STRING_STATIC_INIT(" \n \r \t \n \n  ");
    front = front_testdriver_new_main_source(&s);
    f = front->file;
    ck_assert_msg(f, "Failed to assign string to file ");

    inpfile_acc_ws(f);
    off = inpfile_offset(f);
    ck_assert_inpoffset_eq(off, 12, 12, 3);
    str = inpfile_str(f);
    ck_assert_rf_str_eq_cstr(str, "");
} END_TEST
Пример #21
0
}END_TEST
/* Textfile Writting tests -- START */

START_TEST(test_textfile_write) {
    struct RFtextfile f;
    struct RFtextfile rf;

    static const char *s;
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_fname, CLIB_TESTS_PATH"temp_file",
                  strlen(CLIB_TESTS_PATH"temp_file")));
    ck_assert(rf_textfile_init(&f, &g_fname, RF_FILE_NEW,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));

    /* write line 1 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario1);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* write line 2 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario2);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    /* write line 3 */
    s = get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, true, line_scenario3);
    ck_assert(rf_stringx_assign_unsafe_nnt(
                  &g_buff, s,
                  strlen(s)));
    ck_assert(rf_textfile_write(&f, RF_STRX2STR(&g_buff)));

    rf_textfile_deinit(&f);

    /* reading */
    ck_assert(rf_textfile_init(&rf, &g_fname, RF_FILE_READ,
                               RF_ENDIANESS_UNKNOWN,
                               RF_UTF8, RF_EOL_LF));
    /* read 1st line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&rf, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario1));

    /* read 2nd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&rf, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario2));

    /* read 3rd line */
    ck_assert(RF_SUCCESS == rf_textfile_read_line(&rf, &g_buff));
    ck_assert_rf_str_eq_cstr(
        &g_buff,
        get_line(RF_UTF8, RF_ENDIANESS_UNKNOWN, false, line_scenario3));

    /* check for empty line and EOF */
    ck_assert(RE_FILE_EOF == rf_textfile_read_line(&rf, &g_buff));

    ck_assert(rf_system_delete_file(&g_fname));

    rf_textfile_deinit(&rf);
}END_TEST
Пример #22
0
}END_TEST

START_TEST(test_stringx_skip_chars) {
    struct RFstringx s;
    unsigned int bytes;
    unsigned int line_count;
    static const struct RFstring s1 = RF_STRING_STATIC_INIT("   \t  something");
    static const struct RFstring chars1 = RF_STRING_STATIC_INIT(" \t");
    static const struct RFstring s2 = RF_STRING_STATIC_INIT(
        " ブ ブ ラ something_else");
    static const struct RFstring chars2 = RF_STRING_STATIC_INIT(" ブラ");
    static const struct RFstring s3 = RF_STRING_STATIC_INIT(
        " \n  \n \t foo");
    static const struct RFstring chars3 = RF_STRING_STATIC_INIT(" \t\n");
    static const struct RFstring s4 = RF_STRING_STATIC_INIT(
        "not skipping \t \n \n");


    ck_assert(rf_stringx_init_buff(&s, 1024, ""));
    ck_assert(rf_stringx_assign(&s, &s1));

    ck_assert_int_eq(6, rf_stringx_skip_chars(&s, &chars1, 0, &bytes, 0));
    ck_assert_int_eq(6, bytes);
    ck_assert_rf_str_eq_cstr(&s, "something");

    ck_assert(rf_stringx_assign(&s, &s2));
    ck_assert_int_eq(7, rf_stringx_skip_chars(&s, &chars2, 0, &bytes, 0));
    ck_assert_int_eq(13, bytes);
    ck_assert_rf_str_eq_cstr(&s, "something_else");

    ck_assert(rf_stringx_assign(&s, &s3));
    ck_assert_int_eq(8, rf_stringx_skip_chars(&s, &chars3, 0,
                                              &bytes, &line_count));
    ck_assert_int_eq(8, bytes);
    ck_assert_int_eq(2, line_count);
    ck_assert_rf_str_eq_cstr(&s, "foo");

    ck_assert(rf_stringx_assign(&s, &s3));
    ck_assert_int_eq(3, rf_stringx_skip_chars(&s, &chars3,
                                              rf_string_data(&s) + 2,
                                              &bytes, &line_count));
    ck_assert_int_eq(3, bytes);
    ck_assert_int_eq(1, line_count);
    ck_assert_rf_str_eq_cstr(&s," \n \t foo");

    ck_assert(rf_stringx_assign(&s, &s3));
    ck_assert_int_eq(1, rf_stringx_skip_chars(&s, &chars3,
                                              rf_string_data(&s),
                                              &bytes, &line_count));
    ck_assert_int_eq(1, bytes);
    ck_assert_int_eq(0, line_count);
    ck_assert_rf_str_eq_cstr(&s,"\n  \n \t foo");

    ck_assert(rf_stringx_assign(&s, &s4));
    ck_assert_int_eq(0, rf_stringx_skip_chars(&s, &chars3,
                                              0, &bytes, &line_count));
    ck_assert_int_eq(0, bytes);
    ck_assert_int_eq(0, line_count);

    rf_stringx_deinit(&s);
}END_TEST
Пример #23
0
}END_TEST

START_TEST(test_stringx_move_afterv) {
    unsigned int saved_index;
    struct RFstringx s;
    struct RFstringx str_buff;
    struct RFstring dependent_s;
    static const struct RFstring sub1 = RF_STRING_STATIC_INIT(",");
    static const struct RFstring sub2 = RF_STRING_STATIC_INIT("39");
    ck_assert(rf_stringx_init_buff(&str_buff, 1024, ""));
    ck_assert(
        rf_stringx_init(
            &s,
            "Με την κεντρική εκδήλωση, μετά τις 2 το "
            "μεσημέρι, και την "
            "πορεία προς την αμερικανική πρεσβεία, "
            "περίπου μία ώρα "
            "αργότερα, κορυφώνονται το Σάββατο οι "
            "εκδηλώσεις για την "
            "39η επέτειο από την Εξέγερση του "
            "Πολυτεχνείου. Λόγω των "
            "εκδηλώσεων, θα ισχύσουν έκτακτες "
            "κυκλοφοριακές ρυθμίσεις "
            "έως και το πρωί της Κυριακής."
        )
    );

    rf_stringx_move_forward(&s, 96);
    ck_assert_rf_str_eq_cstr(
        &s,
        "περίπου μία ώρα αργότερα, κορυφώνονται το "
        "Σάββατο οι "
        "εκδηλώσεις για την 39η επέτειο από την Εξέγερση "
        "του Πολυτεχνείου. Λόγω των εκδηλώσεων, θα "
        "ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και το πρωί "
        "της Κυριακής."
    );
    rf_stringx_move_back(&s, 46);
    ck_assert_rf_str_eq_cstr(
        &s,
        "και την πορεία προς την αμερικανική πρεσβεία, "
        "περίπου"
        " μία ώρα αργότερα, κορυφώνονται το Σάββατο οι "
        "εκδηλώσεις για την 39η επέτειο από την Εξέγερση "
        "του Πολυτεχνείου. Λόγω των εκδηλώσεων, θα "
        "ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και "
        "το πρωί "
        "της Κυριακής."
    );
    saved_index = s.bIndex;
    ck_assert(rf_stringx_move_afterv(&s, &str_buff, 0, 2, &sub1, &sub2));

    ck_assert_rf_str_eq_cstr(
        &s,
        " περίπου μία ώρα αργότερα, κορυφώνονται "
        "το Σάββατο οι"
        " εκδηλώσεις για την 39η επέτειο από "
        "την Εξέγερση του "
        "Πολυτεχνείου. Λόγω των εκδηλώσεων, θα ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και "
        "το πρωί της Κυριακής."
    );
    ck_assert_rf_str_eq_cstr(
        &str_buff,
        "και την πορεία προς την αμερικανική πρεσβεία"
    );

    /* dependent string */
    rf_stringx_move_to_index(&s, saved_index);
    ck_assert(rf_stringx_move_afterv(&s, &dependent_s,
                                     RF_STRING_DEPENDENT, 2, &sub1, &sub2));

    ck_assert_rf_str_eq_cstr(
        &s,
        " περίπου μία ώρα αργότερα, κορυφώνονται "
        "το Σάββατο οι"
        " εκδηλώσεις για την 39η επέτειο από "
        "την Εξέγερση του "
        "Πολυτεχνείου. Λόγω των εκδηλώσεων, θα ισχύσουν "
        "έκτακτες κυκλοφοριακές ρυθμίσεις έως και "
        "το πρωί της Κυριακής."
    );
    ck_assert_rf_str_eq_cstr(
        &dependent_s,
        "και την πορεία προς την αμερικανική πρεσβεία"
    );

    rf_stringx_deinit(&s);
    rf_stringx_deinit(&str_buff);
}END_TEST