123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- #include<__vic/string_utils.h>
- #include<cassert>
- #include<iostream>
- #include<exception>
- #include<cstring>
- #include<cctype>
- namespace tests {
- using namespace __vic;
- char last(const char *st)
- {
- assert(st && *st != '\0');
- return *(std::strchr(st, '\0') - 1);
- }
- char last(
- #if __cpp_lib_string_view
- std::string_view
- #else
- const std::string &
- #endif
- st)
- {
- assert(!st.empty());
- return *(st.end() - 1);
- }
- /*char last(const string_ref &st)
- {
- assert(!st.empty());
- return *(st.end() - 1);
- }*/
- bool not_in_set(char ch, const char *set)
- {
- assert(set);
- return !std::strchr(set, ch);
- }
- // Test internal utilities
- void test_utils()
- {
- assert(last("123") == '3');
- assert(last(std::string("123")) == '3');
- //assert(last(string_ref("123")) == '3');
- assert(not_in_set('z', "abc"));
- assert(!not_in_set('a', "abc") && !not_in_set('b', "abc") && !not_in_set('c', "abc"));
- }
- void trim_default_test(const char *src)
- {
- assert(src);
- std::cout << "Default trim. Source: |" << src << "|\n";
- char st[32];
- assert(std::strlen(src) < sizeof st);
- std::strcpy(st, src);
- std::cout << trim(st) << "|\n";
- assert(!std::isspace(*st) && !std::isspace(last(st)));
- std::strcpy(st, src);
- std::cout << trim_front(st) << "|\n";
- assert(!std::isspace(*st));
- std::strcpy(st, src);
- std::cout << trim_back(st) << "|\n";
- assert(!std::isspace(last(st)));
- std::string sst;
- sst = src;
- std::cout << trim(sst) << "|\n";
- assert(!std::isspace(*sst.begin()) && !std::isspace(last(sst)));
- sst = src;
- std::cout << trim_front(sst) << "|\n";
- assert(!std::isspace(*sst.begin()));
- sst = src;
- std::cout << trim_back(sst) << "|\n";
- assert(!std::isspace(last(sst)));
- }
- void trim_char_test(const char *src, char ch)
- {
- assert(src);
- std::cout << "Trim char. Source: |" << src << "|\n";
- char st[32];
- assert(std::strlen(src) < sizeof st);
- std::strcpy(st, src);
- std::cout << trim(st, ch) << "|\n";
- assert(*st != ch && last(st) != ch);
- std::strcpy(st, src);
- std::cout << trim_front(st, ch) << "|\n";
- assert(*st != ch);
- std::strcpy(st, src);
- std::cout << trim_back(st, ch) << "|\n";
- assert(last(st) != ch);
- std::string sst;
- sst = src;
- std::cout << trim(sst, ch) << "|\n";
- assert(*sst.begin() != ch && last(sst) != ch);
- sst = src;
- std::cout << trim_front(sst, ch) << "|\n";
- assert(*sst.begin() != ch);
- sst = src;
- std::cout << trim_back(sst, ch) << "|\n";
- assert(last(sst) != ch);
- }
- void trim_set_test(const char *src, const char *set)
- {
- assert(src);
- std::cout << "Trim set. Source: |" << src << "|\n";
- char st[32];
- assert(std::strlen(src) < sizeof st);
- std::strcpy(st, src);
- std::cout << trim(st, set) << "|\n";
- assert(not_in_set(*st, set) && not_in_set(last(st), set));
- std::strcpy(st, src);
- std::cout << trim_front(st, set) << "|\n";
- assert(not_in_set(*st, set));
- std::strcpy(st, src);
- std::cout << trim_back(st, set) << "|\n";
- assert(not_in_set(last(st), set));
- std::string sst;
- sst = src;
- std::cout << trim(sst, set) << "|\n";
- assert(not_in_set(*sst.begin(), set) && not_in_set(last(sst), set));
- sst = src;
- std::cout << trim_front(sst, set) << "|\n";
- assert(not_in_set(*sst.begin(), set));
- sst = src;
- std::cout << trim_back(sst, set) << "|\n";
- assert(not_in_set(last(sst), set));
- }
- void trimmed_default_test(const char *src)
- {
- assert(src);
- std::cout << "Default trimmed. Source: |" << src << "|\n";
- #if __cpp_lib_string_view
- std::string_view
- #else
- std::string
- #endif
- st;
- st = trimmed(src);
- assert(!std::isspace(*st.begin()) && !std::isspace(last(st)));
- std::cout << st << "|\n";
- st = trimmed_front(src);
- assert(!std::isspace(*st.begin()));
- std::cout << st << "|\n";
- st = trimmed_back(src);
- assert(!std::isspace(last(st)));
- std::cout << st << "|\n";
- }
- void trimmed_char_test(const char *src, char ch)
- {
- assert(src);
- std::cout << "Trimmed char. Source: |" << src << "|\n";
- #if __cpp_lib_string_view
- std::string_view
- #else
- std::string
- #endif
- st;
- st = trimmed(src, ch);
- assert(*st.begin() != ch && last(st) != ch);
- std::cout << st << "|\n";
- st = trimmed_front(src, ch);
- assert(*st.begin() != ch);
- std::cout << st << "|\n";
- st = trimmed_back(src, ch);
- assert(last(st) != ch);
- std::cout << st << "|\n";
- }
- void trimmed_set_test(const char *src, const char *set)
- {
- assert(src);
- std::cout << "Trimmed set. Source: |" << src << "|\n";
- #if __cpp_lib_string_view
- std::string_view
- #else
- std::string
- #endif
- st;
- st = trimmed(src, set);
- assert(not_in_set(*st.begin(), set) && not_in_set(last(st), set));
- std::cout << st << "|\n";
- st = trimmed_front(src, set);
- assert(not_in_set(*st.begin(), set));
- std::cout << st << "|\n";
- st = trimmed_back(src, set);
- assert(not_in_set(last(st), set));
- std::cout << st << "|\n";
- }
- void run()
- {
- test_utils();
- trim_default_test(" \tabc \t ");
- std::cout << std::endl;
- trim_char_test(" abc ", ' ');
- std::cout << std::endl;
- trim_set_test(" \tabc \t ", " \t\r\n\f");
- std::cout << std::endl;
- trimmed_default_test(" \tabc \t ");
- std::cout << std::endl;
- trimmed_char_test(" abc ", ' ');
- std::cout << std::endl;
- trimmed_set_test(" \tabc \t ", " \t\r\n\f");
- }
- } // namespace
- int main()
- {
- try
- {
- tests::run();
- return 0;
- }
- catch(const std::exception &ex)
- {
- std::cerr << ex.what() << '\n';
- }
- return 1;
- }
|