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

📄 basic_cstring_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//  (C) Copyright Gennadiy Rozental 2001-2008.//  Distributed under the Boost Software License, Version 1.0.//  (See accompanying file LICENSE_1_0.txt or copy at //  http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org/libs/test for the library home page.////  File        : $RCSfile$////  Version     : $Revision: 49313 $////  Description : basic_cstring unit test// *****************************************************************************#ifdef _MSC_VER#pragma warning(disable: 4996)#endif// Boost.Test#include <boost/test/unit_test.hpp>#include <boost/test/test_case_template.hpp>#include <boost/test/utils/basic_cstring/basic_cstring.hpp>#include <boost/test/utils/basic_cstring/compare.hpp>#include <boost/test/utils/basic_cstring/io.hpp>#include <boost/test/output_test_stream.hpp>namespace utf = boost::unit_test;namespace tt  = boost::test_tools;using utf::const_string;// Boost#include <boost/mpl/list.hpp>#include <boost/mpl/joint_view.hpp>#include <boost/mpl/transform.hpp>#include <boost/type_traits/add_const.hpp>// STL#include <cctype>#include <ctime>#include <iomanip>#include <iostream>#include <stdexcept>namespace mpl = boost::mpl;#if defined(BOOST_NO_STD_WSTRING)typedef mpl::list1<char const>                                              base_const_char_types;typedef mpl::list2<char,unsigned char>                                      mutable_char_types;#elsetypedef mpl::list2<char const,wchar_t const>                                base_const_char_types;typedef mpl::list3<char,unsigned char,wchar_t>                              mutable_char_types;#endiftypedef mpl::transform<mutable_char_types,boost::add_const<mpl::_1> >::type const_char_types;typedef mpl::joint_view<const_char_types,mutable_char_types>                char_types;typedef mpl::list2<char,const char>                                         io_test_types;//____________________________________________________________________________//template<typename CharT>struct string_literal{    typedef typename boost::remove_const<CharT>::type   mutable_char;    string_literal( char const* orig, std::size_t orig_size )    {        std::copy( orig, orig + orig_size, buff );        buff[orig_size] = 0;    }    mutable_char buff[100];};#define LITERAL( s ) (CharT*)string_literal<CharT>( s, sizeof( s ) ).buff#define LOCAL_DEF( name, s )                                                \string_literal<CharT> BOOST_JOIN( sl, __LINE__)(s, sizeof( s ));            \utf::basic_cstring<CharT> name( (CharT*)(BOOST_JOIN( sl, __LINE__).buff) )  \/**/#define TEST_STRING test_string<CharT>( (CharT*)0 )template<typename CharT>CharT*test_string( CharT* = 0 ){    static string_literal<CharT> l( "test_string", 11 );    return l.buff;}//____________________________________________________________________________//BOOST_TEST_CASE_TEMPLATE_FUNCTION( constructors_test, CharT ){    {        utf::basic_cstring<CharT> bcs;        BOOST_CHECK_EQUAL( bcs.size(), (unsigned)0 );        BOOST_CHECK( bcs.is_empty() );    }    {        utf::basic_cstring<CharT> bcs( utf::basic_cstring<CharT>::null_str() );        BOOST_CHECK_EQUAL( bcs.size(), (unsigned)0 );        BOOST_CHECK( bcs.is_empty() );    }    {        utf::basic_cstring<CharT> bcs( 0 );        BOOST_CHECK_EQUAL( bcs.size(), (unsigned)0 );        BOOST_CHECK( bcs.is_empty() );    }    {        typedef typename utf::basic_cstring<CharT>::traits_type traits;        utf::basic_cstring<CharT> bcs( TEST_STRING );        BOOST_CHECK_EQUAL( traits::compare( bcs.begin(), TEST_STRING, bcs.size() ), 0 );        BOOST_CHECK_EQUAL( bcs.size(), traits::length( TEST_STRING ) );        utf::basic_cstring<CharT> bcs1( bcs );        BOOST_CHECK_EQUAL( traits::compare( bcs1.begin(), TEST_STRING, bcs1.size() ), 0 );    }    {        typedef typename utf::basic_cstring<CharT>::traits_type traits;        utf::basic_cstring<CharT> bcs( TEST_STRING, 4 );        BOOST_CHECK_EQUAL( traits::compare( bcs.begin(), LITERAL( "test" ), bcs.size() ), 0 );    }    {        typedef typename utf::basic_cstring<CharT>::traits_type traits;        utf::basic_cstring<CharT> bcs( TEST_STRING, TEST_STRING + 6 );        BOOST_CHECK_EQUAL( traits::compare( bcs.begin(), LITERAL( "test_s" ), bcs.size() ), 0 );    }}//____________________________________________________________________________//BOOST_TEST_CASE_TEMPLATE_FUNCTION( constructors_std_string_test, CharT ){    typedef typename utf::basic_cstring<CharT>::traits_type traits;    {        typename utf::basic_cstring<CharT>::std_string l( TEST_STRING );        utf::basic_cstring<CharT> bcs( l );        BOOST_CHECK_EQUAL( traits::compare( bcs.begin(), TEST_STRING, bcs.size() ), 0 );    }}//____________________________________________________________________________//void array_construction_test(){#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x600))    const_string bcs_array[] = { "str1", "str2" };    BOOST_CHECK_EQUAL( const_string::traits_type::compare( bcs_array[0].begin(), "str1", bcs_array[0].size() ), 0 );    BOOST_CHECK_EQUAL( const_string::traits_type::compare( bcs_array[1].begin(), "str2", bcs_array[1].size() ), 0 );    const_string bcs( "abc" );    BOOST_CHECK_EQUAL( const_string::traits_type::compare( bcs.begin(), "abc", bcs.size() ), 0 );#endif}//____________________________________________________________________________//BOOST_TEST_CASE_TEMPLATE_FUNCTION( data_access_test, CharT ){    typedef typename utf::basic_cstring<CharT>::traits_type traits_type;    utf::basic_cstring<CharT> bcs1( TEST_STRING );    BOOST_CHECK_EQUAL( traits_type::compare( bcs1.begin(), TEST_STRING, bcs1.size() ), 0 );    BOOST_CHECK_EQUAL( traits_type::compare( bcs1.begin(), bcs1.begin(), bcs1.size() ), 0 );    BOOST_CHECK_EQUAL( bcs1[0], 't' );    BOOST_CHECK_EQUAL( bcs1[4], '_' );    BOOST_CHECK_EQUAL( bcs1[bcs1.size()-1], 'g' );    BOOST_CHECK_EQUAL( bcs1[0], bcs1.at( 0 ) );    BOOST_CHECK_EQUAL( bcs1[2], bcs1.at( 5 ) );    BOOST_CHECK_EQUAL( bcs1.at( bcs1.size() - 1 ), 'g' );    BOOST_CHECK_EQUAL( bcs1.at( bcs1.size() ), 0 );    BOOST_CHECK_EQUAL( bcs1.at( bcs1.size()+1 ), 0 );    BOOST_CHECK_EQUAL( utf::first_char( bcs1 ), 't' );    BOOST_CHECK_EQUAL( utf::last_char( bcs1 ) , 'g' );    BOOST_CHECK_EQUAL( utf::first_char( utf::basic_cstring<CharT>() ), 0 );    BOOST_CHECK_EQUAL( utf::last_char( utf::basic_cstring<CharT>() ), 0 );}//____________________________________________________________________________//BOOST_TEST_CASE_TEMPLATE_FUNCTION( size_test, CharT ){    utf::basic_cstring<CharT> bcs1;    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)0 );    BOOST_CHECK( bcs1.is_empty() );    bcs1 = TEST_STRING;    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)11 );    bcs1.clear();    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)0 );    BOOST_CHECK( bcs1.is_empty() );    bcs1 = utf::basic_cstring<CharT>( TEST_STRING, 4 );    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)4 );    bcs1.resize( 5 );    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)4 );    bcs1.resize( 3 );    BOOST_CHECK_EQUAL( bcs1.size(), (unsigned)3 );}//____________________________________________________________________________//BOOST_TEST_CASE_TEMPLATE_FUNCTION( asignment_test, CharT ){    typedef typename utf::basic_cstring<CharT>::traits_type traits_type;    utf::basic_cstring<CharT> bcs1;    string_literal<CharT> l( "test", 4 );    bcs1 = l.buff;    BOOST_CHECK_EQUAL( traits_type::compare( bcs1.begin(), LITERAL( "test" ), bcs1.size() ), 0 );    utf::basic_cstring<CharT> bcs2( TEST_STRING );    bcs1 = bcs2;    BOOST_CHECK_EQUAL( traits_type::compare( bcs1.begin(), TEST_STRING, bcs1.size() ), 0 );    bcs1.assign( l.buff );

⌨️ 快捷键说明

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