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); }
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); }
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);*/ }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }