1fe47ae56a8808c836923466e44704db3a8371593Niko Catania/* -*- c++ -*- */ 2fe47ae56a8808c836923466e44704db3a8371593Niko Catania/* 3fe47ae56a8808c836923466e44704db3a8371593Niko Catania * Copyright (C) 2009 The Android Open Source Project 4fe47ae56a8808c836923466e44704db3a8371593Niko Catania * All rights reserved. 5fe47ae56a8808c836923466e44704db3a8371593Niko Catania * 6fe47ae56a8808c836923466e44704db3a8371593Niko Catania * Redistribution and use in source and binary forms, with or without 7fe47ae56a8808c836923466e44704db3a8371593Niko Catania * modification, are permitted provided that the following conditions 8fe47ae56a8808c836923466e44704db3a8371593Niko Catania * are met: 9fe47ae56a8808c836923466e44704db3a8371593Niko Catania * * Redistributions of source code must retain the above copyright 10fe47ae56a8808c836923466e44704db3a8371593Niko Catania * notice, this list of conditions and the following disclaimer. 11fe47ae56a8808c836923466e44704db3a8371593Niko Catania * * Redistributions in binary form must reproduce the above copyright 12fe47ae56a8808c836923466e44704db3a8371593Niko Catania * notice, this list of conditions and the following disclaimer in 13fe47ae56a8808c836923466e44704db3a8371593Niko Catania * the documentation and/or other materials provided with the 14fe47ae56a8808c836923466e44704db3a8371593Niko Catania * distribution. 15fe47ae56a8808c836923466e44704db3a8371593Niko Catania * 16fe47ae56a8808c836923466e44704db3a8371593Niko Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17fe47ae56a8808c836923466e44704db3a8371593Niko Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18fe47ae56a8808c836923466e44704db3a8371593Niko Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 19fe47ae56a8808c836923466e44704db3a8371593Niko Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 20fe47ae56a8808c836923466e44704db3a8371593Niko Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21fe47ae56a8808c836923466e44704db3a8371593Niko Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22fe47ae56a8808c836923466e44704db3a8371593Niko Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 23fe47ae56a8808c836923466e44704db3a8371593Niko Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 24fe47ae56a8808c836923466e44704db3a8371593Niko Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25fe47ae56a8808c836923466e44704db3a8371593Niko Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 26fe47ae56a8808c836923466e44704db3a8371593Niko Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27fe47ae56a8808c836923466e44704db3a8371593Niko Catania * SUCH DAMAGE. 28fe47ae56a8808c836923466e44704db3a8371593Niko Catania */ 29fe47ae56a8808c836923466e44704db3a8371593Niko Catania 30fe47ae56a8808c836923466e44704db3a8371593Niko Catania#include "../include/string" 31fe47ae56a8808c836923466e44704db3a8371593Niko Catania#ifndef ANDROID_ASTL_STRING__ 32fe47ae56a8808c836923466e44704db3a8371593Niko Catania#error "Wrong header included!!" 33fe47ae56a8808c836923466e44704db3a8371593Niko Catania#endif 34fe47ae56a8808c836923466e44704db3a8371593Niko Catania#include <climits> 35fe47ae56a8808c836923466e44704db3a8371593Niko Catania#include <cstring> 366943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania#include <algorithm> 370cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania#include <list> 382a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania#include "common.h" 39fe47ae56a8808c836923466e44704db3a8371593Niko Catania 40fe47ae56a8808c836923466e44704db3a8371593Niko Catania 41fe47ae56a8808c836923466e44704db3a8371593Niko Catanianamespace android { 42fe47ae56a8808c836923466e44704db3a8371593Niko Cataniausing std::string; 43fe47ae56a8808c836923466e44704db3a8371593Niko Catania 44fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConstructorCString() 45fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 46fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str1; 47fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str1.size() == 0); 48fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str1.capacity() == 0); 49fe47ae56a8808c836923466e44704db3a8371593Niko Catania 50fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str2(""); 51fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str2.size() == 0); 52fe47ae56a8808c836923466e44704db3a8371593Niko Catania 53fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char empty_as_array[] = ""; 54fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str3(empty_as_array); 55fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str3.size() == 0); 56fe47ae56a8808c836923466e44704db3a8371593Niko Catania 57fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char literal[] = "scott mills cracks me up"; 58fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str1(literal); 59fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp(literal, str1.c_str()) == 0); 60fe47ae56a8808c836923466e44704db3a8371593Niko Catania 61fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str2(literal, 11); 62fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("scott mills", str2.c_str()) == 0); 63fe47ae56a8808c836923466e44704db3a8371593Niko Catania 64fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str3(literal, sizeof(literal)); 65fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp(literal, str3.c_str()) == 0); 66fe47ae56a8808c836923466e44704db3a8371593Niko Catania 67fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Pass the end of the string => still ok, there is \0 68fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str4(literal, sizeof(literal) + 1); 69fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str4.size() == sizeof(literal) + 1); 70fe47ae56a8808c836923466e44704db3a8371593Niko Catania 71fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str5(literal, literal + 11); 72fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("scott mills", str5.c_str()) == 0); 73fe47ae56a8808c836923466e44704db3a8371593Niko Catania 74fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char text[] = {'l','a','d','y',' ','g','a','g','a'}; 75fe47ae56a8808c836923466e44704db3a8371593Niko Catania 76fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str6(text, ARRAYSIZE(text)); 77fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str6 == "lady gaga"); 78fe47ae56a8808c836923466e44704db3a8371593Niko Catania 79fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str7(NULL); 80fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str1.size() == 0); 81fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str1.empty()); 82fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 83fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 84fe47ae56a8808c836923466e44704db3a8371593Niko Catania 85fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConstructorString() 86fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 87fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str1; 88fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str2; 89fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str1.c_str() == empty_str2.c_str()); 90fe47ae56a8808c836923466e44704db3a8371593Niko Catania 91fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty_str3(empty_str2); 92fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(empty_str3.size() == 0); 93fe47ae56a8808c836923466e44704db3a8371593Niko Catania 94fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char string_with_nulls[] = "contains 2 \0 bytes \0."; 95fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str1 (string_with_nulls, 21); 96fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1.size() == 21); 97fe47ae56a8808c836923466e44704db3a8371593Niko Catania 98fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str2 (str1); 99fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1.size() == 21); 100fe47ae56a8808c836923466e44704db3a8371593Niko Catania 101fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string str3("scott mills cracks me up"); 102fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str4(str3, 12); 103fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("cracks me up", str4.c_str()) == 0); 104fe47ae56a8808c836923466e44704db3a8371593Niko Catania 105fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str5(str3, 12, 6); 106fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("cracks", str5.c_str()) == 0); 107fe47ae56a8808c836923466e44704db3a8371593Niko Catania 108fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str6(str3, 23); 109fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("p", str6.c_str()) == 0); 110fe47ae56a8808c836923466e44704db3a8371593Niko Catania 111fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str7(str3, 24); 112fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("", str7.c_str()) == 0); 113fe47ae56a8808c836923466e44704db3a8371593Niko Catania 114fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str8(str3, 23, 1); 115fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("p", str8.c_str()) == 0); 116fe47ae56a8808c836923466e44704db3a8371593Niko Catania 117fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str9(str3, 24, 1); 118fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("", str9.c_str()) == 0); 119fe47ae56a8808c836923466e44704db3a8371593Niko Catania 120fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 121fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 122fe47ae56a8808c836923466e44704db3a8371593Niko Catania 123fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConstructorPointers() 124fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 125fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string empty; 126fe47ae56a8808c836923466e44704db3a8371593Niko Catania char data[] = "a 16 char string"; 127fe47ae56a8808c836923466e44704db3a8371593Niko Catania 128fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01(data, data + 0); 129fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.c_str() == empty.c_str()); 130fe47ae56a8808c836923466e44704db3a8371593Niko Catania 131fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02(data, data + 1); 132fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "a"); 133fe47ae56a8808c836923466e44704db3a8371593Niko Catania 134fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03(data + 2, data + 16); 135fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "16 char string"); 136fe47ae56a8808c836923466e44704db3a8371593Niko Catania 137fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04(data + 15, data + 16); 138fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "g"); 139fe47ae56a8808c836923466e44704db3a8371593Niko Catania 140fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str05(data + 16, data + 16); 141fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str05 == ""); 142fe47ae56a8808c836923466e44704db3a8371593Niko Catania 143fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 144fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 145fe47ae56a8808c836923466e44704db3a8371593Niko Catania 146fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConstructorRepeatChar() 147fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 148fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01(0, 'c'); 149fe47ae56a8808c836923466e44704db3a8371593Niko Catania 150fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.empty()); 151fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.size() == 0); 152fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.capacity() == 0); 153fe47ae56a8808c836923466e44704db3a8371593Niko Catania 154fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02(10, 'c'); 155fe47ae56a8808c836923466e44704db3a8371593Niko Catania 156fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!str02.empty()); 157fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02.size() == 10); 158fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02.capacity() == 10); 159fe47ae56a8808c836923466e44704db3a8371593Niko Catania 16060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania for (size_t i = 0; i < 100; ++i) 161fe47ae56a8808c836923466e44704db3a8371593Niko Catania { 162fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03(i, 'x'); 163fe47ae56a8808c836923466e44704db3a8371593Niko Catania 1647618d7b9a011b1158ef868d6ae3ead242ddaccacNicolas Catania EXPECT_TRUE(str03[i] == '\0'); 1657618d7b9a011b1158ef868d6ae3ead242ddaccacNicolas Catania EXPECT_TRUE(str03.length() == i); 1667618d7b9a011b1158ef868d6ae3ead242ddaccacNicolas Catania 167fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(i + 20); 1687618d7b9a011b1158ef868d6ae3ead242ddaccacNicolas Catania EXPECT_TRUE(str03.capacity() == i + 20); 1697618d7b9a011b1158ef868d6ae3ead242ddaccacNicolas Catania EXPECT_TRUE(str03.length() == i); 170fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03[i] == '\0'); 171fe47ae56a8808c836923466e44704db3a8371593Niko Catania } 172fe47ae56a8808c836923466e44704db3a8371593Niko Catania 173fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 174fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 175fe47ae56a8808c836923466e44704db3a8371593Niko Catania 176fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConstructorInvalidValues() 177fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 178fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string empty; 179fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string str01("a 16 char string"); 180fe47ae56a8808c836923466e44704db3a8371593Niko Catania 181fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.size() == 16); 182fe47ae56a8808c836923466e44704db3a8371593Niko Catania 183fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02(str01, 17, 1); // invalid index 184fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02.c_str() == empty.c_str()); 185fe47ae56a8808c836923466e44704db3a8371593Niko Catania 186fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03(str01, 17, 0); // invalid index 187fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03.c_str() == empty.c_str()); 188fe47ae56a8808c836923466e44704db3a8371593Niko Catania 189fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04(str01, -1, 0); // invalid index 190fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04.c_str() == empty.c_str()); 191fe47ae56a8808c836923466e44704db3a8371593Niko Catania 19240d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string str05(str01, 0, 17); // invalid length -> clamped 19340d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(str05 == str01); 194fe47ae56a8808c836923466e44704db3a8371593Niko Catania 195fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str06(str01, 17); // invalid index 196fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06.c_str() == empty.c_str()); 197fe47ae56a8808c836923466e44704db3a8371593Niko Catania 198fe47ae56a8808c836923466e44704db3a8371593Niko Catania char end[] = "a string"; 199fe47ae56a8808c836923466e44704db3a8371593Niko Catania char *begin = end + 1; // begin after end. 200fe47ae56a8808c836923466e44704db3a8371593Niko Catania 201fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str07(begin, end); 202fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str07.c_str() == empty.c_str()); 203fe47ae56a8808c836923466e44704db3a8371593Niko Catania 204fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 205fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 206fe47ae56a8808c836923466e44704db3a8371593Niko Catania 207fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testSize() 208fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 209fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01; 210fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.size() == 0); 211fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.length() == 0); 212fe47ae56a8808c836923466e44704db3a8371593Niko Catania 213fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01 += "a string."; 214fe47ae56a8808c836923466e44704db3a8371593Niko Catania 215fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.size() == 9); 216fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.length() == 9); 217fe47ae56a8808c836923466e44704db3a8371593Niko Catania 218fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 219fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 220fe47ae56a8808c836923466e44704db3a8371593Niko Catania 221fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testCString() 222fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 223fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01; 224fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02; 225fe47ae56a8808c836923466e44704db3a8371593Niko Catania 226fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Should point to the same empty string. 227fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.c_str() == str02.c_str()); 228fe47ae56a8808c836923466e44704db3a8371593Niko Catania // c_str() == data() 229fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.c_str() == str01.data()); 230fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.empty()); 231fe47ae56a8808c836923466e44704db3a8371593Niko Catania 232fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char text[] = "a string"; 233fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01 += text; 234fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp(str01.c_str(), text) == 0); 235fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp(str01.data(), text) == 0); 236fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!str01.empty()); 237fe47ae56a8808c836923466e44704db3a8371593Niko Catania 238fe47ae56a8808c836923466e44704db3a8371593Niko Catania // after a clear, points back to the original empty string. 239fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.clear(); 240fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.c_str() == str02.c_str()); 241fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.empty()); 242fe47ae56a8808c836923466e44704db3a8371593Niko Catania 243fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 244fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 245fe47ae56a8808c836923466e44704db3a8371593Niko Catania 246fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testReserve() 247fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 248fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01; 249fe47ae56a8808c836923466e44704db3a8371593Niko Catania size_t capacity = str01.capacity(); 250fe47ae56a8808c836923466e44704db3a8371593Niko Catania 251fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(0 == capacity); 252fe47ae56a8808c836923466e44704db3a8371593Niko Catania 253fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.reserve(5); 254fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(5 == str01.capacity()); 255fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.reserve(0); 256fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(0 == str01.capacity()); 257fe47ae56a8808c836923466e44704db3a8371593Niko Catania 258fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02("7 chars"); 259fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(7 == str02.capacity()); 260fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(7 == str02.size()); 261fe47ae56a8808c836923466e44704db3a8371593Niko Catania 262fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.reserve(10); 263fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "7 chars"); 264fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(10 == str02.capacity()); 265fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(7 == str02.size()); 266fe47ae56a8808c836923466e44704db3a8371593Niko Catania 267fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.reserve(6); // no effect 268fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "7 chars"); 269fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(10 == str02.capacity()); 270fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(7 == str02.size()); 271fe47ae56a8808c836923466e44704db3a8371593Niko Catania 272fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03; 273fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string str04; 274fe47ae56a8808c836923466e44704db3a8371593Niko Catania 275fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Both point to kEmptyString. 276fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03.c_str() == str04.c_str()); 277fe47ae56a8808c836923466e44704db3a8371593Niko Catania 278fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(); 279fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(0 == str03.capacity()); 280fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03.c_str() == str04.c_str()); 281fe47ae56a8808c836923466e44704db3a8371593Niko Catania 282fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(10); 283fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(10 == str03.capacity()); 284fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Not pointing at the empty string anymore. 285fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03.c_str() != str04.c_str()); 286fe47ae56a8808c836923466e44704db3a8371593Niko Catania 287fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(); 288fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(0 == str03.capacity()); 289fe47ae56a8808c836923466e44704db3a8371593Niko Catania // c_str() points back to the empty string. 290fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03.c_str() == str04.c_str()); 291fe47ae56a8808c836923466e44704db3a8371593Niko Catania 292fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(10); 293fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.append("7 chars"); 294fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "7 chars"); 295fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.reserve(); // shrink to fit. 296fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(7 == str03.capacity()); 297fe47ae56a8808c836923466e44704db3a8371593Niko Catania 298fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str05 = "twelve chars"; 299fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str06 = str05; 300fe47ae56a8808c836923466e44704db3a8371593Niko Catania str05.reserve(1); 301fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str05.capacity() == 12); 302fe47ae56a8808c836923466e44704db3a8371593Niko Catania 303fe47ae56a8808c836923466e44704db3a8371593Niko Catania 304fe47ae56a8808c836923466e44704db3a8371593Niko Catania for (size_t i = 1; i <= 100; i *= 2) 305fe47ae56a8808c836923466e44704db3a8371593Niko Catania { 306fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str(i, 'x'); 307fe47ae56a8808c836923466e44704db3a8371593Niko Catania str.reserve(3 * i); 308fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str.capacity() == 3 * i); 309fe47ae56a8808c836923466e44704db3a8371593Niko Catania 310fe47ae56a8808c836923466e44704db3a8371593Niko Catania str.reserve(2 * i); 311fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str.capacity() == 2 * i); 312fe47ae56a8808c836923466e44704db3a8371593Niko Catania 313fe47ae56a8808c836923466e44704db3a8371593Niko Catania str.reserve(); 314fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str.capacity() == i); 315fe47ae56a8808c836923466e44704db3a8371593Niko Catania } 316fe47ae56a8808c836923466e44704db3a8371593Niko Catania 317fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Check overflow. 318fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str07; 319fe47ae56a8808c836923466e44704db3a8371593Niko Catania 320fe47ae56a8808c836923466e44704db3a8371593Niko Catania str07.reserve(10); 321fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str07.capacity() == 10); 322fe47ae56a8808c836923466e44704db3a8371593Niko Catania 3232a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania str07.reserve(kMaxSizeT); 324fe47ae56a8808c836923466e44704db3a8371593Niko Catania 325fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str07.capacity() == 10); 326fe47ae56a8808c836923466e44704db3a8371593Niko Catania 327fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 328fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 329fe47ae56a8808c836923466e44704db3a8371593Niko Catania 330fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testAppend() 331fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 332fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str1; 333fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char *text = "You spin my head right round."; 334fe47ae56a8808c836923466e44704db3a8371593Niko Catania 335fe47ae56a8808c836923466e44704db3a8371593Niko Catania str1.append(text); 336fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1 == text); 337fe47ae56a8808c836923466e44704db3a8371593Niko Catania 338fe47ae56a8808c836923466e44704db3a8371593Niko Catania str1.append(" Flo Rida."); 339fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1 == "You spin my head right round. Flo Rida."); 340fe47ae56a8808c836923466e44704db3a8371593Niko Catania 341fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str2; 342fe47ae56a8808c836923466e44704db3a8371593Niko Catania str2.append(str1); 343fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str2 == "You spin my head right round. Flo Rida."); 344fe47ae56a8808c836923466e44704db3a8371593Niko Catania 345fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str3("You spin "); 346fe47ae56a8808c836923466e44704db3a8371593Niko Catania str3.append("my head right round."); 347fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str3 == "You spin my head right round."); 348fe47ae56a8808c836923466e44704db3a8371593Niko Catania 349fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str4("You spin "); 350fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str5("my head right round."); 351fe47ae56a8808c836923466e44704db3a8371593Niko Catania str4.append(str5); 352fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str4 == "You spin my head right round."); 353fe47ae56a8808c836923466e44704db3a8371593Niko Catania 354fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str6(""); 355fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str7(""); 356fe47ae56a8808c836923466e44704db3a8371593Niko Catania str6.append(str7); 357fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str6 == ""); 358fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str6.empty()); 359fe47ae56a8808c836923466e44704db3a8371593Niko Catania 360fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str8; 361fe47ae56a8808c836923466e44704db3a8371593Niko Catania str8.append("a"); 362fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str8 == "a"); 363fe47ae56a8808c836923466e44704db3a8371593Niko Catania 364fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char more_text[] = {'l','a','d','y',' ','g','a','g','a'}; 365fe47ae56a8808c836923466e44704db3a8371593Niko Catania 366fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str9; 367fe47ae56a8808c836923466e44704db3a8371593Niko Catania str9.append(more_text, ARRAYSIZE(more_text)); 368fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str9 == string(more_text, ARRAYSIZE(more_text))); 369fe47ae56a8808c836923466e44704db3a8371593Niko Catania 370fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str10; 371fe47ae56a8808c836923466e44704db3a8371593Niko Catania str10.append("", 0); 372fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10.size() == 0 ); 373fe47ae56a8808c836923466e44704db3a8371593Niko Catania str10.append(text, strlen(text)); 374fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10 == "You spin my head right round."); 375fe47ae56a8808c836923466e44704db3a8371593Niko Catania 376fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str11; 377fe47ae56a8808c836923466e44704db3a8371593Niko Catania str11.append("You spin my head right round.", 5, 11); 378fe47ae56a8808c836923466e44704db3a8371593Niko Catania 379fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str11 == "pin my head"); 380fe47ae56a8808c836923466e44704db3a8371593Niko Catania 381fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Append overflow 382fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str12("original"); 383fe47ae56a8808c836923466e44704db3a8371593Niko Catania char dummy[] = "unused"; 384fe47ae56a8808c836923466e44704db3a8371593Niko Catania // We lie about the size but that is ok. Since the lenght of the new string 3852a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania // is going to be kMaxSizeT, the call will have not effect (there is no 386fe47ae56a8808c836923466e44704db3a8371593Niko Catania // space for the trailing '\0'). 3872a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania str12.append(dummy, kMaxSizeT); 388fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str12 == "original"); 389fe47ae56a8808c836923466e44704db3a8371593Niko Catania 3900cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania // Append iterator. 3910cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania { 3920cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str1("once upon "); 3930cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania const string str2("a time"); 3940cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania 3950cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania str1.append(str2.begin(), str2.end()); 3960cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1.size() == 16); 3970cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1 == "once upon a time"); 3980cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania } 3990cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania { 4000cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str1("once upon "); 4010cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str2("a time"); 4020cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania 4030cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania str1.append(str2.begin(), str2.begin()); 4040cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1.size() == 10); 4050cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1 == "once upon "); 4060cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania } 4070cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania { 4080cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str1; 4090cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str2("hello"); 4100cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania 4110cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania str1.append(str2.begin(), str2.end()); 4120cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1.size() == 5); 4130cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1 == "hello"); 4140cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania } 4150cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania { 4160cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania string str1("hello "); 4170cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania std::list<char> list1; 4180cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania list1.push_back('w'); 4190cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania list1.push_back('o'); 4200cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania list1.push_back('r'); 4210cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania list1.push_back('l'); 4220cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania list1.push_back('d'); 4230cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania str1.append(list1.begin(), list1.end()); 4240cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania EXPECT_TRUE(str1 == "hello world"); 4250cc3ee31c3cddd2bb5322398d17c388975e96d64Nicolas Catania } 426fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 427fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 428fe47ae56a8808c836923466e44704db3a8371593Niko Catania 429fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testAppendOperator() 430fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 431fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str1; 432fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char *text = "You spin my head right round."; 433fe47ae56a8808c836923466e44704db3a8371593Niko Catania 434fe47ae56a8808c836923466e44704db3a8371593Niko Catania str1 += text; 435fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1 == text); 436fe47ae56a8808c836923466e44704db3a8371593Niko Catania 437fe47ae56a8808c836923466e44704db3a8371593Niko Catania str1 += " Flo Rida."; 438fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str1 == "You spin my head right round. Flo Rida."); 439fe47ae56a8808c836923466e44704db3a8371593Niko Catania 440fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str2; 441fe47ae56a8808c836923466e44704db3a8371593Niko Catania str2 += str1; 442fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str2 == "You spin my head right round. Flo Rida."); 443fe47ae56a8808c836923466e44704db3a8371593Niko Catania 444fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str3("You spin "); 445fe47ae56a8808c836923466e44704db3a8371593Niko Catania str3 += "my head right round."; 446fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str3 == "You spin my head right round."); 447fe47ae56a8808c836923466e44704db3a8371593Niko Catania 448fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str4("You spin "); 449fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str5("my head right round."); 450fe47ae56a8808c836923466e44704db3a8371593Niko Catania str4 += str5; 451fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str4 == "You spin my head right round."); 452fe47ae56a8808c836923466e44704db3a8371593Niko Catania 453fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str6(""); 454fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str7(""); 455fe47ae56a8808c836923466e44704db3a8371593Niko Catania str6 += str7; 456fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str6 == ""); 457fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str6.empty()); 458fe47ae56a8808c836923466e44704db3a8371593Niko Catania 459fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str8; 460fe47ae56a8808c836923466e44704db3a8371593Niko Catania str8 += "a"; 461fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str8 == "a"); 462fe47ae56a8808c836923466e44704db3a8371593Niko Catania 463fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char more_text[] = {'l','a','d','y',' ','g','a','g','a'}; 464fe47ae56a8808c836923466e44704db3a8371593Niko Catania 465fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str9; 466fe47ae56a8808c836923466e44704db3a8371593Niko Catania for (size_t i = 0; i < ARRAYSIZE(more_text); ++i) 467fe47ae56a8808c836923466e44704db3a8371593Niko Catania { 468fe47ae56a8808c836923466e44704db3a8371593Niko Catania str9 += more_text[i]; 469fe47ae56a8808c836923466e44704db3a8371593Niko Catania } 470fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str9 == "lady gaga"); 471fe47ae56a8808c836923466e44704db3a8371593Niko Catania 472fe47ae56a8808c836923466e44704db3a8371593Niko Catania str9 += (const char *)NULL; 473fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str9 == "lady gaga"); 474fe47ae56a8808c836923466e44704db3a8371593Niko Catania 475fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str10(more_text, ARRAYSIZE(more_text)); 476fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10 == "lady gaga"); 477fe47ae56a8808c836923466e44704db3a8371593Niko Catania str10 += '\0'; 478fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10 == "lady gaga"); 479fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10 == string("lady gaga\0", 10)); 480fe47ae56a8808c836923466e44704db3a8371593Niko Catania str10 += 'x'; 481fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10 == string("lady gaga\0x", 11)); 482fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str10[11] == '\0'); 483fe47ae56a8808c836923466e44704db3a8371593Niko Catania 484fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 485fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 486fe47ae56a8808c836923466e44704db3a8371593Niko Catania 487fe47ae56a8808c836923466e44704db3a8371593Niko Catania 488fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testCompare() 489fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 490fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01("bell helmet"); 491fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02("bell moto"); 492fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03("bell"); 493fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04("bell pants"); 494fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str05; 495fe47ae56a8808c836923466e44704db3a8371593Niko Catania 496fe47ae56a8808c836923466e44704db3a8371593Niko Catania str05 = str01; 497fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Compare with self. 498fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == str01); 499fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!(str01 != str01)); 500fe47ae56a8808c836923466e44704db3a8371593Niko Catania 501fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == str05); 502fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str05 == str01); 503fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!(str01 != str05)); 504fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!(str05 != str01)); 505fe47ae56a8808c836923466e44704db3a8371593Niko Catania 506fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 != str02); 507fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 != str03); 508fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 != str04); 509fe47ae56a8808c836923466e44704db3a8371593Niko Catania 510fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Compare with literals. 511fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "bell helmet"); 512fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!(str01 != "bell helmet")); 513fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE("bell helmet" == str01); 514fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(!("bell helmet" != str01)); 515fe47ae56a8808c836923466e44704db3a8371593Niko Catania 516fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Compare with char array. 517fe47ae56a8808c836923466e44704db3a8371593Niko Catania char array[] = { 'a', ' ', 'b', 'u', 'g', '\0'}; 518fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01 = "a bug"; 519fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(array == str01); 520fe47ae56a8808c836923466e44704db3a8371593Niko Catania 521fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(strcmp("a bug", "a bugg") < 0); 522fe47ae56a8808c836923466e44704db3a8371593Niko Catania 523fe47ae56a8808c836923466e44704db3a8371593Niko Catania char array2[] = { 'a', 'b', 'u', 'g', 'g' }; 524fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.compare(array2) < 0); 525fe47ae56a8808c836923466e44704db3a8371593Niko Catania 526fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str06; 527fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06 != NULL); 5286309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania { 5296309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania string str_long("this is"); 5306309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania string str_short("it"); 5316309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_TRUE(str_long > str_short); 5326309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_TRUE(str_long >= str_short); 5336309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_FALSE(str_long < str_short); 5346309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_FALSE(str_long <= str_short); 5356309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania } 5366309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania { 5376309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania string str_lhs("this is"); 5386309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania string str_rhs("this is"); 5396309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_FALSE(str_lhs > str_rhs); 5406309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_TRUE(str_lhs >= str_rhs); 5416309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_FALSE(str_lhs < str_rhs); 5426309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania EXPECT_TRUE(str_lhs <= str_rhs); 5436309a85f3be27b49451e37d0b31446e0cf727f23Nicolas Catania } 544fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 545fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 546fe47ae56a8808c836923466e44704db3a8371593Niko Catania 547fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testSwap() 548fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 549fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01; 550fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02("test"); 551fe47ae56a8808c836923466e44704db3a8371593Niko Catania 552fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.swap(str02); 553fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02.empty()); 554fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "test"); 555fe47ae56a8808c836923466e44704db3a8371593Niko Catania 556fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03("altima"); 557fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04("versa"); 558fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.swap(str04); 559fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "versa"); 560fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "altima"); 561fe47ae56a8808c836923466e44704db3a8371593Niko Catania 562fe47ae56a8808c836923466e44704db3a8371593Niko Catania { 563fe47ae56a8808c836923466e44704db3a8371593Niko Catania string empty; 564fe47ae56a8808c836923466e44704db3a8371593Niko Catania // swap can be used to clean strings 565fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.swap(empty); 566fe47ae56a8808c836923466e44704db3a8371593Niko Catania } 567fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04.empty()); 568fe47ae56a8808c836923466e44704db3a8371593Niko Catania 569fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 570fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 571fe47ae56a8808c836923466e44704db3a8371593Niko Catania 572fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testAccessor() 573fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 574fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01 = "earmarks"; 575fe47ae56a8808c836923466e44704db3a8371593Niko Catania 576fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01[0] == 'e'); 577fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01[7] == 's'); 578fe47ae56a8808c836923466e44704db3a8371593Niko Catania 579fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01[0] = 'E'; 580fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01[7] = 'S'; 581fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "EarmarkS"); 582fe47ae56a8808c836923466e44704db3a8371593Niko Catania 583fe47ae56a8808c836923466e44704db3a8371593Niko Catania for (int i = 0; i < 100; ++i) 584fe47ae56a8808c836923466e44704db3a8371593Niko Catania { 585fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02(i, 'x'); 586fe47ae56a8808c836923466e44704db3a8371593Niko Catania 587fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.reserve(20); 588fe47ae56a8808c836923466e44704db3a8371593Niko Catania 589fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02[i] == '\0'); 590fe47ae56a8808c836923466e44704db3a8371593Niko Catania 591fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string str03(str02); 592fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03[i] == '\0'); 593fe47ae56a8808c836923466e44704db3a8371593Niko Catania } 594fe47ae56a8808c836923466e44704db3a8371593Niko Catania 595fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str05; 596fe47ae56a8808c836923466e44704db3a8371593Niko Catania str05.reserve(100); 597fe47ae56a8808c836923466e44704db3a8371593Niko Catania str05[99] = 'a'; 598fe47ae56a8808c836923466e44704db3a8371593Niko Catania 59974a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania // 'at' 60074a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania EXPECT_TRUE(str01.at(0) == 'E'); 60174a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania EXPECT_TRUE(str01.at(7) == 'S'); 60274a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania EXPECT_TRUE(str01.at(8) == 'X'); // 'X' is the dummy value returned. 60374a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania 60474a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania str01.at(1) = 'A'; 60574a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania str01.at(6) = 'K'; 60674a6fdea77d52a17be4bc38831fe02a31cefbf34Nicolas Catania EXPECT_TRUE(str01 == "EArmarKS"); 607fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 608fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 609fe47ae56a8808c836923466e44704db3a8371593Niko Catania 610fe47ae56a8808c836923466e44704db3a8371593Niko Catania 611fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testAssignment() 612fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 613fe47ae56a8808c836923466e44704db3a8371593Niko Catania const char *literal = "Need to buy a full face helmet for Lilie."; 614fe47ae56a8808c836923466e44704db3a8371593Niko Catania const string str01 = literal; 615fe47ae56a8808c836923466e44704db3a8371593Niko Catania 616fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.length() == strlen(literal)); 617fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.size() == strlen(literal)); 618fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.capacity() == strlen(literal)); 619fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == literal); 620fe47ae56a8808c836923466e44704db3a8371593Niko Catania 621fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02; 622fe47ae56a8808c836923466e44704db3a8371593Niko Catania 623fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 8, 33); 624fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "buy a full face helmet for Lilie."); 625fe47ae56a8808c836923466e44704db3a8371593Niko Catania 626fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 8, 0); 627fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == ""); 628fe47ae56a8808c836923466e44704db3a8371593Niko Catania 629fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 0, 7); 630fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "Need to"); 631fe47ae56a8808c836923466e44704db3a8371593Niko Catania 632fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign("unchanged"); 633fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 35, 1000); 634fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "unchanged"); 635fe47ae56a8808c836923466e44704db3a8371593Niko Catania 636fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 35, 6); 637fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "Lilie."); 638fe47ae56a8808c836923466e44704db3a8371593Niko Catania 639fe47ae56a8808c836923466e44704db3a8371593Niko Catania 640fe47ae56a8808c836923466e44704db3a8371593Niko Catania str02.assign(str01, 35, 5); 641fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str02 == "Lilie"); 642fe47ae56a8808c836923466e44704db3a8371593Niko Catania 643fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03; 644fe47ae56a8808c836923466e44704db3a8371593Niko Catania 645fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03.assign(literal); 646fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "Need to buy a full face helmet for Lilie."); 647fe47ae56a8808c836923466e44704db3a8371593Niko Catania 648fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04; 649fe47ae56a8808c836923466e44704db3a8371593Niko Catania 650fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(str03.c_str()); 651fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "Need to buy a full face helmet for Lilie."); 652fe47ae56a8808c836923466e44704db3a8371593Niko Catania 653fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(str03.c_str() + 5, 10); 654fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "to buy a f"); 655fe47ae56a8808c836923466e44704db3a8371593Niko Catania 656fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign("noop"); 657fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(NULL); 658fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "noop"); 659fe47ae56a8808c836923466e44704db3a8371593Niko Catania 660fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(str01, str01.size() - 1, 1); 661fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "."); 662fe47ae56a8808c836923466e44704db3a8371593Niko Catania 663fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign("unchanged"); 664fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(str01, str01.size(), 1); 665fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(NULL, 4, 1); 666fe47ae56a8808c836923466e44704db3a8371593Niko Catania str04.assign(NULL, 4); 667fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str04 == "unchanged"); 668fe47ae56a8808c836923466e44704db3a8371593Niko Catania 669fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 670fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 671fe47ae56a8808c836923466e44704db3a8371593Niko Catania 6726943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Cataniabool testCopy() 6736943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania{ 6746943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania string data[] = {"one", "two", "three", "four", "five", "six"}; 6756943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania std::copy(data + 2, data + 5, data); 6766943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[0] == "three"); 6776943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[1] == "four"); 6786943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[2] == "five"); 6796943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[3] == "four"); 6806943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[4] == "five"); 6816943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania EXPECT_TRUE(data[5] == "six"); 6826943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania return true; 6836943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania} 6846943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania 685fe47ae56a8808c836923466e44704db3a8371593Niko Catania 686fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testConcat() 687fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 688fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01("The full"); 689fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str02(" sentence."); 690fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str03; 691fe47ae56a8808c836923466e44704db3a8371593Niko Catania 692fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str01 + str02; 693fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "The full sentence."); 694fe47ae56a8808c836923466e44704db3a8371593Niko Catania 695fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str02 + str01; 696fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == " sentence.The full"); 697fe47ae56a8808c836923466e44704db3a8371593Niko Catania 698fe47ae56a8808c836923466e44704db3a8371593Niko Catania 699fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str01 + " sentence."; 700fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "The full sentence."); 701fe47ae56a8808c836923466e44704db3a8371593Niko Catania 702fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = "The full" + str02; 703fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "The full sentence."); 704fe47ae56a8808c836923466e44704db3a8371593Niko Catania 705fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'l' + str02; 706fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'l' + str03; 707fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'u' + str03; 708fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'f' + str03; 709fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = ' ' + str03; 710fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'e' + str03; 711fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'h' + str03; 712fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = 'T' + str03; 713fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "The full sentence."); 714fe47ae56a8808c836923466e44704db3a8371593Niko Catania 715fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = "The full "; 716fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 's'; 717fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'e'; 718fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'n'; 719fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 't'; 720fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'e'; 721fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'n'; 722fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'c'; 723fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + 'e'; 724fe47ae56a8808c836923466e44704db3a8371593Niko Catania str03 = str03 + '.'; 725fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str03 == "The full sentence."); 726fe47ae56a8808c836923466e44704db3a8371593Niko Catania 727fe47ae56a8808c836923466e44704db3a8371593Niko Catania // Check the new string buffer is not the same as the original one. 728fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str04("left and"); 729fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str05(" right"); 730fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str06(str04 + str05); 731fe47ae56a8808c836923466e44704db3a8371593Niko Catania 732fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06 == "left and right"); 733fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06.c_str() != str04.c_str()); 734fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06.c_str() != str05.c_str()); 735fe47ae56a8808c836923466e44704db3a8371593Niko Catania 736fe47ae56a8808c836923466e44704db3a8371593Niko Catania str06 = str04 + str05; 737fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06 == "left and right"); 738fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06.c_str() != str04.c_str()); 739fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str06.c_str() != str05.c_str()); 740fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 741fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 742fe47ae56a8808c836923466e44704db3a8371593Niko Catania 743fe47ae56a8808c836923466e44704db3a8371593Niko Cataniabool testPushBack() 744fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 745fe47ae56a8808c836923466e44704db3a8371593Niko Catania string str01; 746fe47ae56a8808c836923466e44704db3a8371593Niko Catania 747fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.push_back('a'); 748fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "a"); 749fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.capacity() == 1); 750fe47ae56a8808c836923466e44704db3a8371593Niko Catania 751fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.reserve(10); 752fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.push_back('b'); 753fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "ab"); 754fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.capacity() == 10); 755fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01[2] == '\0'); 756fe47ae56a8808c836923466e44704db3a8371593Niko Catania 757fe47ae56a8808c836923466e44704db3a8371593Niko Catania str01.reserve(); 758fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01 == "ab"); 759fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01.capacity() == 2); 760fe47ae56a8808c836923466e44704db3a8371593Niko Catania EXPECT_TRUE(str01[2] == '\0'); 761fe47ae56a8808c836923466e44704db3a8371593Niko Catania 762fe47ae56a8808c836923466e44704db3a8371593Niko Catania return true; 763fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 764fe47ae56a8808c836923466e44704db3a8371593Niko Catania 765d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Cataniabool testFind() 766d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania{ 767d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania string haystack("one two three one two three"); 768d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 769d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // Don't die on null strings 770cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(haystack.find((char*)NULL) == string::npos); 771cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(haystack.find((char*)NULL, 10) == string::npos); 772d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 773d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // C strings. 774d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one") == 0); 775d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("two") == 4); 776d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("t") == 4); 777d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("four") == string::npos); 778d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one", string::npos) == string::npos); 779d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 780d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // with offset 781d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one", 13) == 14); 782d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one", 14) == 14); 783d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one", 15) == string::npos); 784d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("e", haystack.size() - 1) == haystack.size() - 1); 785d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("e", haystack.size()) == string::npos); 786d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find("one", string::npos) == string::npos); 787d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 788d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // std::string 789d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one")) == 0); 790d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("two")) == 4); 791d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("t")) == 4); 792d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("four")) == string::npos); 793d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one"), string::npos) == string::npos); 794d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 795d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // with offset 796d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one"), 13) == 14); 797d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one"), 14) == 14); 798d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one"), 15) == string::npos); 799d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("e"), haystack.size() - 1) == haystack.size() - 1); 800d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("e"), haystack.size()) == string::npos); 801d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(haystack.find(string("one"), string::npos) == string::npos); 802d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 803d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // Emtpy string should be found at every position in a string except 804d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // past the end. 805d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(string().find("", 0) == 0); 806d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(string().find(string(), 0) == 0); 807d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(string().find(string(), 10) == string::npos); 808d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 809d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania string foo = "foo"; 810d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find("", 0) == 0); 811d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(), 0) == 0); 812d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(""), 0) == 0); 813d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 814d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find("", 1) == 1); 815d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(), 1) == 1); 816d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(""), 1) == 1); 817d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 818d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find("", foo.size()) == foo.size()); 819d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(), foo.size()) == foo.size()); 820d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(""), foo.size()) == foo.size()); 821d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 822d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find("", foo.size() + 1) == string::npos); 823d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(), foo.size() + 1) == string::npos); 824d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(foo.find(string(""), foo.size() + 1) == string::npos); 825d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 826d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania // Find on an empty string a non empty one should fail 827d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(string().find("f", 0) == string::npos); 828d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania EXPECT_TRUE(string().find(string("f"), 0) == string::npos); 829d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania return true; 830d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania} 831d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania 83260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Cataniabool testCapacity() 83360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania{ 83460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string empty_string; 83560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 83660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.capacity() == 0); 83760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.size() == 0); 83860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 83960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania const char *text = "non empty string"; 84060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania const size_t len = strlen(text); 84160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str01(text); 84260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 84360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.capacity() == len); 84460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.size() == len); 84560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania return true; 84660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania} 84760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 84860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Cataniabool testClear() 84960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania{ 85060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string empty_string; 85160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 85260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania empty_string.clear(); 85360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.capacity() == 0); 85460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.size() == 0); 85560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 85660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str01("non empty string"); 85760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 85860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania str01.clear(); 85960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.capacity() == 0); 86060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.size() == 0); 86160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.empty()); 86260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania return true; 86360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania} 86460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 86560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Cataniabool testErase() 86660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania{ 86760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 86860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string empty_string; 86960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 87060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania empty_string.erase(); 87160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.capacity() == 0); 87260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.size() == 0); 87360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 8742a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania empty_string.erase(kMaxSizeT); 87560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.capacity() == 0); 87660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.size() == 0); 87760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 8782a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania empty_string.erase(kMaxSizeT, kMaxSizeT); 87960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.capacity() == 0); 88060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(empty_string.size() == 0); 88160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 88260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 88360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 88460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str01("a"); 88560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 88660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania str01.erase(); 88760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.capacity() == 1); 88860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str01.size() == 0); 88960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 89060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 89160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 89260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str02("a"); 89360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 8942a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania str02.erase(kMaxSizeT); 89560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str02.capacity() == 1); 89660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str02.size() == 1); 89760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 89860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 89960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 90060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str03("a"); 90160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 9022a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania str03.erase(0, kMaxSizeT); 90360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str03.capacity() == 1); 90460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str03.size() == 0); 90560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 90660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 90760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 90860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str04("a"); 90960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 9102a4077a9186d6f6dff104bbd1a73484aae6d5c01Nicolas Catania str04.erase(1, kMaxSizeT); 91160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str04.capacity() == 1); 91260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str04.size() == 1); 91360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 91460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 91560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 91660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str05("abcd"); 91760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 91860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania str05.erase(1, 2); 91960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str05.capacity() == 4); 92060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str05.size() == 2); 92160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str05 == "ad"); 92260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 92360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 92460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 92560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str06("abcd"); 92660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 92760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania str06.erase(0, 1); 92860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str06.capacity() == 4); 92960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str06.size() == 3); 93060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str06 == "bcd"); 93160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 93260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 93360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania { 93460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania // overlap 93560fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania string str07("oh my god (You think I'm in control)"); 93660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 93760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania str07.erase(0, strlen("oh my god ")); 93860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str07.size() == 26); 93960fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania EXPECT_TRUE(str07 == "(You think I'm in control)"); 94060fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania } 94160fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 94260fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania return true; 94360fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania} 94460fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania 94591ea6c037471a1acd97b03c3097223777906f748Nicolas Catania// Checks an iterator can be cast to a const one. 94691ea6c037471a1acd97b03c3097223777906f748Nicolas Cataniabool testConstIterator() 94791ea6c037471a1acd97b03c3097223777906f748Nicolas Catania{ 94891ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string s("a string"); 94991ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string::iterator i = s.begin(); 95091ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string::const_iterator ci = s.begin(); 95191ea6c037471a1acd97b03c3097223777906f748Nicolas Catania return true; 95291ea6c037471a1acd97b03c3097223777906f748Nicolas Catania} 95391ea6c037471a1acd97b03c3097223777906f748Nicolas Catania 95491ea6c037471a1acd97b03c3097223777906f748Nicolas Cataniabool testForwardIterator() 95591ea6c037471a1acd97b03c3097223777906f748Nicolas Catania{ 95691ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string s("a string"); 95791ea6c037471a1acd97b03c3097223777906f748Nicolas Catania char chars[] = "a string"; 95891ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string::iterator iter = s.begin(); 95991ea6c037471a1acd97b03c3097223777906f748Nicolas Catania for (int i = 0; iter != s.end(); ++i) { 96091ea6c037471a1acd97b03c3097223777906f748Nicolas Catania EXPECT_TRUE(*iter == chars[i]); 96191ea6c037471a1acd97b03c3097223777906f748Nicolas Catania ++iter; 96291ea6c037471a1acd97b03c3097223777906f748Nicolas Catania } 96391ea6c037471a1acd97b03c3097223777906f748Nicolas Catania EXPECT_TRUE(iter == s.end()); 96491ea6c037471a1acd97b03c3097223777906f748Nicolas Catania 96591ea6c037471a1acd97b03c3097223777906f748Nicolas Catania string empty; 96691ea6c037471a1acd97b03c3097223777906f748Nicolas Catania EXPECT_TRUE(empty.begin() == empty.end()); 96791ea6c037471a1acd97b03c3097223777906f748Nicolas Catania return true; 96891ea6c037471a1acd97b03c3097223777906f748Nicolas Catania} 96991ea6c037471a1acd97b03c3097223777906f748Nicolas Catania 97040d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Cataniabool testSubstr() { 97140d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania { 97240d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string s; 97340d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string res = s.substr(10, 1); 97440d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(res.empty()); 97540d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania } 97640d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania { 97740d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string s = "pandora radio"; 97840d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string res = s.substr(string::npos, 1); 97940d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(res.empty()); 98040d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania } 98140d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania { 98240d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string s = "pandora radio"; 98340d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string res = s.substr(5, 1000); 98440d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(res == "ra radio"); 98540d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania } 98640d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania { 98740d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string s = "pandora radio"; 98840d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string res = s.substr(5, 0); 98940d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(res.empty()); 99040d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania } 99140d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania { 99240d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string s = "pandora radio"; 99340d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania string res = s.substr(5, 5); 99440d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania EXPECT_TRUE(res == "ra ra"); 99540d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania } 99640d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania return true; 99740d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania} 99840d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania 999cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Cataniabool testCharSearch() { 1000cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1001cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1002cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a') == string::npos); 1003cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1004cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a') == 0); 1005cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a', 0) == 0); 1006cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a', 1) == 3); 1007cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a', 8) == 10); 1008cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "zzzzzzza"; 1009cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a') == 7); 1010cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_of('a', 8) == string::npos); // out of bound 1011cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1012cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania // For char (set of size 1) find_first_of is equive to find(char, pos) 1013cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1014cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1015cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a') == string::npos); 1016cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1017cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a') == 0); 1018cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a', 0) == 0); 1019cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a', 1) == 3); 1020cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a', 8) == 10); 1021cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "zzzzzzza"; 1022cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a') == 7); 1023cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find('a', 8) == string::npos); // out of bound 1024cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1025cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1026cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1027cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a') == string::npos); 1028cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a', 0) == string::npos); 1029cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a', 10) == string::npos); 1030cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1031cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a', 10) == 10); 1032cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a', 9) == 7); 1033cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a', 0) == 0); 1034cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "azzzzzzz"; 1035cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_of('a') == 0); 1036cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1037cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania // For char (set of size 1) find_last_of is equiv to rfind(char, pos). 1038cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1039cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1040cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a') == string::npos); 1041cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a', 0) == string::npos); 1042cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a', 10) == string::npos); 1043cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1044cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a', 10) == 10); 1045cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a', 9) == 7); 1046cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a', 0) == 0); 1047cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "azzzzzzz"; 1048cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.rfind('a') == 0); 1049cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1050cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1051cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1052cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a') == string::npos); 1053cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1054cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a') == 1); 1055cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a', 0) == 1); 1056cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a', 1) == 1); 1057cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a', 7) == 8); 1058cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "zzzzzzza"; 1059cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a') == 0); 1060cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_first_not_of('a', 8) == string::npos); // out of bound 1061cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1062cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania { 1063cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania string s; 1064cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a') == string::npos); 1065cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a', 0) == string::npos); 1066cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a', 10) == string::npos); 1067cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "abracadabra"; 1068cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a') == 9); 1069cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a', 10) == 9); 1070cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a', 9) == 9); 1071cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a', 0) == string::npos); 1072cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania s = "azzzzzzz"; 1073cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania EXPECT_TRUE(s.find_last_not_of('a') == 7); 1074cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania } 1075cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania return true; 1076cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania} 1077cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania 1078464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania 1079464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Cataniabool testInsert() { 1080464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania { 1081464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania string::iterator res; 1082464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania string str("zzzzzz"); 1083464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania res = str.insert(str.begin(), 'a'); 1084464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(str == "azzzzzz"); 1085464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(*res == 'a'); 1086464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania 1087464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania res = str.insert(str.begin() + 3, 'b'); 1088464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(str == "azzbzzzz"); 1089464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(*res == 'b'); 1090464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania 1091464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania res = str.insert(str.end(), 'c'); 1092464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(str == "azzbzzzzc"); 1093464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(*res == 'c'); 1094464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania } 1095464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania { 1096464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania string str; 1097464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania string::iterator res = str.insert(str.begin(), 'a'); 1098464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(str == "a"); 1099464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania EXPECT_TRUE(*res == 'a'); 1100464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania } 1101464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania return true; 1102464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania} 1103464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania 1104fe47ae56a8808c836923466e44704db3a8371593Niko Catania} // namespace android 1105fe47ae56a8808c836923466e44704db3a8371593Niko Catania 1106fe47ae56a8808c836923466e44704db3a8371593Niko Cataniaint main(int argc, char **argv) 1107fe47ae56a8808c836923466e44704db3a8371593Niko Catania{ 1108fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConstructorCString); 1109fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConstructorString); 1110fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConstructorRepeatChar); 1111fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConstructorPointers); 1112fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConstructorInvalidValues); 1113fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testSize); 1114fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testCString); 1115fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testAppend); 1116fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testAppendOperator); 1117fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testConcat); 1118fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testAssignment); 11196943930994c640cbb24773ddb8df99de8a5d7e16Nicolas Catania FAIL_UNLESS(testCopy); 1120fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testReserve); 1121fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testCompare); 1122fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testAccessor); 1123fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testSwap); 1124fe47ae56a8808c836923466e44704db3a8371593Niko Catania FAIL_UNLESS(testPushBack); 1125d738d268c8f915bde451bba52e0c3996113ba9f0Nicolas Catania FAIL_UNLESS(testFind); 112660fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania FAIL_UNLESS(testCapacity); 112760fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania FAIL_UNLESS(testClear); 112860fd0f758a63e74980d712a13c91bc24d98cedc6Nicolas Catania FAIL_UNLESS(testErase); 112991ea6c037471a1acd97b03c3097223777906f748Nicolas Catania FAIL_UNLESS(testConstIterator); 113091ea6c037471a1acd97b03c3097223777906f748Nicolas Catania FAIL_UNLESS(testForwardIterator); 113140d9e34c926f59cae26c4bae4ab55377cf3cdd40Nicolas Catania FAIL_UNLESS(testSubstr); 1132cb8eb8e1390d1343563a55c117b5c39cfa87fe1dNicolas Catania FAIL_UNLESS(testCharSearch); 1133464136e01a1facf09ce3befccbfc04f2d1da8d5bNicolas Catania FAIL_UNLESS(testInsert); 1134fe47ae56a8808c836923466e44704db3a8371593Niko Catania return kPassed; 1135fe47ae56a8808c836923466e44704db3a8371593Niko Catania} 1136