Beispiel #1
0
static void
test_To_I64(TestBatchRunner *runner) {
    String *string;

    string = S_get_str("10");
    TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64");
    DECREF(string);

    string = S_get_str("-10");
    TEST_TRUE(runner, Str_To_I64(string) == -10, "To_I64 negative");
    DECREF(string);

    string = S_get_str("10.");
    TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64 stops at non-digits");
    DECREF(string);

    string = S_get_str("10A");
    TEST_TRUE(runner, Str_To_I64(string) == 10,
              "To_I64 stops at out-of-range digits");
    DECREF(string);

    string = S_get_str("-JJ");
    TEST_TRUE(runner, Str_BaseX_To_I64(string, 20) == -399,
              "BaseX_To_I64 base 20");
    DECREF(string);
}
Beispiel #2
0
static void
test_Cat(TestBatchRunner *runner) {
    String *wanted = Str_newf("a%s", smiley);
    String *source;
    String *got;

    source = S_get_str("");
    got = Str_Cat(source, wanted);
    TEST_TRUE(runner, Str_Equals(wanted, (Obj*)got), "Cat");
    DECREF(got);
    DECREF(source);

    source = S_get_str("a");
    got = Str_Cat_Utf8(source, smiley, smiley_len);
    TEST_TRUE(runner, Str_Equals(wanted, (Obj*)got), "Cat_Utf8");
    DECREF(got);
    DECREF(source);

    source = S_get_str("a");
    got = Str_Cat_Trusted_Utf8(source, smiley, smiley_len);
    TEST_TRUE(runner, Str_Equals(wanted, (Obj*)got), "Cat_Trusted_Utf8");
    DECREF(got);
    DECREF(source);

    DECREF(wanted);
}
Beispiel #3
0
static void
test_To_F64(TestBatchRunner *runner) {
    String *string;

    string = S_get_str("1.5");
    double difference = 1.5 - Str_To_F64(string);
    if (difference < 0) { difference = 0 - difference; }
    TEST_TRUE(runner, difference < 0.001, "To_F64");
    DECREF(string);

    string = S_get_str("-1.5");
    difference = 1.5 + Str_To_F64(string);
    if (difference < 0) { difference = 0 - difference; }
    TEST_TRUE(runner, difference < 0.001, "To_F64 negative");
    DECREF(string);

    // TODO: Enable this test when we have real substrings.
    /*string = S_get_str("1.59");
    double value_full = Str_To_F64(string);
    Str_Set_Size(string, 3);
    double value_short = Str_To_F64(string);
    TEST_TRUE(runner, value_short < value_full,
              "TO_F64 doesn't run past end of string");
    DECREF(string);*/
}
Beispiel #4
0
static void
test_Contains_and_Find(TestBatchRunner *runner) {
    String *string;
    String *substring = S_get_str("foo");

    string = S_get_str("");
    TEST_FALSE(runner, Str_Contains(string, substring),
               "Not contained in empty string");
    TEST_INT_EQ(runner, S_find(string, substring), -1,
                "Not found in empty string");
    DECREF(string);

    string = S_get_str("foo");
    TEST_TRUE(runner, Str_Contains(string, substring),
              "Contained in complete string");
    TEST_INT_EQ(runner, S_find(string, substring), 0, "Find complete string");
    DECREF(string);

    string = S_get_str("afoo");
    TEST_TRUE(runner, Str_Contains(string, substring),
              "Contained after first");
    TEST_INT_EQ(runner, S_find(string, substring), 1, "Find after first");
    String *prefix = Str_SubString(string, 0, 3);
    TEST_FALSE(runner, Str_Contains(prefix, substring), "Don't overrun");
    DECREF(prefix);
    DECREF(string);

    string = S_get_str("afood");
    TEST_TRUE(runner, Str_Contains(string, substring), "Contained in middle");
    TEST_INT_EQ(runner, S_find(string, substring), 1, "Find in middle");
    DECREF(string);

    DECREF(substring);
}
Beispiel #5
0
static void
test_Trim(TestBatchRunner *runner) {
    String *ws_smiley = S_smiley_with_whitespace(NULL);
    String *ws_foo    = S_get_str("  foo  ");
    String *ws_only   = S_get_str("  \t  \r\n");
    String *trimmed   = S_get_str("a     b");
    String *got;

    got = Str_Trim(ws_smiley);
    TEST_TRUE(runner, Str_Equals_Utf8(got, smiley, smiley_len), "Trim");
    DECREF(got);

    got = Str_Trim_Top(ws_foo);
    TEST_TRUE(runner, Str_Equals_Utf8(got, "foo  ", 5), "Trim_Top");
    DECREF(got);

    got = Str_Trim_Tail(ws_foo);
    TEST_TRUE(runner, Str_Equals_Utf8(got, "  foo", 5), "Trim_Tail");
    DECREF(got);

    got = Str_Trim(ws_only);
    TEST_TRUE(runner, Str_Equals_Utf8(got, "", 0), "Trim with only whitespace");
    DECREF(got);

    got = Str_Trim_Top(ws_only);
    TEST_TRUE(runner, Str_Equals_Utf8(got, "", 0),
              "Trim_Top with only whitespace");
    DECREF(got);

    got = Str_Trim_Tail(ws_only);
    TEST_TRUE(runner, Str_Equals_Utf8(got, "", 0),
              "Trim_Tail with only whitespace");
    DECREF(got);

    got = Str_Trim(trimmed);
    TEST_TRUE(runner, Str_Equals(got, (Obj*)trimmed),
              "Trim doesn't change trimmed string");
    DECREF(got);

    got = Str_Trim_Top(trimmed);
    TEST_TRUE(runner, Str_Equals(got, (Obj*)trimmed),
              "Trim_Top doesn't change trimmed string");
    DECREF(got);

    got = Str_Trim_Tail(trimmed);
    TEST_TRUE(runner, Str_Equals(got, (Obj*)trimmed),
              "Trim_Tail doesn't change trimmed string");
    DECREF(got);

    DECREF(trimmed);
    DECREF(ws_only);
    DECREF(ws_foo);
    DECREF(ws_smiley);
}
Beispiel #6
0
static void
test_vcatf_str(TestBatchRunner *runner) {
    String  *wanted = S_get_str("foo bar ZEKE baz");
    String  *catworthy = S_get_str("ZEKE");
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %o baz", catworthy);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%o CharBuf");
    DECREF(catworthy);
    DECREF(wanted);
    DECREF(got);
}
Beispiel #7
0
static void
test_Mimic_and_Clone(TestBatchRunner *runner) {
    String  *wanted    = S_get_str("foo");
    CharBuf *wanted_cb = S_get_cb("foo");
    CharBuf *got       = S_get_cb("bar");

    CB_Mimic(got, (Obj*)wanted);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "Mimic String");
    DECREF(got);

    got = S_get_cb("bar");
    CB_Mimic(got, (Obj*)wanted_cb);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "Mimic CharBuf");
    DECREF(got);

    got = S_get_cb("bar");
    CB_Mimic_Utf8(got, "foo", 3);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "Mimic_Utf8");
    DECREF(got);

    got = CB_Clone(wanted_cb);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "Clone");
    DECREF(got);

    DECREF(wanted);
    DECREF(wanted_cb);
}
Beispiel #8
0
static void
test_Clone(TestBatchRunner *runner) {
    String *wanted = S_get_str("foo");
    String *got    = Str_Clone(wanted);
    TEST_TRUE(runner, Str_Equals(wanted, (Obj*)got), "Clone");
    DECREF(got);
    DECREF(wanted);
}
Beispiel #9
0
static void
test_vcatf_null_obj(TestBatchRunner *runner) {
    String  *wanted = S_get_str("foo bar [NULL] baz");
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %o baz", NULL);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%o NULL");
    DECREF(wanted);
    DECREF(got);
}
Beispiel #10
0
static void
test_vcatf_s(TestBatchRunner *runner) {
    String  *wanted = S_get_str("foo bar bizzle baz");
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %s baz", "bizzle");
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%s");
    DECREF(wanted);
    DECREF(got);
}
Beispiel #11
0
static void
test_Starts_Ends_With(TestBatchRunner *runner) {
    String *prefix = S_get_str("pre" SMILEY "fix_");
    String *suffix = S_get_str("_post" SMILEY "fix");
    String *empty  = S_get_str("");

    TEST_TRUE(runner, Str_Starts_With(suffix, suffix),
              "Starts_With self returns true");
    TEST_TRUE(runner, Str_Starts_With(prefix, prefix),
              "Ends_With self returns true");

    TEST_TRUE(runner, Str_Starts_With(suffix, empty),
              "Starts_With empty string returns true");
    TEST_TRUE(runner, Str_Ends_With(prefix, empty),
              "Ends_With empty string returns true");
    TEST_FALSE(runner, Str_Starts_With(empty, suffix),
              "Empty string Starts_With returns false");
    TEST_FALSE(runner, Str_Ends_With(empty, prefix),
              "Empty string Ends_With returns false");

    {
        String *string
            = S_get_str("pre" SMILEY "fix_string_post" SMILEY "fix");
        TEST_TRUE(runner, Str_Starts_With(string, prefix),
                  "Starts_With returns true");
        TEST_TRUE(runner, Str_Ends_With(string, suffix),
                  "Ends_With returns true");
        DECREF(string);
    }

    {
        String *string
            = S_get_str("pre" SMILEY "fix:string:post" SMILEY "fix");
        TEST_FALSE(runner, Str_Starts_With(string, prefix),
                   "Starts_With returns false");
        TEST_FALSE(runner, Str_Ends_With(string, suffix),
                   "Ends_With returns false");
        DECREF(string);
    }

    DECREF(prefix);
    DECREF(suffix);
    DECREF(empty);
}
Beispiel #12
0
static void
test_vcatf_u64(TestBatchRunner *runner) {
    String *wanted = S_get_str("foo bar 5000000000 baz");
    uint64_t num = UINT64_C(5000000000);
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %u64 baz", num);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%u64");
    DECREF(wanted);
    DECREF(got);
}
Beispiel #13
0
static void
test_vcatf_u32(TestBatchRunner *runner) {
    String *wanted = S_get_str("foo bar 100000 baz");
    uint32_t num = 100000;
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %u32 baz", num);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%u32");
    DECREF(wanted);
    DECREF(got);
}
Beispiel #14
0
static void
test_vcatf_i8(TestBatchRunner *runner) {
    String *wanted = S_get_str("foo bar -3 baz");
    int8_t num = -3;
    CharBuf *got = S_get_cb("foo ");
    CB_catf(got, "bar %i8 baz", num);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%i8");
    DECREF(wanted);
    DECREF(got);
}
Beispiel #15
0
static void
test_vcatf_obj(TestBatchRunner *runner) {
    String    *wanted = S_get_str("ooga 20 booga");
    Integer32 *i32 = Int32_new(20);
    CharBuf   *got = S_get_cb("ooga");
    CB_catf(got, " %o booga", i32);
    TEST_TRUE(runner, S_cb_equals(got, wanted), "%%o Obj");
    DECREF(i32);
    DECREF(wanted);
    DECREF(got);
}
Beispiel #16
0
static void
test_Get_Ptr8(TestBatchRunner *runner) {
    String *string = S_get_str("Banana");

    const char *ptr8 = Str_Get_Ptr8(string);
    TEST_TRUE(runner, strcmp(ptr8, "Banana") == 0, "Get_Ptr8");

    size_t size = Str_Get_Size(string);
    TEST_INT_EQ(runner, size, 6, "Get_Size");

    DECREF(string);
}