/***************************************************************************
 *
 * 21.string.replace.cpp - string test exercising lib.string.replace
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you under  the Apache
 * License, Version  2.0 (the  "License"); you may  not use  this file
 * except in  compliance with the License.   You may obtain  a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the  License is distributed on an  "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
 * implied.   See  the License  for  the  specific language  governing
 * permissions and limitations under the License.
 *
 * Copyright 2006 Rogue Wave Software.
 *
 **************************************************************************/

#include <string>           // for string
#include <stdexcept>        // for out_of_range, length_error
#include <cstddef>          // for ptrdiff_t, size_t

#include <rw_strings.h>
#include <rw_alg_test.h>    // for InputIter
#include <rw_driver.h>      // for rw_test()
#include <rw_allocator.h>   // for UserAlloc
#include <rw_new.h>         // for bad_alloc, replacement operator new

/**************************************************************************/

// for convenience and brevity
#define Replace(sig)    StringIds::replace_ ## sig

static const char* const exceptions[] = {
    "unknown exception", "out_of_range", "length_error",
    "bad_alloc", "exception"
};

/**************************************************************************/

// exercises:
// replace (size_type, size_type, const value_type*)
// replace (iterator, iterator, const value_type*)
static const StringTestCase
iter_iter_cptr_test_cases [] = {

// iter_iter_cptr_test_cases serves a double duty
#define size_size_cptr_test_cases iter_iter_cptr_test_cases

#undef TEST
#define TEST(str, off, size, arg, res, bthrow) {                \
        __LINE__, off, size, -1, -1, -1,                        \
        str, sizeof str - 1,                                    \
        arg, sizeof arg - 1, res, sizeof res - 1, bthrow        \
    }

    //    +------------------------------------------ controlled sequence
    //    |            +----------------------------- replace() pos1 argument
    //    |            |  +-------------------------- replace() n1 argument
    //    |            |  |  +----------------------- sequence to be inserted
    //    |            |  |  |           +----------- expected result sequence
    //    |            |  |  |           |        +-- exception info
    //    |            |  |  |           |        |   -1   - no exceptions
    //    |            |  |  |           |        |    0   - exception safety
    //    |            |  |  |           |        |    1,2 - out_of_range
    //    |            |  |  |           |        |    3   - length_error
    //    |            |  |  |           |        |
    //    |            |  |  |           |        +-------+
    //    |            |  |  |           |                |
    //    V            V  V  V           V                V
    TEST ("ab",        0, 0, "c",        "cab",           0),

    TEST ("",          0, 0, "",         "",              0),
    TEST ("",          0, 0, "abc",      "abc",           0),

    TEST ("ab",        0, 2, "",         "",              0),
    TEST ("ab",        0, 1, "",         "b",             0),

    TEST ("<U0>",      0, 1, "",         "",              0),
    TEST ("<U0>",      0, 1, "a",        "a",             0),
    TEST ("<U0>",      0, 1, "<U0>@2",   "",              0),

    TEST ("ah",        0, 1, "bcdefg",   "bcdefgh",       0),
    TEST ("ah",        1, 1, "bcdefg",   "abcdefg",       0),
    TEST ("ah",        0, 2, "bcdefg",   "bcdefg",        0),

    TEST ("abc",       0, 2, "cc",       "ccc",           0),
    TEST ("abc",       1, 2, "cc",       "acc",           0),

    TEST ("abc",       0, 3, "defgh",    "defgh",         0),
    TEST ("abc",       2, 1, "defgh",    "abdefgh",       0),
    TEST ("abc",       2, 1, "de<U0>gh", "abde",          0),
    TEST ("abc",       2, 1, "",         "ab",            0),
    TEST ("abc",       1, 1, "defgh",    "adefghc",       0),

    TEST ("abc",       0, 0, "ee",       "eeabc",         0),
    TEST ("abc",       0, 0, "<U0>@2e<U0>", "abc",        0),
    TEST ("abc",       2, 0, "ee",       "abeec",         0),
    TEST ("abc",       1, 0, "ee",       "aeebc",         0),
    TEST ("abc",       1, 0, "e<U0>@2",  "aebc",          0),

    TEST ("a<U0>b<U0>@2c", 0, 3, "",      "<U0>@2c",      0),
    TEST ("a<U0>b<U0>@2c", 0, 3, "<U0>e", "<U0>@2c",      0),

    TEST ("<U0>ab<U0>@2c", 0, 0, "e<U0>",   "e<U0>ab<U0>@2c",   0),
    TEST ("a<U0>b<U0>c<U0>", 6, 0, "e<U0>", "a<U0>b<U0>c<U0>e", 0),
    TEST ("<U0>ab<U0>@2c", 5, 0, "e<U0>",   "<U0>ab<U0>@2ec",   0),

    TEST ("x@4096",    0, 4095, "ab",    "abx",           0),
    TEST ("<U0>@4096", 1, 4094, "abc",   "<U0>abc<U0>",   0),
    TEST ("x@4096",    1, 4094, "ab",    "xabx",          0),
    TEST ("x@4096",    0, 4094, "ab",    "abxx",          0),
    TEST ("x@4096",    1, 4093, "",      "xxx",           0),

    TEST ("x@20",      1,   10, "x@118", "x@128",         0),
    TEST ("x@128",   128,    0, "x@79",  "x@207",         0),
    TEST ("x@207",     0,    0, "x@127", "x@334",         0),
    TEST ("x@334",     1,    1, "x@207", "x@540",         0),
    TEST ("x@540",     0,  539, "x@334", "x@335",         0),
    TEST ("x@539",   539,    0, "x@873", "x@1412",        0),
    TEST ("x@3695",    0, 2283, "",      "x@1412",        0),
    TEST ("x@1412",  207,    1, "x@2284", "x@3695",       0),
    TEST ("x@207",     0,  207, "x@2284", "x@2284",       0),

    TEST ("",          0,    0, "x@4096", "x@4096",       0),
    TEST ("a",         0,    1, "x@4096", "x@4096",       0),
    TEST ("x@4096",    0, 4095, "x@4096", "x@4097",       0),
    TEST ("<U0>ab<U0>@2c", 0, 6, "x@4096", "x@4096",      0),

    TEST ("<U0>",       2,   0, "",       "<U0>",         1),
    TEST ("a",         10,   0, "",       "a",            1),
    TEST ("x@4096",  4106,   0, "",       "x@4096",       1),

    TEST ("",           0,   0, "x@4096", "x@4096",       0),

    // self-referential replacement
    TEST ("",          0,    0, 0,        "",             0),
    TEST ("abc",       0,    3, 0,        "abc",          0),
    TEST ("abc",       1,    1, 0,        "aabcc",        0),
    TEST ("a<U0>b<U0>c<U0>", 2,    3, 0,  "a<U0>a<U0>",       0),
    TEST ("a<U0>b<U0>c<U0>", 0,    0, 0,  "aa<U0>b<U0>c<U0>", 0),
    TEST ("a<U0>b<U0>c<U0>", 6,    0, 0,  "a<U0>b<U0>c<U0>a", 0),
    TEST ("<U0>ab<U0>c<U0>", 3,    3, 0,  "<U0>ab",           0),
    TEST ("x@4096",    0, 4095, 0,        "x@4097",       0),

    TEST ("last",      4, 0, "test",     "lasttest",      0)
};

/**************************************************************************/

// exercises:
// replace (size_type, size_type, const basic_string&)
// replace (iterator, iterator, const basic_string&)
static const StringTestCase
iter_iter_cstr_test_cases [] = {

// iter_iter_cstr_test_cases serves a double duty
#define size_size_cstr_test_cases iter_iter_cstr_test_cases

#undef TEST
#define TEST(s, off, size, arg, res, bthrow) {                  \
        __LINE__, off, size, -1, -1, -1,                        \
        s, sizeof s - 1,                                        \
        arg, sizeof arg - 1, res, sizeof res - 1, bthrow        \
    }

    //    +------------------------------------------- controlled sequence
    //    |             +----------------------------- replace() pos1 argument
    //    |             |  +-------------------------- replace() n1 argument
    //    |             |  |  +----------------------- sequence to be inserted
    //    |             |  |  |           +----------- expected result sequence
    //    |             |  |  |           |        +-- exception info
    //    |             |  |  |           |        |   -1   - no exceptions
    //    |             |  |  |           |        |    0   - exception safety
    //    |             |  |  |           |        |    1,2 - out_of_range
    //    |             |  |  |           |        |    3   - length_error
    //    |             |  |  |           |        |
    //    |             |  |  |           |        +-----------+
    //    |             |  |  |           |                    |
    //    V             V  V  V           V                    V
    TEST ("ab",         0, 0, "c",        "cab",               0),

    TEST ("",           0, 0, "",         "",                  0),
    TEST ("",           0, 0, "<U0>",       "<U0>",            0),
    TEST ("",           0, 0, "abc",      "abc",               0),

    TEST ("ab",         0, 2, "",         "",                  0),
    TEST ("ab",         0, 1, "",         "b",                 0),
    TEST ("ab",         1, 1, "<U0>",       "a<U0>",           0),

    TEST ("<U0>",       0, 1, "",         "",                  0),
    TEST ("<U0>",       0, 1, "a",        "a",                 0),
    TEST ("<U0>",       0, 1, "<U0>@2",     "<U0>@2",          0),

    TEST ("ah",         0, 1, "bcdefg",   "bcdefgh",           0),
    TEST ("ah",         1, 1, "bcdefg",   "abcdefg",           0),
    TEST ("ah",         0, 2, "bcdefg",   "bcdefg",            0),

    TEST ("abc",        0, 2, "cc",       "ccc",               0),
    TEST ("abc",        1, 2, "cc",       "acc",               0),

    TEST ("abc",        0, 3, "defgh",    "defgh",             0),
    TEST ("abc",        2, 1, "defgh",    "abdefgh",           0),
    TEST ("abc",        2, 1, "de<U0>gh", "abde<U0>gh",        0),
    TEST ("abc",        2, 1, "",         "ab",                0),
    TEST ("abc",        1, 1, "defgh",    "adefghc",           0),

    TEST ("abc",        0, 0, "ee",       "eeabc",             0),
    TEST ("abc",        0, 0, "<U0>@2e<U0>", "<U0>@2e<U0>abc", 0),
    TEST ("abc",        2, 0, "ee",       "abeec",             0),
    TEST ("abc",        1, 0, "ee",       "aeebc",             0),
    TEST ("abc",        1, 0, "e<U0>@2",  "ae<U0>@2bc",        0),

    TEST ("a<U0>b<U0>@2c",  0, 3, "",      "<U0>@2c",          0),
    TEST ("a<U0>b<U0>@2c",  0, 3, "<U0>e", "<U0>e<U0>@2c",     0),

    TEST ("a<U0>b<U0>@2c",  2, 3, "<U0>e",       "a<U0>@2ec",      0),
    TEST ("a<U0>b<U0>@2c",  0, 3, "<U0>@2e<U0>", "<U0>@2e<U0>@3c", 0),
    TEST ("<U0>ab<U0>@2c",  1, 2, "<U0>e<U0>@2", "<U0>@2e<U0>@4c", 0),

    TEST ("<U0>ab<U0>@2c",   0, 0, "<U0>e", "<U0>e<U0>ab<U0>@2c",   0),
    TEST ("a<U0>b<U0>c<U0>", 6, 0, "e<U0>", "a<U0>b<U0>c<U0>e<U0>", 0),
    TEST ("<U0>ab<U0>@2c",  5, 0, "<U0>e",      "<U0>ab<U0>@3ec",   0),

    TEST ("x@4096",     0, 4095, "ab",    "abx",               0),
    TEST ("x@4096",     1, 4094, "ab",    "xabx",              0),
    TEST ("x@4096",     0, 4094, "ab",    "abxx",              0),
    TEST ("x@4096",     1, 4093, "",      "xxx",               0),
    TEST ("x@4096",     1, 4092, "<U0>@2", "x<U0>@2xxx",       0),

    TEST ("x@20",       1,   10, "x@118", "x@128",             0),
    TEST ("x@128",    128,    0, "x@79",  "x@207",             0),
    TEST ("x@207",      0,    0, "x@127", "x@334",             0),
    TEST ("x@334",      1,    1, "x@207", "x@540",             0),
    TEST ("x@540",      0,  539, "x@334", "x@335",             0),
    TEST ("x@539",    539,    0, "x@873", "x@1412",            0),
    TEST ("x@3695",     0, 2283, "",      "x@1412",            0),
    TEST ("x@1412",   207,    1, "x@2284", "x@3695",           0),
    TEST ("x@207",      0,  207, "x@2284", "x@2284",           0),

    TEST ("",           0,    0, "x@4096", "x@4096",           0),
    TEST ("a",          0,    1, "x@4096", "x@4096",           0),
    TEST ("x@4096",     0, 4095, "x@4096", "x@4097",           0),
    TEST ("<U0>ab<U0>@2c",  0,    6, "x@4096", "x@4096",       0),

    TEST ("<U0>",         2,    0, "",        "<U0>",          1),
    TEST ("a",         10,    0, "",        "a",               1),
    TEST ("x@4096",  4106,    0, "",        "x@4096",          1),
    TEST ("",           0,    0, "x@4096",  "x@4096",          0),

    // self-referential replacement
    TEST ("abc",        0,    3, 0, "abc",                     0),
    TEST ("abc",        1,    1, 0, "aabcc",                   0),
    TEST ("a<U0>b<U0>c<U0>",  2, 3, 0, "a<U0>a<U0>b<U0>c<U0>@2",         0),
    TEST ("a<U0>b<U0>c<U0>",  0, 0, 0, "a<U0>b<U0>c<U0>a<U0>b<U0>c<U0>", 0),
    TEST ("a<U0>b<U0>c<U0>",  6, 0, 0, "a<U0>b<U0>c<U0>a<U0>b<U0>c<U0>", 0),
    TEST ("<U0>ab<U0>c<U0>",  3, 3, 0, "<U0>ab<U0>ab<U0>c<U0>",          0),
    TEST ("x@4096",     0, 4095, 0, "x@4097",                  0),

    TEST ("last",       4,    0, "test",     "lasttest",       0)
};

/**************************************************************************/

// exercises:
// replace (size_type, size_type, const value_type*, size_type)
// replace (iterator, iterator, const value_type*, size_type)
static const StringTestCase
iter_iter_cptr_size_test_cases [] = {

// iter_iter_cptr_size_test_cases serves a double duty
#define size_size_cptr_size_test_cases iter_iter_cptr_size_test_cases

#undef TEST
#define TEST(str, off, size, arg, count, res, bthrow) {         \
        __LINE__, off, size, -1, count, -1,                     \
        str, sizeof str - 1,                                    \
        arg, sizeof arg - 1, res, sizeof res - 1, bthrow        \
    }

    //    +------------------------------------------ controlled sequence
    //    |            +----------------------------- replace() pos1 argument
    //    |            |  +-------------------------- replace() n1 argument
    //    |            |  |  +----------------------- sequence to be inserted
    //    |            |  |  |            +---------- replace() n2 argument
    //    |            |  |  |            |  +------- expected result sequence
    //    |            |  |  |            |  |     +- exception info
    //    |            |  |  |            |  |     |  -1   - no exceptions
    //    |            |  |  |            |  |     |   0   - exception safety
    //    |            |  |  |            |  |     |   1,2 - out_of_range
    //    |            |  |  |            |  |     |   3   - length_error
    //    |            |  |  |            |  |     |
    //    |            |  |  |            |  |     +------------+
    //    |            |  |  |            |  |                  |
    //    V            V  V  V            V  V                  V
    TEST ("ab",        0, 0, "c",         1, "cab",             0),

    TEST ("",          0, 0, "",          0, "",                0),
    TEST ("",          0, 0, "abc",       3, "abc",             0),

    TEST ("ab",        0, 2, "",          0, "",                0),
    TEST ("ab",        0, 1, "",          0, "b",               0),

    TEST ("<U0>",      0, 1, "",          0, "",                0),
    TEST ("<U0>",      0, 1, "a",         1, "a",               0),
    TEST ("<U0>",      0, 1, "<U0>@2",    2, "<U0>@2",          0),

    TEST ("ah",        0, 1, "bcdefg",    3, "bcdh",            0),
    TEST ("ah",        1, 1, "bcdefg",    3, "abcd",            0),
    TEST ("ah",        0, 2, "bcdefg",    5, "bcdef",           0),

    TEST ("abc",       0, 2, "cc",        2, "ccc",             0),
    TEST ("abc",       1, 2, "cc",        2, "acc",             0),
    TEST ("abc",       2, 1, "defgh",     1, "abd",             0),
    TEST ("abc",       2, 1, "de<U0>gh",  3, "abde<U0>",        0),
    TEST ("abc",       2, 1, "",          0, "ab",              0),

    TEST ("abc",       0, 0, "ee",        2, "eeabc",           0),
    TEST ("abc",       0, 0, "<U0>@2e<U0>", 4, "<U0>@2e<U0>abc",0),
    TEST ("abc",       2, 0, "ee",        2, "abeec",           0),
    TEST ("abc",       1, 0, "ee",        1, "aebc",            0),

    TEST ("a<U0>b<U0>@2c", 0, 3, "",      0, "<U0>@2c",         0),
    TEST ("a<U0>b<U0>@2c", 0, 3, "e<U0>", 2, "e<U0>@3c",        0),
    TEST ("a<U0>b<U0>@2c", 2, 3, "e<U0>", 1, "a<U0>ec",         0),
    TEST ("a<U0>b<U0>@2c", 2, 3, "<U0>e", 2, "a<U0>@2ec",       0),
    TEST ("<U0>ab<U0>@2c", 2, 3, "<U0>e", 2, "<U0>a<U0>ec",     0),
    TEST ("a<U0>b<U0>@2c", 0, 6, "e<U0>", 2, "e<U0>",           0),

    TEST ("x@4096",    1, 4095, "<U0>",      1, "x<U0>",        0),
    TEST ("x@4096",    0, 4095, "ab",        2, "abx",          0),
    TEST ("x@4096",    1, 4094, "ab",        1, "xax",          0),
    TEST ("x@4096",    0, 4094, "ab",        2, "abxx",         0),
    TEST ("x@4096",    1, 4093, "",          0, "xxx",          0),
    TEST ("x@4096",    1, 4092, "<U0>@2",    2, "x<U0>@2xxx",   0),

    TEST ("",          0,    0, "x@873",   540, "x@540",        0),
    TEST ("x@20",      1,   10, "x@118",   118, "x@128",        0),
    TEST ("x@128",   128,    0, "x@79",     79, "x@207",        0),
    TEST ("x@207",     0,    0, "x@127",   127, "x@334",        0),
    TEST ("x@207",   207,  207, "x@207",   127, "x@334",        0),
    TEST ("x@334",     0,  207, "x@545",   540, "x@667",        0),
    TEST ("x@539",     0,  539, "x@873",   873, "x@873",        0),
    TEST ("x@878",     5,    5, "x@540",   539, "x@1412",       0),
    TEST ("x@872",     0,    0, "x@1412", 1412, "x@2284",       0),
    TEST ("x@1411", 1411,    0, "x@2284", 2284, "x@3695",       0),
    TEST ("x@1411",  873,  538, "x@3695", 2822, "x@3695",       0),
    TEST ("x@1412",    0,    0, "x@2284", 2284, "x@3696",       0),
    TEST ("",          0,    0, "x@3696", 3696, "x@3696",       0),

    TEST ("a",         0,    1, "x@4096", 4095, "x@4095",       0),
    TEST ("x@4096",    0, 4095, "y@4096", 4095, "y@4095x",      0),
    TEST ("x@4096",    0, 2047, "x@4096", 2047, "x@4096",       0),

    TEST ("x@4096", 2047, 2048, "x@4096", 2048,  "x@4096",      0),

    TEST ("<U0>",       2,   0, "",         0, "<U0>",          1),
    TEST ("a",         10,   0, "",         0, "a",             1),
    TEST ("x@4096",  4106,   0, "",         0, "x@4096",        1),

    TEST ("a",          0,   1, "x@4096", 4095, "x@4095",       0),

    // self-referential replacement
    TEST ("a",         0,    0, 0 /* self */,    1, "aa",              0),
    TEST ("a",         0,    1, 0 /* self */,    1, "a",               0),
    TEST ("a",         1,    0, 0 /* self */,    1, "aa",              0),
    TEST ("abc",       0,    3, 0 /* self */,    2, "ab",              0),
    TEST ("abc",       1,    1, 0 /* self */,    3, "aabcc",           0),
    TEST ("a<U0>b<U0>c<U0>", 2, 3, 0, 6, "a<U0>a<U0>b<U0>c<U0>@2",     0),
    TEST ("a<U0>b<U0>c<U0>", 0, 0, 0, 4, "a<U0>b<U0>a<U0>b<U0>c<U0>",  0),
    TEST ("<U0>ab<U0>c<U0>", 6, 0, 0 /* self */, 1, "<U0>ab<U0>c<U0>@2", 0),
    TEST ("<U0>ab<U0>c<U0>", 3, 3, 0 /* self */, 2, "<U0>ab<U0>a",       0),
    TEST ("a@4096",    0,    1, 0 /* self */, 1111, "a@5206",          0),
    TEST ("b@4096",    1,    2, 0 /* self */, 2222, "b@6316",          0),
    TEST ("x@4096",    0, 4095, 0 /* self */, 4095, "x@4096",          0),
    TEST ("x@4096",    0, 4095, 0 /* self */,    1, "xx",              0),

    TEST ("ab",        0,    1, "abc",          -1, "ab",              3),
    TEST ("a@16",      0,    1, "abc",          -1, "a@16",            3),

    TEST ("last",      4,    0, "test",          4, "lasttest",        0)
};

/**************************************************************************/

// exercises:
// replace (size_type, size_type, basic_string&, size_type, size_type)
// replace (iterator, Iterator, InputIterator, InputIterator)
static const StringTestCase
iter_iter_range_test_cases [] = {

// iter_iter_range_test_cases serves a double duty
#define size_size_cstr_size_size_test_cases iter_iter_range_test_cases

#undef TEST
#define TEST(str, off, size, arg, off2, size2, res, bthrow) {   \
        __LINE__, off, size, off2, size2, -1,                   \
        str, sizeof str - 1,                                    \
        arg, sizeof arg - 1, res, sizeof res - 1, bthrow        \
    }

    //    +------------------------------------------- controlled sequence
    //    |            +------------------------------ replace() pos argument
    //    |            |   +-------------------------- replace() n1 argument
    //    |            |   |  +----------------------- sequence to be inserted
    //    |            |   |  |           +----------- replace() pos2 argument
    //    |            |   |  |           |   +------- replace() n2 argument
    //    |            |   |  |           |   |  +---- expected result sequence
    //    |            |   |  |           |   |  | +-- exception info:
    //    |            |   |  |           |   | |  |   -1    - no exceptions
    //    |            |   |  |           |   |  | |    0    - exception safety
    //    |            |   |  |           |   |  | |    1, 2 - out_of_range
    //    |            |   |  |           |   |  | |    3    - length_error
    //    |            |   |  |           |   |  | |
    //    |            |   |  |           |   |  | +-----------------+
    //    |            |   |  |           |   |  |                   |
    //    V            V   V  V           V   V  V                   V
    TEST ("",          0,  0, "",         0,  0, "",                 0),
    TEST ("",          0,  0, "",         0, -1, "",                 0),
    TEST ("",          0,  0, "",         0,  1, "",                 0),

    TEST ("",          0,  1, "",         0,  0, "",                 0),
    TEST ("",          0,  1, "",         0,  1, "",                 0),
    TEST ("",          0,  1, "",         0, -1, "",                 0),

    TEST ("",          0, -1, "",         0,  0, "",                 0),
    TEST ("",          0, -1, "",         0,  1, "",                 0),
    TEST ("",          0, -1, "",         0, -1, "",                 0),

    TEST ("1",         0,  0, "",         0,  0, "1",                0),
    TEST ("2",         0,  0, "",         0, -1, "2",                0),
    TEST ("3",         0,  0, "",         0,  1, "3",                0),

    TEST ("4",         0,  1, "",         0,  0, "",                 0),
    TEST ("5",         0,  1, "",         0,  1, "",                 0),
    TEST ("6",         0,  1, "",         0, -1, "",                 0),

    TEST ("7",         0, -1, "",         0,  0, "",                 0),
    TEST ("8",         0, -1, "",         0,  1, "",                 0),
    TEST ("9",         0, -1, "",         0, -1, "",                 0),

    TEST ("1",         0,  0, "9",        0,  0, "1",                0),
    TEST ("2",         0,  0, "8",        0, -1, "82",               0),
    TEST ("3",         0,  0, "7",        0,  1, "73",               0),

    TEST ("4",         0,  1, "6",        0,  0, "",                 0),
    TEST ("5",         0,  1, "5",        0,  1, "5",                0),
    TEST ("6",         0,  1, "4",        0, -1, "4",                0),

    TEST ("7",         0, -1, "3",        0,  0, "",                 0),
    TEST ("8",         0, -1, "2",        0,  1, "2",                0),
    TEST ("9",         0, -1, "1",        0, -1, "1",                0),

    TEST ("",          0,  0, "abc",      0,  3, "abc",              0),

    TEST ("ab",        0,  0, "c",        0, 1, "cab",               0),
    TEST ("ab",        0,  2, "",         0, 0, "",                  0),
    TEST ("ab",        0,  1, "",         0, 0, "b",                 0),

    TEST ("<U0>",      0,  1, "",         0, 0, "",                  0),
    TEST ("<U0>",      0,  1, "a",        0, 1, "a",                 0),
    TEST ("<U0>",      0,  1, "<U0>@2",   1, 1, "<U0>",              0),
    TEST ("<U0>",      0,  1, "<U0>@2",   0, 2, "<U0>@2",            0),

    TEST ("ah",        0,  1, "bcdefg",   0, 3, "bcdh",              0),
    TEST ("ah",        1,  1, "bcdefg",   0, 3, "abcd",              0),
    TEST ("ah",        0,  1, "bcdefg",   1, 3, "cdeh",              0),
    TEST ("ah",        1,  1, "bcdefg",   1, 3, "acde",              0),
    TEST ("ah",        0,  1, "bcdefg",   0, 6, "bcdefgh",           0),
    TEST ("ah",        1,  1, "bcdefg",   0, 6, "abcdefg",           0),

    TEST ("abc",       0,  2, "cc",       0, 2, "ccc",               0),
    TEST ("abc",       1,  2, "cc",       0, 2, "acc",               0),

    TEST ("abc",       0,  3, "d",        0, 1, "d",                 0),
    TEST ("abc",       0,  3, "def",      0, 3, "def",               0),
    TEST ("abc",       0,  3, "defgh",    0, 5, "defgh",             0),
    TEST ("abc",       2,  1, "defgh",    4, 1, "abh",               0),
    TEST ("abc",       2,  1, "de<U0>gh",   2, 1, "ab<U0>",          0),
    TEST ("abc",       2,  1, "",         0, 0, "ab",                0),

    TEST ("abc",       1,  1, "defgh",    1, 2, "aefc",              0),
    TEST ("abc",       0,  0, "ee",       0, 2, "eeabc",             0),
    TEST ("abc",       0,  0, "<U0>@2e<U0>",  0, 4, "<U0>@2e<U0>abc",0),
    TEST ("abc",       2,  0, "ee",       0, 2, "abeec",             0),
    TEST ("abc",       2,  1, "<U0>e<U0>@2",  0, 4, "ab<U0>e<U0>@2", 0),
    TEST ("abc",       1,  0, "ee",       0, 2, "aeebc",             0),
    TEST ("abc",       1,  0, "<U0>e<U0>@2",  0, 4, "a<U0>e<U0>@2bc", 0),

    TEST ("a<U0>b<U0>@2c", 0,  3, "",      0, 0, "<U0>@2c",           0),
    TEST ("<U0>ab<U0>@2c", 0,  3, "",      0, 0, "<U0>@2c",           0),
    TEST ("a<U0>b<U0>@2c", 0,  3, "<U0>e", 0, 2, "<U0>e<U0>@2c",      0),

    TEST ("a<U0>b<U0>@2c", 2,  3, "<U0>e",      0, 2, "a<U0>@2ec",    0),
    TEST ("a<U0>b<U0>@2c", 2,  3, "<U0>e",      1, 1, "a<U0>ec",      0),
    TEST ("<U0>ab<U0>@2c", 2,  3, "<U0>e",      0, 2, "<U0>a<U0>ec",  0),
    TEST ("<U0>ab<U0>@2c", 2,  3, "<U0>e<U0>@2", 1, 3, "<U0>ae<U0>@2c", 0),

    TEST ("a<U0>b<U0>@2c", 0,  6, "<U0>e",      0, 2, "<U0>e",          0),
    TEST ("a<U0>b<U0>@2c", 0,  6, "<U0>e",      0, 1, "<U0>",           0),

    TEST ("<U0>ab<U0>@2c",   0,  0, "<U0>e",  0, 2, "<U0>e<U0>ab<U0>@2c",   0),
    TEST ("a<U0>b<U0>c<U0>", 6,  0, "e<U0>",  0, 2, "a<U0>b<U0>c<U0>e<U0>", 0),
    TEST ("<U0>ab<U0>@2c",   5,  0, "<U0>e",  0, 2, "<U0>ab<U0>@3ec",       0),

    ///////////////////////////////////////////////////////////////////////
    // very long strings
    TEST ("a",         0,     0, "b",      0, -1, "ba",               0),
    TEST ("a@0",       0,     0, "b@0",    0, -1, "",                 0),
    TEST ("a@0",       0,     0, "b@1",    0, -1, "b",                0),
    TEST ("a@1",       0,     0, "b@0",    0, -1, "a",                0),
    TEST ("a@1",       0,     0, "b@1",    0, -1, "ba",               0),
    TEST ("a@2",       0,     0, "b@2",    0, -1, "bbaa",             0),

    TEST ("a@1000",    0,     0, "b@1000", 0, -1, "b@1000a@1000",     0),
    TEST ("a@1000",    0,     1, "b@1001", 0, -1, "b@1001a@999",      0),
    TEST ("a@1000",    0,     2, "b@1002", 0, -1, "b@1002a@998",      0),
    TEST ("a@1000",    1,   998, "b@1003", 0, -1, "ab@1003a",         0),
    TEST ("a@1000",    2,   996, "b@1004", 0, -1, "aab@1004aa",       0),
    TEST ("a@1000",  500,   250, "b@1005", 0, -1, "a@500b@1005a@250", 0),
    TEST ("a@1000",  998,     1, "b@1006", 0, -1, "a@998b@1006a",     0),
    TEST ("a@2000", 1000,    -1, "b",      0, -1, "a@1000b",          0),
    TEST ("a@2000", 1000,   999, "bb",     0, -1, "a@1000bba",        0),

    TEST ("x@4096",    0,  4095, "ab",       0, 2, "abx",             0),
    TEST ("x@4096",    1,  4094, "ab",       0, 2, "xabx",            0),
    TEST ("x@4096",    0,  4094, "ab",       0, 2, "abxx",            0),
    TEST ("x@4096",    1,  4093, "",         0, 0, "xxx",             0),
    TEST ("x@4096",    1,  4092, "<U0>@2",   0, 2, "x<U0>@2xxx",      0),

    TEST ("a",      0,     1, "x@4096",   0, 4095, "x@4095",         0),
    TEST ("x@4096", 0,  4095, "x@4096",   0, 4095, "x@4096",         0),
    TEST ("x@4096", 0,  2047, "x@4096",   0, 2047, "x@4096",         0),

    TEST ("",       0,     0, "x@334",    0,  207, "x@207",          0),
    TEST ("x@20",   1,    10, "x@118",    0,  118, "x@128",          0),
    TEST ("x@128",  0,     0, "x@129",   50,   79, "x@207",          0),
    TEST ("x@207",  207,   0, "x@127",    0,  127, "x@334",          0),
    TEST ("x@208",  128,   1, "x@207",   10,  127, "x@334",          0),
    TEST ("x@335",  334,   1, "x@208",    2,  206, "x@540",          0),
    TEST ("x@540",    0,   0, "x@336",    3,  333, "x@873",          0),
    TEST ("x@334",    0, 334, "x@873",    0,  873, "x@873",          0),
    TEST ("x@873",    0, 873, "x@541",    1,  540, "x@540",          0),
    TEST ("x@872",    0,   0, "x@1412",   0, 1412, "x@2284",         0),
    TEST ("x@1411", 1411,  0, "x@2288",   4, 2284, "x@3695",         0),
    TEST ("x@873",   540,333, "x@3695",3695,    0, "x@540",          0),
    TEST ("x@1412",  0, 1412, "x@3696",    0,3695, "x@3695",         0),

    TEST ("x@4096", 2047, 2048, "x@4096", 0, 2048,  "x@4096",        0),

    TEST ("<U0>",         2, 0, "",           0, 0, "<U0>",          1),
    TEST ("<U0>",         0, 0, "<U0>",       2, 0, "<U0>",          2),

    TEST ("a",         10, 0, "",           0, 0, "a",               1),
    TEST ("a",          0, 0, "a",         10, 0, "a",               2),

    TEST ("x@4096",  4106, 0, "",           0, 0, "x@4096",          1),
    TEST ("x@4096",     0, 0, "x@4096",  4106, 0, "x@4096",          2),

    TEST ("a",          0, 1, "x@4096", 0, 4095, "x@4095",           0),

    ///////////////////////////////////////////////////////////////////////
    // self-referential replacement
    TEST ("",          0,  0, 0,          0,  0, "",                 0),
    TEST ("",          0,  0, 0,          0,  1, "",                 0),
    TEST ("",          0,  0, 0,          0, -1, "",                 0),

    TEST ("",          0,  1, 0,          0,  0, "",                 0),
    TEST ("",          0,  1, 0,          0,  1, "",                 0),
    TEST ("",          0,  1, 0,          0, -1, "",                 0),

    TEST ("",          0, -1, 0,          0,  0, "",                 0),
    TEST ("",          0, -1, 0,          0,  1, "",                 0),
    TEST ("",          0, -1, 0,          0, -1, "",                 0),

    TEST ("1",         0,  0, 0,          0,  0, "1",                0),
    TEST ("2",         0,  0, 0,          0, -1, "22",               0),
    TEST ("3",         0,  0, 0,          0,  1, "33",               0),

    TEST ("4",         0,  1, 0,          0,  0, "",                 0),
    TEST ("5",         0,  1, 0,          0,  1, "5",                0),
    TEST ("6",         0,  1, 0,          0, -1, "6",                0),

    TEST ("7",         0, -1, 0,          0,  0, "",                 0),
    TEST ("8",         0, -1, 0,          0,  1, "8",                0),
    TEST ("9",         0, -1, 0,          0, -1, "9",                0),

    TEST ("x@4096",    0,  0, 0,          0,  0, "x@4096",           0),
    TEST ("x@4096",    0,  1, 0,          0,  1, "x@4096",           0),
    TEST ("x@4096",    0,  2, 0,          0,  2, "x@4096",           0),
    TEST ("x@4096",    0, -1, 0,          0, -1, "x@4096",           0),

    TEST ("abc",       0, 0, 0,           1, 1,  "babc",             0),
    TEST ("abc",       2, 0, 0,           0, 2,  "ababc",            0),
    TEST ("a<U0>bc<U0>@2", 0, 0, 0,       4, 2,  "<U0>@2a<U0>bc<U0>@2", 0),
    TEST ("a<U0>bc<U0>@2", 6, 0, 0,       1, 3,  "a<U0>bc<U0>@3bc",     0),
    TEST ("abcdef",    0, 0, 0,           1, 2,  "bcabcdef",            0),

    TEST ("last",      4, 0, "test",      0, 4, "lasttest",          0)
};

/**************************************************************************/

// exercises:
// replace (size_type, size_type, value_type, size_type)
// replace (iterator, iterator, size_type, value_type)
static const StringTestCase
iter_iter_size_val_test_cases [] = {

// iter_iter_size_val_test_cases serves a double duty
#define size_size_size_val_test_cases iter_iter_size_val_test_cases

#undef TEST
#define TEST(str, off, size, count, val, res, bthrow) { \
        __LINE__, off, size, -1, count, val,            \
        str, sizeof str - 1,                            \
        0, 0, res, sizeof res - 1, bthrow               \
    }

    //    +------------------------------------------ controlled sequence
    //    |            +----------------------------- replace() pos1 argument
    //    |            |  +-------------------------- replace() n1 argument
    //    |            |  |  +----------------------- replace() count argument
    //    |            |  |  |   +------------------- character to be inserted
    //    |            |  |  |   |    +-------------- expected result sequence
    //    |            |  |  |   |    |       +------ exception info
    //    |            |  |  |   |    |       |       -1   - no exceptions
    //    |            |  |  |   |    |       |        0   - exception safety
    //    |            |  |  |   |    |       |        1,2 - out_of_range
    //    |            |  |  |   |    |       |        3   - length_error
    //    |            |  |  |   |    |       |
    //    |            |  |  |   |    |       +--------+
    //    |            |  |  |   |    |                |
    //    V            V  V  V   V    V                V
    TEST ("ab",        0, 0, 1, 'c',  "cab",           0),

    TEST ("",          0, 0, 0, 'c',  "",              0),
    TEST ("",          0, 0, 3, 'c',  "ccc",           0),

    TEST ("ab",        0, 2, 0, 'c',  "",              0),
    TEST ("ab",        0, 1, 0, 'c',  "b",             0),

    TEST ("<U0>",      0, 1, 0, ' ',  "",              0),
    TEST ("<U0>",      0, 1, 1, 'a',  "a",             0),
    TEST ("<U0>",      0, 1, 1, '\0', "<U0>",          0),
    TEST ("<U0>",      0, 1, 2, '\0', "<U0>@2",        0),

    TEST ("ah",        0, 1, 1, 'c',  "ch",            0),
    TEST ("ah",        1, 1, 1, 'c',  "ac",            0),
    TEST ("ah",        0, 1, 4, 'c',  "cccch",         0),
    TEST ("ah",        1, 1, 4, 'c',  "acccc",         0),

    TEST ("abc",       0, 2, 2, 'c',  "ccc",           0),
    TEST ("abc",       1, 2, 2, 'c',  "acc",           0),

    TEST ("abc",       0, 3, 1, 'c',  "c",             0),
    TEST ("abc",       0, 3, 5, 'c',  "ccccc",         0),
    TEST ("abc",       2, 1, 1, 'c',  "abc",           0),
    TEST ("abc",       2, 1, 0, 'c',  "ab",            0),

    TEST ("abc",       1, 1, 5, 'c',  "acccccc",       0),
    TEST ("abc",       0, 0, 2, 'c',  "ccabc",         0),
    TEST ("abc",       0, 0, 3, '\0', "<U0>@3abc",     0),
    TEST ("abc",       2, 0, 2, 'e',  "abeec",         0),
    TEST ("abc",       2, 0, 3, '\0', "ab<U0>@3c",     0),
    TEST ("abc",       1, 0, 1, '\0', "a<U0>bc",       0),

    TEST ("a<U0>b<U0>@2c", 0, 3, 1, '\0', "<U0>@3c",      0),
    TEST ("a<U0>b<U0>@2c", 2, 3, 2, '\0', "a<U0>@3c",     0),
    TEST ("a<U0>b<U0>@2c", 2, 2, 1, '\0', "a<U0>@3c",     0),
    TEST ("<U0>ab<U0>@2c", 2, 3, 0, '\0', "<U0>ac",       0),
    TEST ("<U0>ab<U0>@2c", 2, 1, 2, '\0', "<U0>a<U0>@4c", 0),

    TEST ("a<U0>b<U0>@2c", 0, 6, 2, '\0', "<U0>@2",       0),

    TEST ("<U0>ab<U0>@2c", 0, 0, 2, '\0', "<U0>@3ab<U0>@2c",     0),
    TEST ("a<U0>b<U0>c<U0>", 6, 0, 2, '\0', "a<U0>b<U0>c<U0>@3", 0),
    TEST ("<U0>ab<U0>@2c", 5, 0, 1, '\0', "<U0>ab<U0>@3c",       0),

    TEST ("x@4096",    0, 4095,  2, 'a',  "aax",       0),
    TEST ("x@4096",    1, 4094,  2, 'a',  "xaax",      0),
    TEST ("x@4096",    0, 4094,  2, 'a',  "aaxx",      0),
    TEST ("x@4096",    1, 4093,  0, 'a',  "xxx",       0),
    TEST ("x@4096",    1, 4092,  1, '\0', "x<U0>xxx",  0),

    TEST ("x@127",     0,    0,  1, 'x', "x@128",      0),
    TEST ("x@200",   128,    7, 14, 'x', "x@207",      0),
    TEST ("x@331",   331,    1,  3, 'x', "x@334",      0),
    TEST ("x@539",   539,    0,  1, 'x', "x@540",      0),
    TEST ("x@539",     0,    0,873, 'x', "x@1412",     0),
    TEST ("x@873",   873,  0, 1411, 'x', "x@2284",     0),
    TEST ("x@3694",  128,    1,  2, 'x', "x@3695",     0),
    TEST ("x@539",   537,    2,  3, 'a', "x@537aaa",   0),
    TEST ("",          0,  0, 3695, 'x', "x@3695",     0),

    TEST ("a",         0,    1, 4095, 'x', "x@4095",       0),
    TEST ("x@4096",    0, 4095, 4095, 'a', "a@4095x",      0),
    TEST ("x@4096",    0, 2047, 2047, 'b', "b@2047x@2049", 0),

    TEST ("x@4096", 2047, 2048, 2048,   'x', "x@4096",     0),

    TEST ("<U0>",       2,   0,    0, ' ',  "<U0>",        1),
    TEST ("a",         10,   0,    0, ' ',  "a",           1),
    TEST ("x@4096",  4106,   0,    0, ' ',  "x@4096",      1),

    TEST ("a",          0,   1, 4095, 'x', "x@4095",       0),

    TEST ("ab",        0, 1,-1, 'c',  "ab",                3),
    TEST ("a@16",      0, 1,-1, 'c',  "a@16",              3),

    TEST ("last",      4, 0, 4, 't', "lasttttt",           0)
};

/**************************************************************************/

// invokes specializations of the member function template
// on the required iterator categories
template <class String, class Iterator>
struct ReplaceRange: RangeBase<String> {

    typedef typename String::iterator       StringIter;
    typedef typename String::value_type     StringChar;

    ReplaceRange () { }

    virtual String&
    operator() (String &str, 
                const StringTestCaseData<StringChar>& tdata) const {

        const StringTestCase &tcase = tdata.tcase_;

        // create a pair of iterators into the string object being modified
        const StringIter first1 (str.begin () + tdata.off1_);
        const StringIter last1  (first1 + tdata.ext1_);

        const String &cstr = str;

        // when (0 == tcase.arg) exercise self-referential modification
        // (i.e., replacing a range of elements with a subrange of its
        // own elements)
        const StringChar* const beg =
            (tcase.arg ? tdata.arg_ : cstr.data ()) + tdata.off2_;

        const StringChar* const end = beg + tdata.ext2_;

        const Iterator first2 (beg, beg, end);
        const Iterator last2  (end, beg, end);

        return str.replace (first1, last1, first2, last2);
    }
};


// invokes possible overloads of the member function template
// on common RandomAccessIterator types
template <class String, class Iterator>
struct ReplaceRangeOverload: RangeBase<String>
{
    typedef typename String::iterator       StringIter;
    typedef typename String::value_type     StringChar;

    ReplaceRangeOverload () { }

    virtual String&
    operator() (String &str, 
                const StringTestCaseData<StringChar>& tdata) const {

        const StringTestCase &tcase = tdata.tcase_;

        // create a pair of iterators into the string object being modified
        const StringIter first1 (str.begin () + tdata.off1_);
        const StringIter last1  (first1 + tdata.ext1_);

        bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_
            || StringIds::ConstReverseIterator == tdata.func_.iter_id_;

        const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size ();

        const std::size_t off = 
            reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_;
        const std::size_t ext = tdata.ext2_;

        if (0 == tcase.arg) {
            // exercise self-referential modification (i.e., replacing
            // a range of elements with a subrange of its own elements)

            const Iterator first2 (this->begin (str, (Iterator*)0) + off);
            const Iterator last2 (first2 + ext);

            return str.replace (first1, last1, first2, last2);
        }

        String str_arg (tdata.arg_, tdata.arglen_);

        const Iterator first2 (this->begin (str_arg, (Iterator*)0) + off);
        const Iterator last2 (first2 + ext);

        return str.replace (first1, last1, first2, last2);
    }
};

/**************************************************************************/

template <class charT, class Traits, class Allocator>
void test_replace (charT*, Traits*, Allocator*, const RangeBase<
                       std::basic_string <charT, Traits, Allocator> > &rng,
                   const StringTestCaseData<charT>                    &tdata)
{
    typedef std::basic_string <charT, Traits, Allocator> String;
    typedef typename String::iterator                    StringIter;
    typedef typename UserTraits<charT>::MemFun           TraitsFunc;

    const StringFunc     &func  = tdata.func_;
    const StringTestCase &tcase = tdata.tcase_;

    // construct the string object to be modified
    // and the (possibly unused) argument string
    /* const */ String str (tdata.str_, tdata.strlen_);
    const       String arg (tdata.arg_, tdata.arglen_);

    // save the state of the string object before the call
    // to detect wxception safety violations (changes to
    // the state of the object after an exception)
    const StringState str_state (rw_get_string_state (str));

    // create a pair of iterators into the string object being
    // modified (used only by the iterator overloads)
    const StringIter first (str.begin () + tdata.off1_);
    const StringIter last  (first + tdata.ext1_);

    // offset and extent function arguments
    const std::size_t arg_off  = std::size_t (tcase.off);
    const std::size_t arg_size = std::size_t (tcase.size);
    const std::size_t arg_off2 = std::size_t (tcase.off2);
    const std::size_t arg_size2 =
        0 <= tcase.size2 ? tcase.size2 : str.max_size () + 1;

    // string function argument
    const charT* const arg_ptr = tcase.arg ? arg.data () : str.data ();
    const String&      arg_str = tcase.arg ? arg : str;
    const charT        arg_val = make_char (char (tcase.val), (charT*)0);

    // get a pointer to the Traits::length() function call counter
    // or 0 when no such counter exists (i.e., when Traits is not
    // UserTraits)
    std::size_t* length_calls =
           Replace (size_size_cptr) == func.which_
        || Replace (iter_iter_cptr) == func.which_ ?
        rw_get_call_counters ((Traits*)0, (charT*)0) : 0;

    if (length_calls) {
        length_calls += TraitsFunc::length;
        *length_calls = 0;
    }

    rwt_free_store* const pst = rwt_get_free_store (0);
    SharedAlloc*    const pal = SharedAlloc::instance ();

    // out_of_range is only generated from size_type overloads
    // of replace() and not from the iterator equivalents of
    // the same functions
    const bool use_iters =
        StringIds::arg_iter == StringIds::arg_type (func.which_, 2);

    // iterate for`throw_count' starting at the next call to operator new,
    // forcing each call to throw an exception, until the function finally
    // succeeds (i.e, no exception is thrown)
    std::size_t throw_count;
    for (throw_count = 0; ; ++throw_count) {

        // (name of) expected and caught exception
        const char* expected = 0;
        const char* caught   = 0;

#ifndef _RWSTD_NO_EXCEPTIONS

        if (1 == tcase.bthrow && !use_iters)
            expected = exceptions [1];      // out_of_range
        else if (2 == tcase.bthrow && !use_iters)
            expected = exceptions [1];      // out_of_range
        else if (3 == tcase.bthrow)
            expected = exceptions [2];      // length_error
        else if (0 == tcase.bthrow) {
            // by default excercise the exception safety of the function
            // by iteratively inducing an exception at each call to operator
            // new or Allocator::allocate() until the call succeeds
            expected = exceptions [3];      // bad_alloc
            *pst->throw_at_calls_ [0] = pst->new_calls_ [0] + throw_count + 1;
            pal->throw_at_calls_ [pal->m_allocate] =
                pal->throw_at_calls_ [pal->m_allocate] + throw_count + 1;
        }
        else {
            // exceptions disabled for this test case
        }

#else   // if defined (_RWSTD_NO_EXCEPTIONS)

        if (tcase.bthrow)
            return;

#endif   // _RWSTD_NO_EXCEPTIONS

        // pointer to the returned reference
        const String* ret_ptr = 0;

        // start checking for memory leaks
        rw_check_leaks (str.get_allocator ());

        try {
            switch (func.which_) {
            case Replace (size_size_cptr):
                ret_ptr = &str.replace (arg_off, arg_size, arg_ptr);
                break;

            case Replace (size_size_cstr):
                ret_ptr = &str.replace (arg_off, arg_size, arg_str);
                break;

            case Replace (size_size_cptr_size):
                ret_ptr = &str.replace (arg_off, arg_size, arg_ptr, arg_size2);
                break;

            case Replace (size_size_cstr_size_size):
                ret_ptr = &str.replace (arg_off, arg_size, arg_str,
                                        arg_off2, arg_size2);
                break;

            case Replace (size_size_size_val):
                ret_ptr = &str.replace (arg_off, arg_size, arg_size2, arg_val);
                break;

            case Replace (iter_iter_cptr):
                ret_ptr = &str.replace (first, last, arg_ptr);
                break;

            case Replace (iter_iter_cstr):
                ret_ptr = &str.replace (first, last, arg_str);
                break;

            case Replace (iter_iter_cptr_size):
                ret_ptr = &str.replace (first, last, arg_ptr, arg_size2);
                break;

            case Replace (iter_iter_size_val):
                ret_ptr = &str.replace (first, last, arg_size2, arg_val);
                break;

            case Replace (iter_iter_range):
                ret_ptr = &rng (str, tdata);
                break;

            default:
                RW_ASSERT (!"logic error: unknown replace overload");
            }

            // verify that the reference returned from the function
            // refers to the modified string object (i.e., *this
            // within the function)
            const std::ptrdiff_t ret_off = ret_ptr - &str;

            // verify the returned value
            rw_assert (0 == ret_off, 0, tcase.line,
                       "line %d. %{$FUNCALL} returned invalid reference, "
                       "offset is %td", __LINE__, ret_off);

            // for convenience
            static const int cwidth = sizeof (charT);

            // verfiy that the length of the resulting string
            rw_assert (tdata.reslen_ == str.size (), 0, tcase.line,
                       "line %d. %{$FUNCALL} expected %{/*.*Gs} with "
                       "length %zu, got %{/*.*Gs} with length %zu",
                       __LINE__,
                       cwidth, int (tdata.reslen_), tdata.res_,
                       tdata.reslen_, cwidth, int (str.size ()), str.data (),
                       str.size ());

            if (tdata.reslen_ == str.size ()) {
                // if the result length matches the expected length
                // (and only then), also verify that the modified
                // string matches the expected result
                const std::size_t match =
                    rw_match (tcase.res, str.data (), str.size ());

                rw_assert (match == tdata.reslen_, 0, tcase.line,
                           "line %d. %{$FUNCALL} expected %{/*.*Gs}, "
                           "got %{/*.*Gs}, difference at offset %zu",
                           __LINE__,
                           cwidth, int (tdata.reslen_), tdata.res_,
                           cwidth, int (str.size ()),str.data (), match);
            }

            // verify that Traits::length() was used
            if (length_calls) {
                rw_assert (0 < *length_calls,
                           0, tcase.line, "line %d. %{$FUNCALL} doesn't "
                           "use traits_type::length()", __LINE__);
            }
        }

#ifndef _RWSTD_NO_EXCEPTIONS

        catch (const std::out_of_range &ex) {
            caught = exceptions [1];
            rw_assert (caught == expected, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s,%{:}"
                       "unexpectedly%{;} caught std::%s(%#s)",
                       __LINE__, 0 != expected, expected, caught, ex.what ());
        }
        catch (const std::length_error &ex) {
            caught = exceptions [2];
            rw_assert (caught == expected, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s,%{:}"
                       "unexpectedly%{;} caught std::%s(%#s)",
                       __LINE__, 0 != expected, expected, caught, ex.what ());
        }
        catch (const std::bad_alloc &ex) {
            caught = exceptions [3];
            rw_assert (0 == tcase.bthrow, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s,%{:}"
                       "unexpectedly%{;} caught std::%s(%#s)",
                       __LINE__, 0 != expected, expected, caught, ex.what ());
        }
        catch (const std::exception &ex) {
            caught = exceptions [4];
            rw_assert (0, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s,%{:}"
                       "unexpectedly%{;} caught std::%s(%#s)",
                       __LINE__, 0 != expected, expected, caught, ex.what ());
        }
        catch (...) {
            caught = exceptions [0];
            rw_assert (0, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s,%{:}"
                       "unexpectedly%{;} caught %s",
                       __LINE__, 0 != expected, expected, caught);
        }

#endif   // _RWSTD_NO_EXCEPTIONS

        // FIXME: verify the number of blocks the function call
        // is expected to allocate and detect any memory leaks
        rw_check_leaks (str.get_allocator (), tcase.line,
                        std::size_t (-1), std::size_t (-1));

        if (caught) {
            // verify that the exception didn't cause a change
            // in the state of the object
            str_state.assert_equal (rw_get_string_state (str),
                                    __LINE__, tcase.line, caught);

            if (0 == tcase.bthrow) {
                // allow this call to operator new to succeed and try
                // to make the next one to fail during the next call
                // to the same function again
                continue;
            }
        }
        else if (0 < tcase.bthrow) {
            rw_assert (caught == expected, 0, tcase.line,
                       "line %d. %{$FUNCALL} %{?}expected %s, caught %s"
                       "%{:}unexpectedly caught %s%{;}",
                       __LINE__, 0 != expected, expected, caught, caught);
        }

        break;
    }

#ifndef _RWSTD_NO_REPLACEABLE_NEW_DELETE

    // verify that if exceptions are enabled and when capacity changes
    // at least one exception is thrown
    const std::size_t expect_throws = str_state.capacity_ < str.capacity ();

#else   // if defined (_RWSTD_NO_REPLACEABLE_NEW_DELETE)

    const std::size_t expect_throws = StringIds::UserAlloc == func.alloc_id_ ?
        str_state.capacity_ < str.capacity () : 0;

#endif   // _RWSTD_NO_REPLACEABLE_NEW_DELETE

    // verify number of exceptions thrown
    // for range version the allocation may take place several times
    if (Replace (iter_iter_range) != func.which_)
        rw_assert (expect_throws == throw_count, 0, tcase.line,
                   "line %d: %{$FUNCALL}: expected exactly 1 %s exception "
                   "while changing capacity from %zu to %zu, got %zu",
                   __LINE__, exceptions [3],
                   str_state.capacity_, str.capacity (), throw_count);
    else
        rw_assert (expect_throws <= throw_count, 0, tcase.line,
                   "line %d: %{$FUNCALL}: expected at least 1 %s exception "
                   "while changing capacity from %zu to %zu, got %zu",
                   __LINE__, exceptions [3],
                   str_state.capacity_, str.capacity (), throw_count);

    // disable bad_alloc exceptions
    *pst->throw_at_calls_ [0] = 0;
    pal->throw_at_calls_ [pal->m_allocate] = 0;
}

/**************************************************************************/

template <class charT, class Traits, class Allocator>
void test_replace (charT*, Traits*, Allocator*,
                   const StringTestCaseData<charT> &tdata)
{
    typedef std::basic_string<charT, Traits, Allocator> String;

    if (tdata.func_.which_ == Replace (iter_iter_range)) {

        switch (tdata.func_.iter_id_) {

        // exercise possible overloads of the member function template
        // on common RandomAccessIterator types
#undef TEST
#define TEST(Iterator) do {                                                 \
        typedef typename String::Iterator Iter;                             \
        static const                                                        \
        ReplaceRangeOverload<String, Iter> rng;                             \
        test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);    \
    } while (0)

        case StringIds::Pointer: TEST (pointer); break;
        case StringIds::ConstPointer: TEST (const_pointer); break;
        case StringIds::Iterator: TEST (iterator); break;
        case StringIds::ConstIterator: TEST (const_iterator); break;

        case StringIds::ReverseIterator: TEST (reverse_iterator); break;
        case StringIds::ConstReverseIterator: TEST (const_reverse_iterator); 
            break;

        // exercise specializations of the member function template
        // on the required iterator categories
#undef TEST
#define TEST(Iterator) do {                                                 \
        typedef Iterator<charT> Iter;                                       \
        static const                                                        \
        ReplaceRange<String, Iter> rng;                                     \
        test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);    \
    } while (0)

        case StringIds::Input: TEST (InputIter); break;
        case StringIds::Forward: TEST (ConstFwdIter); break;
        case StringIds::Bidir: TEST (ConstBidirIter); break;
        case StringIds::Random: TEST (ConstRandomAccessIter); break;

        default:
            rw_error (0, 0, __LINE__, "bad iterator id");
        }
    }
    else {
        // exercise ordinary overloads of the member function
        static const RangeBase<String> rng;
        test_replace ((charT*)0, (Traits*)0, (Allocator*)0, rng, tdata);
    }
}

/**************************************************************************/

DEFINE_STRING_TEST_FUNCTIONS (test_replace);

int main (int argc, char** argv)
{
    static const StringTest
    tests [] = {

#undef TEST
#define TEST(sig) {                                             \
        Replace (sig), sig ## _test_cases,                      \
        sizeof sig ## _test_cases / sizeof *sig ## _test_cases, \
    }

        TEST (size_size_cptr),
        TEST (size_size_cstr),
        TEST (size_size_cptr_size),
        TEST (size_size_cstr_size_size),
        TEST (size_size_size_val),
        TEST (iter_iter_cptr),
        TEST (iter_iter_cstr),
        TEST (iter_iter_cptr_size),
        TEST (iter_iter_size_val),
        TEST (iter_iter_range)
    };

    const std::size_t test_count = sizeof tests / sizeof *tests;

    const int status =
        rw_run_string_test (argc, argv, __FILE__,
                            "lib.string.replace",
                            test_replace_func_array, tests, test_count);

    return status;
}
