Skip to content

Commit

Permalink
ICU-22954 DEBUG: icu4c-windows-cygwin-gcc ...
Browse files Browse the repository at this point in the history
  • Loading branch information
roubert committed Dec 23, 2024
1 parent 7546622 commit d2f6678
Showing 1 changed file with 84 additions and 0 deletions.
84 changes: 84 additions & 0 deletions icu4c/source/test/intltest/strtest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -730,107 +730,191 @@ StringTest::TestSTLCompatibility() {

void
StringTest::TestCharString() {
fputs("CHECKPOINT 1\n", stderr);
IcuTestErrorCode errorCode(*this, "TestCharString()");
fputs("CHECKPOINT 2\n", stderr);
char expected[400];
static const char longStr[] =
"This is a long string that is meant to cause reallocation of the internal buffer of CharString.";
fputs("CHECKPOINT 3\n", stderr);
CharString chStr(longStr, errorCode);
fputs("CHECKPOINT 4\n", stderr);
if (0 != strcmp(longStr, chStr.data()) || static_cast<int32_t>(strlen(longStr)) != chStr.length()) {
fputs("CHECKPOINT 5\n", stderr);
errln("CharString(longStr) failed.");
fputs("CHECKPOINT 6\n", stderr);
}
fputs("CHECKPOINT 7\n", stderr);
CharString test("Test", errorCode);
fputs("CHECKPOINT 8\n", stderr);
CharString copy(test,errorCode);
fputs("CHECKPOINT 9\n", stderr);
copy.copyFrom(chStr, errorCode);
fputs("CHECKPOINT 10\n", stderr);
if (0 != strcmp(longStr, copy.data()) || static_cast<int32_t>(strlen(longStr)) != copy.length()) {
fputs("CHECKPOINT 11\n", stderr);
errln("CharString.copyFrom() failed.");
fputs("CHECKPOINT 12\n", stderr);
}
fputs("CHECKPOINT 13\n", stderr);
StringPiece sp(chStr.toStringPiece());
fputs("CHECKPOINT 14\n", stderr);
sp.remove_prefix(4);
fputs("CHECKPOINT 15\n", stderr);
chStr.append(sp, errorCode).append(chStr, errorCode);
fputs("CHECKPOINT 16\n", stderr);
strcpy(expected, longStr);
fputs("CHECKPOINT 17\n", stderr);
strcat(expected, longStr+4);
fputs("CHECKPOINT 18\n", stderr);
strcat(expected, longStr);
fputs("CHECKPOINT 19\n", stderr);
strcat(expected, longStr+4);
fputs("CHECKPOINT 20\n", stderr);
if (0 != strcmp(expected, chStr.data()) || static_cast<int32_t>(strlen(expected)) != chStr.length()) {
fputs("CHECKPOINT 21\n", stderr);
errln("CharString(longStr).append(substring of self).append(self) failed.");
fputs("CHECKPOINT 22\n", stderr);
}
fputs("CHECKPOINT 23\n", stderr);
chStr.clear().append("abc", errorCode).append("defghij", 3, errorCode);
fputs("CHECKPOINT 24\n", stderr);
if (0 != strcmp("abcdef", chStr.data()) || 6 != chStr.length()) {
fputs("CHECKPOINT 25\n", stderr);
errln("CharString.clear().append(abc).append(defghij, 3) failed.");
fputs("CHECKPOINT 26\n", stderr);
}
fputs("CHECKPOINT 27\n", stderr);
chStr.appendInvariantChars(UNICODE_STRING_SIMPLE(
"This is a long string that is meant to cause reallocation of the internal buffer of CharString."),
errorCode);
fputs("CHECKPOINT 28\n", stderr);
strcpy(expected, "abcdef");
fputs("CHECKPOINT 29\n", stderr);
strcat(expected, longStr);
fputs("CHECKPOINT 30\n", stderr);
if (0 != strcmp(expected, chStr.data()) || static_cast<int32_t>(strlen(expected)) != chStr.length()) {
fputs("CHECKPOINT 31\n", stderr);
errln("CharString.appendInvariantChars(longStr) failed.");
fputs("CHECKPOINT 32\n", stderr);
}
fputs("CHECKPOINT 33\n", stderr);
int32_t appendCapacity = 0;
fputs("CHECKPOINT 34\n", stderr);
char *buffer = chStr.getAppendBuffer(5, 10, appendCapacity, errorCode);
fputs("CHECKPOINT 35\n", stderr);
if (errorCode.isFailure()) {
fputs("CHECKPOINT 36\n", stderr);
return;
}
fputs("CHECKPOINT 37\n", stderr);
memcpy(buffer, "*****", 5);
fputs("CHECKPOINT 38\n", stderr);
chStr.append(buffer, 5, errorCode);
fputs("CHECKPOINT 39\n", stderr);
chStr.truncate(chStr.length()-3);
fputs("CHECKPOINT 40\n", stderr);
strcat(expected, "**");
fputs("CHECKPOINT 41\n", stderr);
if (0 != strcmp(expected, chStr.data()) || static_cast<int32_t>(strlen(expected)) != chStr.length()) {
fputs("CHECKPOINT 42\n", stderr);
errln("CharString.getAppendBuffer().append(**) failed.");
fputs("CHECKPOINT 43\n", stderr);
}
fputs("CHECKPOINT 44\n", stderr);

UErrorCode ec = U_ZERO_ERROR;
fputs("CHECKPOINT 45\n", stderr);
chStr.clear();
fputs("CHECKPOINT 46\n", stderr);
chStr.appendInvariantChars(UnicodeString("The '@' character is not invariant."), ec);
fputs("CHECKPOINT 47\n", stderr);
if (ec != U_INVARIANT_CONVERSION_ERROR) {
fputs("CHECKPOINT 48\n", stderr);
errln("%s:%d expected U_INVARIANT_CONVERSION_ERROR, got %s", __FILE__, __LINE__, u_errorName(ec));
fputs("CHECKPOINT 49\n", stderr);
}
fputs("CHECKPOINT 50\n", stderr);
if (chStr.length() != 0) {
fputs("CHECKPOINT 51\n", stderr);
errln("%s:%d expected length() = 0, got %d", __FILE__, __LINE__, chStr.length());
fputs("CHECKPOINT 52\n", stderr);
}
fputs("CHECKPOINT 53\n", stderr);

{
fputs("CHECKPOINT 54\n", stderr);
CharString s1("Short string", errorCode);
fputs("CHECKPOINT 55\n", stderr);
CharString s2(std::move(s1));
fputs("CHECKPOINT 56\n", stderr);
assertEquals("s2 should have content of s1", "Short string", s2.data());
fputs("CHECKPOINT 57\n", stderr);
CharString s3("Dummy", errorCode);
fputs("CHECKPOINT 58\n", stderr);
s3 = std::move(s2);
fputs("CHECKPOINT 59\n", stderr);
assertEquals("s3 should have content of s2", "Short string", s3.data());
fputs("CHECKPOINT 60\n", stderr);
}
fputs("CHECKPOINT 61\n", stderr);

{
fputs("CHECKPOINT 62\n", stderr);
CharString s1("Long string over 40 characters to trigger heap allocation", errorCode);
fputs("CHECKPOINT 63\n", stderr);
CharString s2(std::move(s1));
fputs("CHECKPOINT 64\n", stderr);
assertEquals("s2 should have content of s1",
"Long string over 40 characters to trigger heap allocation",
s2.data());
fputs("CHECKPOINT 65\n", stderr);
CharString s3("Dummy string with over 40 characters to trigger heap allocation", errorCode);
fputs("CHECKPOINT 66\n", stderr);
s3 = std::move(s2);
fputs("CHECKPOINT 67\n", stderr);
assertEquals("s3 should have content of s2",
"Long string over 40 characters to trigger heap allocation",
s3.data());
fputs("CHECKPOINT 68\n", stderr);
}
fputs("CHECKPOINT 69\n", stderr);

{
fputs("CHECKPOINT 70\n", stderr);
// extract()
errorCode.reset();
fputs("CHECKPOINT 71\n", stderr);
CharString s("abc", errorCode);
fputs("CHECKPOINT 72\n", stderr);
char buffer[10];
fputs("CHECKPOINT 73\n", stderr);

s.extract(buffer, 10, errorCode);
fputs("CHECKPOINT 74\n", stderr);
assertEquals("abc.extract(10) success", U_ZERO_ERROR, errorCode.get());
fputs("CHECKPOINT 75\n", stderr);
assertEquals("abc.extract(10) output", "abc", buffer);
fputs("CHECKPOINT 76\n", stderr);

strcpy(buffer, "012345");
fputs("CHECKPOINT 77\n", stderr);
s.extract(buffer, 3, errorCode);
fputs("CHECKPOINT 78\n", stderr);
assertEquals("abc.extract(3) not terminated",
U_STRING_NOT_TERMINATED_WARNING, errorCode.reset());
fputs("CHECKPOINT 79\n", stderr);
assertEquals("abc.extract(3) output", "abc345", buffer);
fputs("CHECKPOINT 80\n", stderr);

strcpy(buffer, "012345");
fputs("CHECKPOINT 81\n", stderr);
s.extract(buffer, 2, errorCode);
fputs("CHECKPOINT 82\n", stderr);
assertEquals("abc.extract(2) overflow", U_BUFFER_OVERFLOW_ERROR, errorCode.reset());
fputs("CHECKPOINT 83\n", stderr);
}
fputs("CHECKPOINT 84\n", stderr);
}

void
Expand Down

0 comments on commit d2f6678

Please sign in to comment.