summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorreduz <reduzio@gmail.com>2014-02-28 14:53:01 -0200
committerreduz <reduzio@gmail.com>2014-02-28 14:53:01 -0200
commit219818075f0fd1cc052f104f7617bd1701620553 (patch)
treec5913da92cbdcd3a8394cb165a5ef3b0d622aca8
parentb657d2df901fc88aa232962ff3281ece14a72abe (diff)
parent61789718733ea30c6b6844b1804920289dda3919 (diff)
Merge pull request #147 from vinzenz/string-improvements
begins_with string version fix
-rw-r--r--bin/tests/test_string.cpp31
-rw-r--r--core/ustring.cpp8
2 files changed, 36 insertions, 3 deletions
diff --git a/bin/tests/test_string.cpp b/bin/tests/test_string.cpp
index 78fb9a9ddb..66238b066d 100644
--- a/bin/tests/test_string.cpp
+++ b/bin/tests/test_string.cpp
@@ -479,6 +479,36 @@ bool test_26() {
return captures.size();
};
+struct test_27_data {
+ char const * data;
+ char const * begin;
+ bool expected;
+};
+
+bool test_27() {
+
+ OS::get_singleton()->print("\n\nTest 26: begins_with\n");
+ test_27_data tc[] = {
+ {"res://foobar", "res://", true},
+ {"res", "res://", false},
+ {"abc", "abc", true}
+ };
+ size_t count = sizeof(tc) / sizeof(tc[0]);
+ bool state = true;
+ for (size_t i = 0;state && i < count; ++i) {
+ String s = tc[i].data;
+ state = s.begins_with(tc[i].begin) == tc[i].expected;
+ if (state) {
+ String sb = tc[i].begin;
+ state = s.begins_with(sb) == tc[i].expected;
+ }
+ if (!state) {
+ OS::get_singleton()->print("\n\t Failure on:\n\t\tstring: ", tc[i].data, "\n\t\tbegin: ", tc[i].begin, "\n\t\texpected: ", tc[i].expected ? "true" : "false", "\n");
+ }
+ };
+ return state;
+};
+
typedef bool (*TestFunc)(void);
TestFunc test_funcs[] = {
@@ -509,6 +539,7 @@ TestFunc test_funcs[] = {
test_24,
test_25,
test_26,
+ test_27,
0
};
diff --git a/core/ustring.cpp b/core/ustring.cpp
index b0f06c6ab6..2384ce5bd6 100644
--- a/core/ustring.cpp
+++ b/core/ustring.cpp
@@ -2491,19 +2491,21 @@ bool String::begins_with(const String& p_string) const {
const CharType *src=&p_string[0];
const CharType *str=&operator[](0);
- for (int i=0;i<l;i++) {
+ int i = 0;
+ for (;i<l;i++) {
if (src[i]!=str[i])
return false;
}
- return true;
+ // only if i == l the p_string matches the beginning
+ return i == l;
}
bool String::begins_with(const char* p_string) const {
int l=length();
- if (l==0)
+ if (l==0||!p_string)
return false;
const CharType *str=&operator[](0);