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

📄 associative_range_unittest_.h

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

#if !defined(RANGELIB_INCL_RANGELIB_HPP_ASSOCIATIVE_RANGE)
# error This file cannot be directly included, and should only be included within rangelib/associative_range.hpp
#endif /* !RANGELIB_INCL_RANGELIB_HPP_ASSOCIATIVE_RANGE */

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

namespace unittest
{
	namespace
	{
		namespace associative_range_util
		{
			template <ss_typename_param_k T>
			ss_bool_t test_container()
			{
				typedef ss_typename_type_k T::key_type											key_t;
#if defined(STLSOFT_CF_HAS_MEMBER_TYPE_SUPPORTED)
				typedef ss_typename_type_k associative_mapped_type_detector<T>::mapped_type 	mapped_t;
#else /* ? STLSOFT_CF_HAS_MEMBER_TYPE_SUPPORTED */
				typedef ss_typename_type_k T::mapped_type										mapped_t;
#endif /* STLSOFT_CF_HAS_MEMBER_TYPE_SUPPORTED */

				T			cont;
				mapped_t	total0	=	0;
				mapped_t	total1	=	0;

				for(key_t i = 0; i < key_t(100); i += key_t(5))
				{
					cont[i] = mapped_t(1.1) * i;

					total0 += cont[i];
				}

				for(associative_range<T> range(cont); range; ++range)
				{
					total1 += (*range).second;
				}

				return total0 == total1;
			}
		} // namespace associative_range_util

		ss_bool_t test_rangelib_associative_range(unittest_reporter *r)
		{
			using stlsoft::unittest::unittest_initialiser;

			ss_bool_t				bSuccess	=	true;

			unittest_initialiser	init(r, "RangeLib", "associative_range", __FILE__);

#if !defined(STLSOFT_CF_HAS_MEMBER_TYPE_SUPPORTED) && \
	defined(STLSOFT_CF_STD_LIBRARY_IS_DINKUMWARE_VC) && \
	STLSOFT_CF_STD_LIBRARY_DINKUMWARE_VC_VERSION <= STLSOFT_CF_DINKUMWARE_VC_VERSION_6_0
			// Do nothing, since std::map has 'referent_type', not 'mapped_type'

#else /* ? 'referent_type' */

			{ typedef ::std::map<int, int>	map_t;	// Must have separate typedef, otherwise CodeWarrior gets the sniffles
				if(!associative_range_util::test_container<map_t>())
				{
					r->report("summation over map<int, int> failed", __LINE__);
					bSuccess = false;
				}
			}

			{ typedef ::std::map<short, double> 	map_t;	// Must have separate typedef, otherwise CodeWarrior gets the sniffles
				if(!associative_range_util::test_container<map_t>())
				{
					r->report("summation over map<short, double> failed", __LINE__);
					bSuccess = false;
				}
			}
#endif /* 'referent_type' */

			return bSuccess;
		}

		unittest_registrar	  unittest_rangelib_associative_range(test_rangelib_associative_range);

	} // anonymous namespace

} // namespace unittest

⌨️ 快捷键说明

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