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

📄 fixed_array_unittest_.h

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

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

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

namespace unittest
{
	namespace
	{
		ss_bool_t test_stlsoft_containers_fixed_array(unittest_reporter *r)
		{
			ss_bool_t				bSuccess	=	true;

			unittest_initialiser	init(r, "STLSoft", "containers/fixed_array", __FILE__);

			typedef fixed_array_1d<int> 	fa1d_t;
			typedef fixed_array_2d<int> 	fa2d_t;
			typedef fixed_array_3d<int> 	fa3d_t;
			typedef fixed_array_4d<int> 	fa4d_t;

			fa1d_t	a1d_1(10);
			fa2d_t	a2d_1(10, 20);
			fa3d_t	a3d_1(10, 20, 30);
			fa4d_t	a4d_1(10, 20, 30, 40);

			fa1d_t	a1d_2(a1d_1);
			fa2d_t	a2d_2(a2d_1);
			fa3d_t	a3d_2(a3d_1);
			fa4d_t	a4d_2(a4d_1);

			////////////////////////////////////////////////
			// 1-dimension

			// values, via at_unchecked(), (), []

			{ for(size_t i = 0; i < a1d_1.dimension0(); ++i)
			{
				if(a1d_1.at_unchecked(i) != a1d_1[i])
				{
					r->report("at_unchecked() does not match []", __LINE__);
					bSuccess = false;
				}
				if(a1d_1.at_unchecked(i) != a1d_1(i))
				{
					r->report("at_unchecked() does not match ()", __LINE__);
					bSuccess = false;
				}
				if(a1d_1.at_unchecked(i) != a1d_1.at(i))
				{
					r->report("at_unchecked() does not match ()", __LINE__);
					bSuccess = false;
				}
			}}

			// values, via at()

			try
			{
				static_cast<void>(a1d_1.at(a1d_1.dimension0()));

				r->report("at() failed", __LINE__);
				bSuccess = false;
			}
			catch(std::out_of_range &)
			{}

			// pointers, via at_unchecked(), (), []

			{ for(size_t i = 0; i < a1d_1.dimension0(); ++i)
			{
				if(&a1d_1.at_unchecked(i) != &a1d_1[i])
				{
					r->report("at_unchecked() does not match []", __LINE__);
					bSuccess = false;
				}
				if(&a1d_1.at_unchecked(i) != &a1d_1(i))
				{
					r->report("at_unchecked() does not match ()", __LINE__);
					bSuccess = false;
				}
				if(&a1d_1.at_unchecked(i) != &a1d_1.at(i))
				{
					r->report("at_unchecked() does not match ()", __LINE__);
					bSuccess = false;
				}
			}}

			////////////////////////////////////////////////
			// 2-dimensions

			// values, via at_unchecked(), (), []

			{ for(size_t i = 0; i < a2d_1.dimension0(); ++i)
			{
				{ for(size_t j = 0; j < a2d_1.dimension1(); ++j)
				{
#if !defined(STLSOFT_COMPILER_IS_GCC) || \
    __GNUC__ < 4					
					if(a2d_1.at_unchecked(i, j) != a2d_1[i][j])
					{
						r->report("at_unchecked() does not match []", __LINE__);
						bSuccess = false;
					}
#endif
					if(a2d_1.at_unchecked(i, j) != a2d_1(i, j))
					{
						r->report("at_unchecked() does not match ()", __LINE__);
						bSuccess = false;
					}
					if(a2d_1.at_unchecked(i, j) != a2d_1.at(i, j))
					{
						r->report("at_unchecked() does not match ()", __LINE__);
						bSuccess = false;
					}
				}}
			}}

			// values, via at()

			try
			{
				static_cast<void>(a2d_1.at(a2d_1.dimension0(), 0));

				r->report("at() failed", __LINE__);
				bSuccess = false;
			}
			catch(std::out_of_range &)
			{}

			////////////////////////////////////////////////
			// 3-dimensions

			// values, via at_unchecked(), (), []

			{ for(size_t i = 0; i < a3d_1.dimension0(); ++i)
			{
				{ for(size_t j = 0; j < a3d_1.dimension1(); ++j)
				{
					{ for(size_t k = 0; k < a3d_1.dimension2(); ++k)
					{
#if !defined(STLSOFT_COMPILER_IS_GCC) || \
    __GNUC__ < 4					
						if(a3d_1.at_unchecked(i, j, k) != a3d_1[i][j][k])
						{
							r->report("at_unchecked() does not match []", __LINE__);
							bSuccess = false;
						}
#endif
						if(a3d_1.at_unchecked(i, j, k) != a3d_1(i, j, k))
						{
							r->report("at_unchecked() does not match ()", __LINE__);
							bSuccess = false;
						}
						if(a3d_1.at_unchecked(i, j, k) != a3d_1.at(i, j, k))
						{
							r->report("at_unchecked() does not match ()", __LINE__);
							bSuccess = false;
						}
					}}
				}}
			}}

			// values, via at()

			try
			{
				static_cast<void>(a3d_1.at(0, a3d_1.dimension1(), 0));

				r->report("at() failed", __LINE__);
				bSuccess = false;
			}
			catch(std::out_of_range &)
			{}

			////////////////////////////////////////////////
			// 4-dimensions

			// values, via at_unchecked(), (), []

			{ for(size_t i = 0; i < a4d_1.dimension0(); ++i)
			{
				{ for(size_t j = 0; j < a4d_1.dimension1(); ++j)
				{
					{ for(size_t k = 0; k < a4d_1.dimension2(); ++k)
					{
						{ for(size_t l = 0; l < a4d_1.dimension3(); ++l)
						{
#if !defined(STLSOFT_COMPILER_IS_GCC) || \
    __GNUC__ < 4					
							if(a4d_1.at_unchecked(i, j, k, l) != a4d_1[i][j][k][l])
							{
								r->report("at_unchecked() does not match []", __LINE__);
								bSuccess = false;
							}
#endif
							if(a4d_1.at_unchecked(i, j, k, l) != a4d_1(i, j, k, l))
							{
								r->report("at_unchecked() does not match ()", __LINE__);
								bSuccess = false;
							}
							if(a4d_1.at_unchecked(i, j, k, l) != a4d_1.at(i, j, k, l))
							{
								r->report("at_unchecked() does not match ()", __LINE__);
								bSuccess = false;
							}
						}}
					}}
				}}
			}}

			// values, via at()

			try
			{
				static_cast<void>(a4d_1.at(0, 0, 0, a4d_1.dimension3()));

				r->report("at() failed", __LINE__);
				bSuccess = false;
			}
			catch(std::out_of_range &)
			{}

			return bSuccess;
		}

		unittest_registrar	  unittest_stlsoft_containers_fixed_array(test_stlsoft_containers_fixed_array);
	} // anonymous namespace

} // namespace unittest

⌨️ 快捷键说明

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