⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string_view_unittest_.h

📁 新版本TR1的stl
💻 H
字号:

// Updated: 6th June 2006

#if !defined(STLSOFT_INCL_STLSOFT_STRING_HPP_STRING_VIEW)
# error This file cannot be directly included, and should only be included within stlsoft/string/string_view.hpp
#endif /* !STLSOFT_INCL_STLSOFT_STRING_HPP_STRING_VIEW */

#if !defined(STLSOFT_UNITTEST)
# error This file cannot be included when not unit-testing STLSoft
#endif /* !STLSOFT_UNITTEST */

namespace unittest
{
# if !defined(STLSOFT_COMPILER_IS_MWERKS) || \
	 (__MWERKS__ & 0xFF00) >= 0x3000
	namespace
	{
		ss_bool_t test_stlsoft_string_view_1(unittest_reporter *r)
		{
			ss_bool_t				bSuccess	=	true;

			basic_string_view<char> sv_a;

			if(NULL == sv_a.data())
			{
				r->report("data() returned a NULL pointer", __LINE__);
				bSuccess = false;
			}

			if(NULL == sv_a.c_str())
			{
				r->report("c_str() returned a NULL pointer", __LINE__);
				bSuccess = false;
			}

			if(!sv_a.empty())
			{
				r->report("empty() returns invalid value for empty instance", __LINE__);
				bSuccess = false;
			}

			if(0 != sv_a.size())
			{
				r->report("size() returns invalid value for empty instance", __LINE__);
				bSuccess = false;
			}

			if(0 != sv_a.length())
			{
				r->report("length() returns invalid value for empty instance", __LINE__);
				bSuccess = false;
			}

			if(0 != sv_a.capacity())
			{
				r->report("capacity() returns invalid value for empty instance", __LINE__);
				bSuccess = false;
			}

			sv_a.clear();

			sv_a.max_size();

			basic_string_view<char> sv_a_2;

			if(!sv_a.equal(sv_a_2))
			{
				r->report("Empty instances do not compare equal", __LINE__);
				bSuccess = false;
			}
			if(!sv_a.equal(sv_a_2.base(), sv_a_2.size()))
			{
				r->report("Empty instances do not compare equal", __LINE__);
				bSuccess = false;
			}

#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
			try
			{
				char const	&ch =	sv_a.at(0);

				STLSOFT_SUPPRESS_UNUSED(ch);

				r->report("Failed to detect invalid subscript in at() for empty instance", __LINE__);
				bSuccess = false;
			}
			catch(std::out_of_range &)
			{}
#endif /* !STLSOFT_CF_EXCEPTION_SUPPORT */


			return bSuccess;
		}

		ss_bool_t test_stlsoft_string_view_2(unittest_reporter *r)
		{
			ss_bool_t				bSuccess	=	true;

			basic_string_view<char> sv_a("Paninaro");

			if(NULL == sv_a.data())
			{
				r->report("data() returned a NULL pointer", __LINE__);
				bSuccess = false;
			}

			if(NULL == sv_a.c_str())
			{
				r->report("c_str() returned a NULL pointer", __LINE__);
				bSuccess = false;
			}

			if(sv_a.empty())
			{
				r->report("empty() returns invalid value for non-empty instance", __LINE__);
				bSuccess = false;
			}

			if(8 != sv_a.size())
			{
				r->report("size() returns invalid value for non-empty instance", __LINE__);
				bSuccess = false;
			}

			if(8 != sv_a.length())
			{
				r->report("length() returns invalid value for non-empty instance", __LINE__);
				bSuccess = false;
			}

			if(8 != sv_a.capacity())
			{
				r->report("capacity() returns invalid value for non-empty instance", __LINE__);
				bSuccess = false;
			}

			sv_a.max_size();

			basic_string_view<char> sv_a_2(sv_a);

			if(!sv_a.equal(sv_a_2))
			{
				r->report("Empty instances do not compare equal", __LINE__);
				bSuccess = false;
			}
			if(!sv_a.equal(sv_a_2.base(), sv_a_2.size()))
			{
				r->report("Empty instances do not compare equal", __LINE__);
				bSuccess = false;
			}

#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
			try
			{
				{ for(size_t i = 0; i < sv_a.size(); ++i)
				{
					char const	&ch =	sv_a.at(i);

					STLSOFT_SUPPRESS_UNUSED(ch);
				}}
			}
			catch(std::out_of_range &)
			{
				r->report("Erroneously detected valid subscript in at() for non-empty instance", __LINE__);
				bSuccess = false;
			}
#endif /* !STLSOFT_CF_EXCEPTION_SUPPORT */


			return bSuccess;
		}

		ss_bool_t test_stlsoft_string_view(unittest_reporter *r)
		{
			ss_bool_t				bSuccess	=	true;

			unittest_initialiser	init(r, "STLSoft", "string/string_view", __FILE__);

			typedef stlsoft_ns_qual(basic_string_view)< char
													,	char_traits<char>
													,	allocator_selector<char>::allocator_type
													>		seg_string_t;

			if(!test_stlsoft_string_view_1(r))
			{
				bSuccess = false;
			}
			if(!test_stlsoft_string_view_2(r))
			{
				bSuccess = false;
			}

			char const		s[] = "Hello Natty!";

			if(!seg_string_t().empty())
			{
				r->report("Default construction and/or != comparison failed", __LINE__);
				bSuccess = false;
			}

			if(seg_string_t() != seg_string_t())
			{
				r->report("Default construction and/or != comparison failed", __LINE__);
				bSuccess = false;
			}
			seg_string_t	ss(s, STLSOFT_NUM_ELEMENTS(s) - 1);
			seg_string_t	ss1(&s[6], 6);
			seg_string_t	ss2(&s[0], 5);

			if(ss.data() != &s[0])
			{
				r->report("data() returns invalid value", __LINE__);
				bSuccess = false;
			}

			if(ss1 <= ss2)
			{
				r->report("<= comparison failed", __LINE__);
				bSuccess = false;
			}
			if(ss2 > ss1)
			{
				r->report("> comparison failed", __LINE__);
				bSuccess = false;
			}

			if(0 != seg_string_t("abc", 3).compare("abc"))
			{
				r->report("compare(s) failed", __LINE__);
				bSuccess = false;
			}

			if(0 != seg_string_t("abcdef", 3).compare(0, 3, "abc"))
			{
				r->report("compare(p, cch, s) failed", __LINE__);
				bSuccess = false;
			}

			if(0 != seg_string_t("Well done Matty!", 16).compare(11, 5, ss, 7, 5))
			{
				r->report("compare(p, cch, r, rp, rn) failed", __LINE__);
				bSuccess = false;
			}

#ifdef STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT
			seg_string_t	ss3(s);

			if(ss3 != s)
			{
				r->report("array[] constructor failed", __LINE__);
				bSuccess = false;
			}
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

			return bSuccess;
		}

		unittest_registrar	  unittest_stlsoft_string_view(test_stlsoft_string_view);
	} // anonymous namespace
# endif /* compiler */

} // namespace unittest

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -