1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/***********************************************************************************
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  test_string.cpp
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc.
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee,
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation.  Mark of the Unicorn makes no
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose.  It is provided "as is" without express or implied warranty.
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Prefix.h"
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined( EH_STRING_IMPLEMENTED )
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Tests.h"
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "TestClass.h"
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "LeakCheck.h"
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_construct.h"
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_assign_op.h"
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_push_back.h"
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_insert.h"
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_push_front.h"
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string>
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottUSING_CSTD_NAME(size_t)
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef EH_STD::basic_string<char, EH_STD::char_traits<char>, eh_allocator(char) > TestString;
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline sequence_container_tag
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcontainer_category(const TestString&)
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return sequence_container_tag();
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid test_string() {
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    TestString testString, testString2;
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_t ropeSize = random_number(random_base);
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    while ( testString.size() < ropeSize ) {
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        TestString::value_type x = TestString::value_type(random_number(random_base)) ;  // initialize before use
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        testString.append(1, x );
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        testString2.append(1, TestString::value_type() );
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_one<TestString>(testString) );
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_one<TestString>(testString, 0) );
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_one<TestString>(testString, (int)testString.size()) );
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_n<TestString>(testString, random_number(random_base) ) );
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_n<TestString>(testString, random_number(random_base), 0 ) );
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_insert_n<TestString>(testString, random_number(random_base), (int)testString.size() ) );
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_t insCnt = random_number(random_base);
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    TestString::value_type *insFirst = new TestString::value_type[1+insCnt];
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, insert_range_tester(testString, insFirst, insFirst+insCnt) );
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, insert_range_at_begin_tester(testString, insFirst, insFirst+insCnt) );
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, insert_range_at_end_tester(testString, insFirst, insFirst+insCnt) );
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ConstCheck( 0, test_construct_pointer_range<TestString>(insFirst, insFirst+insCnt) );
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    delete[] insFirst;
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, insert_range_tester(testString, testString2.begin(), testString2.end() ) );
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /*
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_push_front<TestString>(testString) );
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_push_back<TestString>(testString) );
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    */
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ConstCheck( 0, test_default_construct<TestString>() );
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // requires _Reserve_t    ConstCheck( 0, test_construct_n<TestString>( random_number(random_base) ) );
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ConstCheck( 0, test_construct_n_instance<TestString>( random_number(random_base) ) );
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ConstCheck( 0, test_construct_iter_range<TestString>( testString2 ) );
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ConstCheck( testString, test_copy_construct<TestString>() );
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    WeakCheck( testString, test_assign_op<TestString>( testString2 ) );
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif // EH_ROPE_IMPLEMENTED
80