Changeset 239282 in webkit


Ignore:
Timestamp:
Dec 17, 2018 12:36:31 PM (5 years ago)
Author:
dbates@webkit.org
Message:

Support concatenating StringView with other string types
https://bugs.webkit.org/show_bug.cgi?id=177566

Reviewed by Darin Adler.

Source/WTF:

Add operator+ overloads to StringOperators.h to support concatenating a StringView with
other string types (e.g. String). This lets a person write more naturally looking code:

stringView + string

Instead of:

makeString(stringView, string)

  • wtf/text/StringOperators.h:

(WTF::operator+): Added various operator+ overloads.

Tools:

Add some tests to ensure we do not regress the number of allocations needed when performing
string concatenation with string views.

  • TestWebKitAPI/Tests/WTF/StringOperators.cpp:

(TestWebKitAPI::TEST):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r239278 r239282  
     12018-12-17  Daniel Bates  <dabates@apple.com>
     2
     3        Support concatenating StringView with other string types
     4        https://bugs.webkit.org/show_bug.cgi?id=177566
     5
     6        Reviewed by Darin Adler.
     7
     8        Add operator+ overloads to StringOperators.h to support concatenating a StringView with
     9        other string types (e.g. String). This lets a person write more naturally looking code:
     10
     11        stringView + string
     12
     13        Instead of:
     14
     15        makeString(stringView, string)
     16
     17        * wtf/text/StringOperators.h:
     18        (WTF::operator+): Added various operator+ overloads.
     19
    1202018-12-17  Commit Queue  <commit-queue@webkit.org>
    221
  • trunk/Source/WTF/wtf/text/StringOperators.h

    r237099 r239282  
    113113}
    114114
     115template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
     116inline StringAppend<const char*, StringView> operator+(const char* string1, T string2)
     117{
     118    return StringAppend<const char*, StringView>(string1, string2);
     119}
     120
    115121template<typename U, typename V>
    116122inline StringAppend<const char*, StringAppend<U, V>> operator+(const char* string1, const StringAppend<U, V>& string2)
     
    127133{
    128134    return StringAppend<const UChar*, AtomicString>(string1, string2);
     135}
     136
     137template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
     138inline StringAppend<const UChar*, StringView> operator+(const UChar* string1, T string2)
     139{
     140    return StringAppend<const UChar*, StringView>(string1, string2);
    129141}
    130142
     
    145157}
    146158
     159template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
     160inline StringAppend<ASCIILiteral, StringView> operator+(const ASCIILiteral& string1, T string2)
     161{
     162    return StringAppend<ASCIILiteral, StringView>(string1, string2);
     163}
     164
    147165template<typename U, typename V>
    148166inline StringAppend<ASCIILiteral, StringAppend<U, V>> operator+(const ASCIILiteral& string1, const StringAppend<U, V>& string2)
     
    157175}
    158176
     177template<typename T, typename U, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
     178StringAppend<StringView, U> operator+(T string1, U string2)
     179{
     180    return StringAppend<StringView, U>(string1, string2);
     181}
     182
    159183template<typename U, typename V, typename W>
    160184StringAppend<StringAppend<U, V>, W> operator+(const StringAppend<U, V>& string1, W string2)
  • trunk/Tools/ChangeLog

    r239278 r239282  
     12018-12-17  Daniel Bates  <dabates@apple.com>
     2
     3        Support concatenating StringView with other string types
     4        https://bugs.webkit.org/show_bug.cgi?id=177566
     5
     6        Reviewed by Darin Adler.
     7
     8        Add some tests to ensure we do not regress the number of allocations needed when performing
     9        string concatenation with string views.
     10
     11        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
     12        (TestWebKitAPI::TEST):
     13
    1142018-12-17  Commit Queue  <commit-queue@webkit.org>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp

    r233122 r239282  
    3030static int wtfStringCopyCount;
    3131
     32#include <wtf/text/StringView.h>
    3233#include <wtf/text/WTFString.h>
    3334
     
    4849    ASCIILiteral literal { "ASCIILiteral"_s };
    4950
     51    String stringViewBacking { "StringView" };
     52    StringView stringView { stringViewBacking };
     53
    5054    EXPECT_EQ(0, wtfStringCopyCount);
    5155
     
    5458    EXPECT_N_WTF_STRING_COPIES(2, atomicString + string);
    5559    EXPECT_N_WTF_STRING_COPIES(2, atomicString + atomicString);
     60    EXPECT_N_WTF_STRING_COPIES(1, stringView + string);
     61    EXPECT_N_WTF_STRING_COPIES(1, string + stringView);
     62    EXPECT_N_WTF_STRING_COPIES(1, stringView + atomicString);
     63    EXPECT_N_WTF_STRING_COPIES(1, atomicString + stringView);
    5664
    5765    EXPECT_N_WTF_STRING_COPIES(1, "C string" + string);
     
    5967    EXPECT_N_WTF_STRING_COPIES(1, "C string" + atomicString);
    6068    EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
     69    EXPECT_N_WTF_STRING_COPIES(0, "C string" + stringView);
     70    EXPECT_N_WTF_STRING_COPIES(0, stringView + "C string");
    6171
    6272    EXPECT_N_WTF_STRING_COPIES(1, literal + string);
     
    6474    EXPECT_N_WTF_STRING_COPIES(1, literal + atomicString);
    6575    EXPECT_N_WTF_STRING_COPIES(1, atomicString + literal);
     76    EXPECT_N_WTF_STRING_COPIES(0, literal + stringView);
     77    EXPECT_N_WTF_STRING_COPIES(0, stringView + literal);
    6678
    6779    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
     
    93105    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + atomicString));
    94106
    95     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string);
    96     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string));
    97     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string));
    98     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string);
    99     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string));
    100     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string));
    101 
    102     EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString);
    103     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString));
    104     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString));
    105     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString);
    106     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString));
    107     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString));
     107    EXPECT_N_WTF_STRING_COPIES(0, literal + stringView + "C string" + stringView);
     108    EXPECT_N_WTF_STRING_COPIES(0, literal + (stringView + "C string" + stringView));
     109    EXPECT_N_WTF_STRING_COPIES(0, (literal + stringView) + ("C string" + stringView));
     110    EXPECT_N_WTF_STRING_COPIES(0, "C string" + stringView + literal + stringView);
     111    EXPECT_N_WTF_STRING_COPIES(0, "C string" + (stringView + literal + stringView));
     112    EXPECT_N_WTF_STRING_COPIES(0, ("C string" + stringView) + (literal + stringView));
     113
     114    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string + literal + stringView);
     115    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string + literal + stringView));
     116    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string) + (literal + stringView));
     117    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string + literal + stringView);
     118    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string + literal + stringView));
     119    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string) + (literal + stringView));
     120
     121    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + stringView + literal + string);
     122    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + stringView + literal + string));
     123    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + stringView) + (literal + string));
     124    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + stringView + literal + string);
     125    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + stringView + literal + string));
     126    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + stringView) + (literal + string));
     127
     128    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString + literal + stringView);
     129    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString + literal + stringView));
     130    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString) + (literal + stringView));
     131    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString + literal + stringView);
     132    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString + literal + stringView));
     133    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString) + (literal + stringView));
     134
     135    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + stringView + literal + atomicString);
     136    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + stringView + literal + atomicString));
     137    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + stringView) + (literal + atomicString));
     138    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + stringView + literal + atomicString);
     139    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + stringView + literal + atomicString));
     140    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + stringView) + (literal + atomicString));
     141
     142    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + "C string" + atomicString + literal + string);
     143    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + "C string" + atomicString + literal + string));
     144    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + ("C string" + atomicString) + (literal + string));
     145    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + literal + atomicString + literal + string);
     146    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + literal + atomicString + literal + string));
     147    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + (literal + atomicString) + (literal + string));
     148
     149    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + "C string" + string + literal + atomicString);
     150    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + "C string" + string + literal + atomicString));
     151    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + ("C string" + string) + (literal + atomicString));
     152    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + literal + string + literal + atomicString);
     153    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + literal + string + literal + atomicString));
     154    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + (literal + string) + (literal + atomicString));
    108155
    109156    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
     
    121168    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (atomicString + literal));
    122169
    123     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
    124     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
    125     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString));
    126     EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string");
    127     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string"));
    128     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
    129 
    130     EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString);
    131     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString));
    132     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString));
    133     EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal);
    134     EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal));
    135     EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal));
    136 
    137     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
    138     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
    139     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string));
    140     EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string");
    141     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
    142     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
    143 
    144     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string);
    145     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string));
    146     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string));
    147     EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal);
    148     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal));
    149     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal));
     170    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString + "C string" + stringView);
     171    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString + "C string" + stringView));
     172    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString) + ("C string" + stringView));
     173    EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string" + stringView + "C string");
     174    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string" + stringView + "C string"));
     175    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string") + (stringView + "C string"));
     176
     177    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString + literal + stringView);
     178    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString + literal + stringView));
     179    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString) + (literal + stringView));
     180    EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal + stringView + literal);
     181    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal + stringView + literal));
     182    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal) + (stringView + literal));
     183
     184    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + stringView + "C string" + atomicString);
     185    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + stringView + "C string" + atomicString));
     186    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + stringView) + ("C string" + atomicString));
     187    EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + stringView + "C string" + atomicString + "C string");
     188    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + stringView + "C string" + atomicString + "C string"));
     189    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (stringView + "C string") + (atomicString + "C string"));
     190
     191    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + stringView + literal + atomicString);
     192    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + stringView + literal + atomicString));
     193    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + stringView) + (literal + atomicString));
     194    EXPECT_N_WTF_STRING_COPIES(2, string + literal + stringView + literal + atomicString + literal);
     195    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + stringView + literal + atomicString + literal));
     196    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (stringView + literal) + (atomicString + literal));
     197
     198    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string + "C string" + stringView);
     199    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string + "C string" + stringView));
     200    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string) + ("C string" + stringView));
     201    EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string" + stringView + "C string");
     202    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string" + stringView + "C string"));
     203    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string") + (stringView + "C string"));
     204
     205    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string + literal + stringView);
     206    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string + literal + stringView));
     207    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string) + (literal + stringView));
     208    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal + stringView + literal);
     209    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal + stringView + literal));
     210    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal) + (stringView + literal));
     211
     212    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + stringView + "C string" + string);
     213    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + stringView + "C string" + string));
     214    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + stringView) + ("C string" + string));
     215    EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + stringView + "C string" + string + "C string");
     216    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + stringView + "C string" + string + "C string"));
     217    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (stringView + "C string") + (string + "C string"));
     218
     219    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + stringView + literal + string);
     220    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + stringView + literal + string));
     221    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + stringView) + (literal + string));
     222    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + stringView + literal + string + literal);
     223    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + stringView + literal + string + literal));
     224    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (stringView + literal) + (string + literal));
     225
     226    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + "C string" + atomicString + "C string" + string);
     227    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + "C string" + atomicString + "C string" + string));
     228    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + ("C string" + atomicString) + ("C string" + string));
     229    EXPECT_N_WTF_STRING_COPIES(2, stringView + "C string" + atomicString + "C string" + string + "C string");
     230    EXPECT_N_WTF_STRING_COPIES(2, stringView + ("C string" + atomicString + "C string" + string + "C string"));
     231    EXPECT_N_WTF_STRING_COPIES(2, (stringView + "C string") + (atomicString + "C string") + (string + "C string"));
     232
     233    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + literal + atomicString + literal + string);
     234    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + literal + atomicString + literal + string));
     235    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + (literal + atomicString) + (literal + string));
     236    EXPECT_N_WTF_STRING_COPIES(2, stringView + literal + atomicString + literal + string + literal);
     237    EXPECT_N_WTF_STRING_COPIES(2, stringView + (literal + atomicString + literal + string + literal));
     238    EXPECT_N_WTF_STRING_COPIES(2, (stringView + literal) + (atomicString + literal) + (string + literal));
     239
     240    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + "C string" + string + "C string" + atomicString);
     241    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + "C string" + string + "C string" + atomicString));
     242    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + ("C string" + string) + ("C string" + atomicString));
     243    EXPECT_N_WTF_STRING_COPIES(2, stringView + "C string" + string + "C string" + atomicString + "C string");
     244    EXPECT_N_WTF_STRING_COPIES(2, stringView + ("C string" + string + "C string" + atomicString + "C string"));
     245    EXPECT_N_WTF_STRING_COPIES(2, (stringView + "C string") + (string + "C string") + (atomicString + "C string"));
     246
     247    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + literal + string + literal + atomicString);
     248    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + literal + string + literal + atomicString));
     249    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + (literal + string) + (literal + atomicString));
     250    EXPECT_N_WTF_STRING_COPIES(2, stringView + literal + string + literal + atomicString + literal);
     251    EXPECT_N_WTF_STRING_COPIES(2, stringView + (literal + string + literal + atomicString + literal));
     252    EXPECT_N_WTF_STRING_COPIES(2, (stringView + literal) + (string + literal) + (atomicString + literal));
    150253
    151254#if COMPILER(MSVC)
     
    154257    EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + atomicString);
    155258    EXPECT_N_WTF_STRING_COPIES(1, atomicString + L"wide string");
     259    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + stringView);
     260    EXPECT_N_WTF_STRING_COPIES(0, stringView + L"wide string");
    156261
    157262    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + string);
     
    169274    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (atomicString + L"wide string"));
    170275
    171     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString);
    172     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString));
    173     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString));
    174     EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string");
    175     EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string"));
    176     EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string"));
    177 
    178     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string);
    179     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string));
    180     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string));
    181     EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string");
    182     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string"));
    183     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string"));
     276    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + stringView + L"wide string" + stringView);
     277    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + (stringView + L"wide string" + stringView));
     278    EXPECT_N_WTF_STRING_COPIES(0, (L"wide string" + stringView) + (L"wide string" + stringView));
     279    EXPECT_N_WTF_STRING_COPIES(0, stringView + L"wide string" + stringView + L"wide string");
     280    EXPECT_N_WTF_STRING_COPIES(0, stringView + (L"wide string" + stringView + L"wide string"));
     281    EXPECT_N_WTF_STRING_COPIES(0, (stringView + L"wide string") + (stringView + L"wide string"));
     282
     283    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString + L"wide string" + stringView);
     284    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString + L"wide string" + stringView));
     285    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString) + (L"wide string" + stringView));
     286    EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string" + stringView + L"wide string");
     287    EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string" + stringView + L"wide string"));
     288    EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string") + (stringView + L"wide string"));
     289
     290    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + stringView + L"wide string" + atomicString);
     291    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + stringView + L"wide string" + atomicString));
     292    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + stringView) + (L"wide string" + atomicString));
     293    EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + stringView + L"wide string" + atomicString + L"wide string");
     294    EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + stringView + L"wide string" + atomicString + L"wide string"));
     295    EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (stringView + L"wide string") + (atomicString + L"wide string"));
     296
     297    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string + L"wide string" + stringView);
     298    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string + L"wide string" + stringView));
     299    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string) + (L"wide string" + stringView));
     300    EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string" + stringView + L"wide string");
     301    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string" + stringView + L"wide string"));
     302    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string") + (stringView + L"wide string"));
     303
     304    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + stringView + L"wide string" + string);
     305    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + stringView + L"wide string" + string));
     306    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + stringView) + (L"wide string" + string));
     307    EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + stringView + L"wide string" + string + L"wide string");
     308    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + stringView + L"wide string" + string + L"wide string"));
     309    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (stringView + L"wide string") + (string + L"wide string"));
     310
     311    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + stringView + L"wide string" + atomicString + L"wide string" + string);
     312    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (stringView + L"wide string" + atomicString + L"wide string" + string));
     313    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + stringView) + (L"wide string" + atomicString) + (L"wide string" + string));
     314    EXPECT_N_WTF_STRING_COPIES(2, stringView + L"wide string" + atomicString + L"wide string" + string + L"wide string");
     315    EXPECT_N_WTF_STRING_COPIES(2, stringView + (L"wide string" + atomicString + L"wide string" + string + L"wide string"));
     316    EXPECT_N_WTF_STRING_COPIES(2, (stringView + L"wide string") + (atomicString + L"wide string") + (string + L"wide string"));
     317
     318    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + stringView + L"wide string" + string + L"wide string" + atomicString);
     319    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (stringView + L"wide string" + string + L"wide string" + atomicString));
     320    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + stringView) + (L"wide string" + string) + (L"wide string" + atomicString));
     321    EXPECT_N_WTF_STRING_COPIES(2, stringView + L"wide string" + string + L"wide string" + atomicString + L"wide string");
     322    EXPECT_N_WTF_STRING_COPIES(2, stringView + (L"wide string" + string + L"wide string" + atomicString + L"wide string"));
     323    EXPECT_N_WTF_STRING_COPIES(2, (stringView + L"wide string") + (string + L"wide string") + (atomicString + L"wide string"));
    184324#endif
    185325}
Note: See TracChangeset for help on using the changeset viewer.