summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/test/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/test/string.cpp')
-rw-r--r--ml/dlib/dlib/test/string.cpp329
1 files changed, 329 insertions, 0 deletions
diff --git a/ml/dlib/dlib/test/string.cpp b/ml/dlib/dlib/test/string.cpp
new file mode 100644
index 000000000..18f9035c5
--- /dev/null
+++ b/ml/dlib/dlib/test/string.cpp
@@ -0,0 +1,329 @@
+// Copyright (C) 2007 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+
+
+#include <sstream>
+#include <string>
+#include <cstdlib>
+#include <ctime>
+#include <dlib/string.h>
+
+#include "tester.h"
+
+namespace
+{
+ using namespace test;
+ using namespace dlib;
+ using namespace std;
+
+ logger dlog("test.string");
+
+
+ void string_test (
+ )
+ /*!
+ ensures
+ - runs tests on string functions for compliance with the specs
+ !*/
+ {
+
+ print_spinner();
+
+ string a = " davis ";
+ string A = " DAVIS ";
+ string empty = " ";
+
+ dlog << LTRACE << 1;
+
+ double dval;
+ int ival;
+ bool bval;
+
+ DLIB_TEST_MSG(string_cast<int>("5") == 5,string_cast<int>("5"));
+ DLIB_TEST_MSG(string_cast<int>("0x5") == 5,string_cast<int>("0x5"));
+ DLIB_TEST_MSG(string_cast<int>("0xA") == 10,string_cast<int>("0xA"));
+ DLIB_TEST(string_cast<float>("0.5") == 0.5);
+ DLIB_TEST((dval = sa ="0.5") == 0.5);
+ DLIB_TEST(string_cast<std::string>("0.5 !") == "0.5 !");
+ DLIB_TEST(string_cast<bool>("true") == true);
+ DLIB_TEST((bval = sa = "true") == true);
+ DLIB_TEST(string_cast<bool>("false") == false);
+ DLIB_TEST(string_cast<bool>("TRUE") == true);
+ DLIB_TEST(string_cast<bool>("FALSE") == false);
+ DLIB_TEST((bval = sa = "FALSE") == false);
+
+ dlog << LTRACE << 2;
+
+ DLIB_TEST_MSG(string_cast<int>(L"5") == 5,string_cast<int>("5"));
+ DLIB_TEST_MSG((ival = sa = L"5") == 5,string_cast<int>("5"));
+ dlog << LTRACE << 2.1;
+ DLIB_TEST_MSG(string_cast<int>(L"0x5") == 5,string_cast<int>("0x5"));
+ DLIB_TEST_MSG(string_cast<int>(L"0xA") == 10,string_cast<int>("0xA"));
+ DLIB_TEST(string_cast<float>(L"0.5") == 0.5);
+ DLIB_TEST(string_cast<std::string>(L"0.5 !") == "0.5 !");
+ DLIB_TEST(string_cast<bool>(L"true") == true);
+ DLIB_TEST(string_cast<bool>(L"false") == false);
+ DLIB_TEST(string_cast<bool>(L"TRUE") == true);
+ DLIB_TEST((bval = sa = L"TRUE") == true);
+ DLIB_TEST(string_cast<bool>(L"FALSE") == false);
+
+ dlog << LTRACE << 3;
+
+ DLIB_TEST(cast_to_string(5) == "5");
+ DLIB_TEST(cast_to_string(5.5) == "5.5");
+
+ dlog << LTRACE << 4;
+ DLIB_TEST(cast_to_wstring(5) == L"5");
+ DLIB_TEST(cast_to_wstring(5.5) == L"5.5");
+ dlog << LTRACE << 5;
+ DLIB_TEST(toupper(a) == A);
+ DLIB_TEST(toupper(A) == A);
+ DLIB_TEST(tolower(a) == a);
+ DLIB_TEST(tolower(A) == a);
+ DLIB_TEST(trim(a) == "davis");
+ DLIB_TEST(ltrim(a) == "davis ");
+ DLIB_TEST(rtrim(a) == " davis");
+ DLIB_TEST(trim(string_cast<wstring>(a)) == L"davis");
+ DLIB_TEST(ltrim(string_cast<wstring>(a)) == L"davis ");
+ DLIB_TEST(rtrim(string_cast<wstring>(a)) == L" davis");
+ DLIB_TEST(trim(a, " ") == "davis");
+ DLIB_TEST(ltrim(a, " ") == "davis ");
+ DLIB_TEST(rtrim(a, " ") == " davis");
+ DLIB_TEST(trim(empty) == "");
+ DLIB_TEST(ltrim(empty) == "");
+ DLIB_TEST(rtrim(empty) == "");
+ DLIB_TEST(trim(string_cast<wstring>(empty)) == L"");
+ DLIB_TEST(ltrim(string_cast<wstring>(empty)) == L"");
+ DLIB_TEST(rtrim(string_cast<wstring>(empty)) == L"");
+ DLIB_TEST(trim(empty, " ") == "");
+ DLIB_TEST(ltrim(empty, " ") == "");
+ DLIB_TEST(rtrim(empty, " ") == "");
+
+
+ dlog << LTRACE << 6;
+ DLIB_TEST( (lpad(wstring(L"davis"), 10) == L" davis"));
+ DLIB_TEST( (rpad(wstring(L"davis"), 10) == L"davis "));
+ DLIB_TEST( (pad(wstring(L"davis"), 10) == L" davis "));
+
+ DLIB_TEST( (lpad(string("davis"), -10) == "davis"));
+ DLIB_TEST( (rpad(string("davis"), -10) == "davis"));
+ DLIB_TEST( (pad(string("davis"), -10) == "davis"));
+ DLIB_TEST( (lpad(string("davis"), 10) == " davis"));
+ DLIB_TEST( (rpad(string("davis"), 10) == "davis "));
+ DLIB_TEST( (pad(string("davis"), 10) == " davis "));
+ DLIB_TEST( (lpad(string("davis"), 10, string("*")) == "*****davis"));
+ DLIB_TEST( (rpad(string("davis"), 10, string("*")) == "davis*****"));
+ DLIB_TEST( (pad(string("davis"), 10, string("*")) == "**davis***"));
+ DLIB_TEST( (lpad(string("davis"), 10, string("_-")) == "_-_-_davis"));
+ DLIB_TEST( (rpad(string("davis"), 10, string("_-")) == "davis_-_-_"));
+ DLIB_TEST( (pad(string("davis"), 10, string("_-")) == "_-davis_-_"));
+ DLIB_TEST( (lpad(string("davis"), 10, string("willy wanka")) == "willydavis"));
+ DLIB_TEST( (rpad(string("davis"), 10, string("willy wanka")) == "daviswilly"));
+ DLIB_TEST( (pad(string("davis"), 10, string("willy wanka")) == "widaviswil"));
+ DLIB_TEST( (lpad(string("davis"), 10, "*")) == "*****davis");
+ DLIB_TEST( (rpad(string("davis"), 10, "*") == "davis*****"));
+ DLIB_TEST( (pad(string("davis"), 10, "*") == "**davis***"));
+ DLIB_TEST( (lpad(string("davis"), 10, "_-") == "_-_-_davis"));
+ DLIB_TEST( (rpad(string("davis"), 10, "_-") == "davis_-_-_"));
+ DLIB_TEST( (pad(string("davis"), 10, "_-") == "_-davis_-_"));
+ DLIB_TEST( (lpad(string("davis"), 10, "willy wanka") == "willydavis"));
+ DLIB_TEST( (rpad(string("davis"), 10, "willy wanka") == "daviswilly"));
+ DLIB_TEST( (pad(string("davis"), 10, "willy wanka") == "widaviswil"));
+ dlog << LTRACE << 7;
+
+ a = "file.txt";
+ DLIB_TEST( (left_substr(a,string(".")) == "file"));
+ DLIB_TEST( (left_substr(a,".") == "file"));
+ DLIB_TEST( (right_substr(a,string(".")) == "txt"));
+ DLIB_TEST( (right_substr(a,".") == "txt"));
+
+ DLIB_TEST( (left_substr(a," ") == "file.txt"));
+ DLIB_TEST( (right_substr(a," ") == ""));
+
+ DLIB_TEST( (left_substr(a,"") == "file.txt"));
+ DLIB_TEST( (right_substr(a,"") == ""));
+
+ wstring ws = L"file.txt";
+ DLIB_TEST( (left_substr(ws,wstring(L".")) == L"file"));
+ DLIB_TEST_MSG( (left_substr(ws,L".") == L"file"), L"");
+ DLIB_TEST( (right_substr(ws,wstring(L".")) == L"txt"));
+ DLIB_TEST_MSG( (right_substr(ws,L".") == L"txt"), L"");
+
+
+ dlog << LTRACE << 8;
+ {
+ ostringstream sout;
+ wchar_t w = 85;
+ char c = 4;
+ serialize(w,sout);
+ serialize(c,sout);
+ w = static_cast<wchar_t>(-1);
+ serialize(w,sout);
+ c = static_cast<char>(-1);
+ serialize(c,sout);
+
+ istringstream sin(sout.str());
+ w = 0;
+ c = 0;
+ deserialize(w,sin);
+ deserialize(c,sin);
+ DLIB_TEST(w == 85);
+ DLIB_TEST(c == 4);
+ deserialize(w,sin);
+ deserialize(c,sin);
+ DLIB_TEST(w == static_cast<wchar_t>(-1));
+ DLIB_TEST(c == static_cast<char>(-1));
+
+ wstring str = L"test string";
+
+ sout.str("");
+ serialize(str, sout);
+ sin.clear();
+ sin.str(sout.str());
+ str = L"something else";
+ deserialize(str,sin);
+ DLIB_TEST(str == L"test string");
+ }
+ }
+
+
+ void test_split()
+ {
+ std::vector<string> v;
+
+ string str;
+ string delim = " , ";
+
+ v = split(string("one, two,three four")," ,");
+ DLIB_TEST(v.size() == 4);
+ DLIB_TEST(v[0] == "one");
+ DLIB_TEST(v[1] == "two");
+ DLIB_TEST(v[2] == "three");
+ DLIB_TEST(v[3] == "four");
+
+ v = split(string("one, two,three four"),delim);
+ DLIB_TEST(v.size() == 4);
+ DLIB_TEST(v[0] == "one");
+ DLIB_TEST(v[1] == "two");
+ DLIB_TEST(v[2] == "three");
+ DLIB_TEST(v[3] == "four");
+
+ v = split(string(""));
+ DLIB_TEST(v.size() == 0);
+
+ v = split(string(" "));
+ DLIB_TEST(v.size() == 0);
+
+ v = split(string(" one two "));
+ DLIB_TEST(v.size() == 2);
+ DLIB_TEST(v[0] == "one");
+ DLIB_TEST(v[1] == "two");
+
+ v = split(string(" one "));
+ DLIB_TEST(v.size() == 1);
+ DLIB_TEST(v[0] == "one");
+
+ v = split(string("one"));
+ DLIB_TEST(v.size() == 1);
+ DLIB_TEST(v[0] == "one");
+
+ v = split(string("o"));
+ DLIB_TEST(v.size() == 1);
+ DLIB_TEST(v[0] == "o");
+
+
+ std::vector<wstring> wv;
+ wstring wstr = L"test string";
+ wv = split(wstr);
+ DLIB_TEST(wv.size() == 2);
+ DLIB_TEST(wv[0] == L"test");
+ DLIB_TEST(wv[1] == L"string");
+ wv = split(wstr,L" ");
+ DLIB_TEST(wv.size() == 2);
+ DLIB_TEST(wv[0] == L"test");
+ DLIB_TEST(wv[1] == L"string");
+
+ wstr = L"Über alle Maßen\u00A0Öttingenstraße";
+ wv = split(wstr, L" \u00A0\n\r\t");
+ DLIB_TEST(wv.size() == 4);
+ DLIB_TEST(wv[0] == L"Über");
+ DLIB_TEST(wv[1] == L"alle");
+ DLIB_TEST(wv[2] == L"Maßen");
+ DLIB_TEST(wv[3] == L"Öttingenstraße");
+
+ wstr = L"test string hah";
+ DLIB_TEST(split_on_first(wstr).first == L"test");
+ DLIB_TEST(split_on_first(wstr).second == L"string hah");
+ DLIB_TEST(split_on_first(wstr,L"#").first == L"test string hah");
+ DLIB_TEST(split_on_first(wstr,L"#").second == L"");
+ DLIB_TEST(split_on_last(wstr).first == L"test string");
+ DLIB_TEST(split_on_last(wstr).second == L"hah");
+ DLIB_TEST(split_on_last(wstr,L"#").first == L"test string hah");
+ DLIB_TEST(split_on_last(wstr,L"#").second == L"");
+ wstr = L"";
+ DLIB_TEST(split_on_first(wstr).first == L"");
+ DLIB_TEST(split_on_first(wstr).second == L"");
+
+ str = "test string hah";
+ DLIB_TEST(split_on_first(str).first == "test");
+ DLIB_TEST(split_on_first(str).second == "string hah");
+ DLIB_TEST(split_on_first(str,"#").first == "test string hah");
+ DLIB_TEST(split_on_first(str,"#").second == "");
+ DLIB_TEST(split_on_last(str).first == "test string");
+ DLIB_TEST(split_on_last(str).second == "hah");
+ DLIB_TEST(split_on_last(str,"#").first == "test string hah");
+ DLIB_TEST(split_on_last(str,"#").second == "");
+ str = "";
+ DLIB_TEST(split_on_first(str).first == "");
+ DLIB_TEST(split_on_first(str).second == "");
+
+ wstr = L"test.string.hah";
+ DLIB_TEST(split_on_first(wstr,L".").first == L"test");
+ DLIB_TEST(split_on_first(wstr,L".").second == L"string.hah");
+ DLIB_TEST(split_on_first(wstr).first == L"test.string.hah");
+ DLIB_TEST(split_on_first(wstr).second == L"");
+ DLIB_TEST(split_on_last(wstr,L".").first == L"test.string");
+ DLIB_TEST(split_on_last(wstr,L".").second == L"hah");
+ DLIB_TEST(split_on_last(wstr).first == L"test.string.hah");
+ DLIB_TEST(split_on_last(wstr).second == L"");
+ wstr = L"";
+ DLIB_TEST(split_on_first(wstr).first == L"");
+ DLIB_TEST(split_on_first(wstr).second == L"");
+
+ str = "test.string.hah";
+ DLIB_TEST(split_on_first(str,".").first == "test");
+ DLIB_TEST(split_on_first(str,".").second == "string.hah");
+ DLIB_TEST(split_on_first(str).first == "test.string.hah");
+ DLIB_TEST(split_on_first(str).second == "");
+ DLIB_TEST(split_on_last(str,".").first == "test.string");
+ DLIB_TEST(split_on_last(str,".").second == "hah");
+ DLIB_TEST(split_on_last(str).first == "test.string.hah");
+ DLIB_TEST(split_on_last(str).second == "");
+ str = "";
+ DLIB_TEST(split_on_first(str).first == "");
+ DLIB_TEST(split_on_first(str).second == "");
+ }
+
+
+
+ class string_tester : public tester
+ {
+ public:
+ string_tester (
+ ) :
+ tester ("test_string",
+ "Runs tests on the string objects and functions.")
+ {}
+
+ void perform_test (
+ )
+ {
+ string_test();
+ test_split();
+ }
+ } a;
+
+}
+
+
+