From 7e25a863325dc3e9762397e700030969e093b087 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Thu, 20 Jan 2011 07:48:57 +0000 Subject: Heh, forgot to rename the two fstring tests. --- src/unit/string.unit | 351 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 src/unit/string.unit (limited to 'src/unit/string.unit') diff --git a/src/unit/string.unit b/src/unit/string.unit new file mode 100644 index 0000000..f51e4de --- /dev/null +++ b/src/unit/string.unit @@ -0,0 +1,351 @@ +// vim: syntax=cpp +/* + * Copyright (C) 2007-2011 Xagasoft, All rights reserved. + * + * This file is part of the libbu++ library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#include "bu/string.h" + +#include + +suite String +{ + test compare1 + { + Bu::String b("Bob"); + unitTest( !(b == "Bobo") ); + unitTest( b == "Bob" ); + } + + test compare2 + { + Bu::String b("Bobo"); + unitTest( !(b == "Bob") ); + unitTest( b == "Bobo" ); + } + + test appendSingle + { + Bu::String b; + for( char l = 'a'; l < 'g'; l++ ) + b += l; + unitTest( b == "abcdef" ); + unitTest( strcmp( b.getStr(), "abcdef" ) == 0 ); + } + + test shared1 + { + Bu::String a("Hey there"); + Bu::String b( a ); + unitTest( a.getConstStr() == b.getConstStr() ); + b += " guy"; + unitTest( a.getConstStr() != b.getConstStr() ); + a = b; + unitTest( a.getConstStr() == b.getConstStr() ); + } + + test insert + { + Bu::String a("abcd"); + a.insert( 2, "-!-", 3 ); + unitTest( a == "ab-!-cd" ); + + a.insert( 0, "!!", 2 ); + unitTest( a == "!!ab-!-cd" ); + + a.insert( -10, "789", 3 ); + unitTest( a == "789!!ab-!-cd" ); + + a.insert( 12, "89", 2 ); + unitTest( a == "789!!ab-!-cd89" ); + + a.insert( 1203, "12", 2 ); + unitTest( a == "789!!ab-!-cd8912" ); + } + + test remove + { + Bu::String a("abHEYcd"); + a.remove( 2, 3 ); + unitTest( a == "abcd" ); + a.remove( 2, 5 ); + unitTest( a == "ab" ); + a += "cdefghijklmnop"; + a.remove( 5, 1 ); + unitTest( a == "abcdeghijklmnop" ); + } + + test add1 + { + Bu::String a("hi there"); + Bu::String b(", yeah!"); + Bu::String c = a + b; + + unitTest( c == "hi there, yeah!" ); + } + + test add2 + { + Bu::String a("hi there"); + Bu::String c = a + ", yeah!"; + + unitTest( c == "hi there, yeah!" ); + } + + test add3 + { + Bu::String a("hi there"); + Bu::String b(", yeah!"); + Bu::String c = a + ", Mr. Man" + b; + + unitTest( c == "hi there, Mr. Man, yeah!" ); + } + + test add4 + { + Bu::String b(", yeah!"); + Bu::String c = "hi there" + b; + + unitTest( c == "hi there, yeah!" ); + } + + test add5 + { + Bu::String b; + Bu::String c = "sup?"; + b += "hey, " + c; + + unitTest( b == "hey, sup?" ); + } + + test add6 + { + Bu::String a("Hello"); + char b[256] = {"Dude"}; + Bu::String c = a + "/" + b; + + unitTest( c == "Hello/Dude" ); + } + + test add7 + { + const Bu::String a("hello "); + Bu::String b(" how "); + unitTest( a == "hello " ); + unitTest( a + "dude" == "hello dude" ); + unitTest( a + "dude" + b + "are you?" == "hello dude how are you?" ); + } + + test subStr1 + { + Bu::String a("abcdefghijklmnop"); + Bu::String::iterator i = a.find('f'); + unitTest( a.getSubStr( i, Bu::String::iterator() ) == "fghijklmnop" ); + Bu::String::iterator j = i.find('l'); + unitTest( a.getSubStr( i, j ) == "fghijk" ); + } + + test compareSub1 + { + Bu::String a("just a string."); + unitTest( a.compareSub("a ", 5, 2) == true ); + unitTest( a.compareSub("string.aoeu", 7, 11 ) == false ); + unitTest( a.compareSub("string.aoeu", 7, 3 ) == true ); + } + + test compareSub2 + { + Bu::String a("just a string."); + unitTest( a.compareSub(Bu::String("a "), 5, 2) == true ); + unitTest( a.compareSub(Bu::String("string.aoeu"), 7, 11 ) == false ); + unitTest( a.compareSub(Bu::String("string.aoeu"), 7, 3 ) == true ); + } + + test iterator1 + { + Bu::String a("This is a test."); + Bu::String b; + for( Bu::String::iterator i = a.begin(); i; i++ ) + { + b += *i; + } + unitTest( a == b ); + } + + test iterator2 + { + Bu::String a("This is a test."); + Bu::String b("--This is a test."); + Bu::String::iterator ai = a.begin(); + Bu::String::iterator bi = b.begin(); + unitTest( ai.compare( bi ) == false ); + unitTest( bi.compare( ai ) == false ); + bi++; bi++; + unitTest( ai.compare( bi ) == true ); + unitTest( bi.compare( ai ) == true ); + } + + test iterator3 + { + Bu::String a("1234honour"); + Bu::String b("--1234ueje"); + Bu::String::iterator ai = a.begin(); + Bu::String::iterator bi = b.begin(); + unitTest( ai.compare( bi, 4 ) == false ); + unitTest( bi.compare( ai, 4 ) == false ); + bi++; bi++; + unitTest( ai.compare( bi, 4 ) == true ); + unitTest( bi.compare( ai, 4 ) == true ); + unitTest( ai.compare( bi, 5 ) == false ); + unitTest( bi.compare( ai, 5 ) == false ); + + } + + test iterator4 + { + Bu::String a("1234aoeu"); + Bu::String::iterator ai = a.begin(); + unitTest( ai.compare("1234") == false ); + unitTest( ai.compare("1234aoeu") == true ); + unitTest( ai.compare("1234aoeuee") == false ); + } + + test iterator5 + { + Bu::String a("1234aoeu"); + Bu::String::iterator ai = a.begin(); + unitTest( ai.compare("1234", 4) == true ); + unitTest( ai.compare("1234aoeu", 8) == true ); + unitTest( ai.compare("1234aoeuee", 10) == false ); + } + + test iterator6 + { + Bu::String a("just ->this part"); + Bu::String b; + Bu::String::iterator s = a.begin(); + for(; s; s++ ) + { + if( *s == '>' ) + { + s++; + b.set( s ); + break; + } + } + unitTest( b == "this part" ); + + b.append( s ); + + Bu::String c; + c.set( b.begin() ); + + // This is here because the comparison operator used to cause flattening. + unitTest( b == "this partthis part" ); + unitTest( c == b ); + } + + test iterator7 + { + Bu::String a("just [this] part"); + Bu::String b; + Bu::String::iterator s = a.begin(); + for(; s; s++ ) + { + if( *s == '[' ) + { + s++; + break; + } + } + Bu::String::iterator e = s; + for(; e; e++ ) + { + if( *e == ']' ) + { + b.set( s, e ); + break; + } + } + unitTest( b == "this" ); + + b.append( s, e ); + + for( Bu::String::iterator i = b.begin(); i;) + { + Bu::String::iterator k = i; + k++; + if( !k ) + { + b.append( b.begin(), i ); + break; + } + i = k; + } + Bu::String l; + l.set( b.begin() ); + unitTest( l == "thisthisthisthi" ); + for( Bu::String::iterator i = b.begin(); i;) + { + Bu::String::iterator k = i; + k++; + if( !k ) + { + b.append( b.begin(), i ); + break; + } + i = k; + } + l.set( b.begin() ); + unitTest( l == "thisthisthisthithisthisthisth" ); + } + + test isSet1 + { + Bu::String bob; + + unitTest( bob.isSet() == false ); + bob = "something"; + unitTest( bob.isSet() == true ); + bob = ""; + unitTest( bob.isSet() == false ); + } + + test swap1 + { + Bu::String a, b; + a = "Goodbye"; + b = "Hello"; + Bu::swap( a, b ); + unitTest( a == "Hello" ); + unitTest( b == "Goodbye" ); + } + + test swap2 + { + Bu::String a, b; + a = "Goodbye"; + b = "Hello"; + std::swap( a, b ); + unitTest( a == "Hello" ); + unitTest( b == "Goodbye" ); + } + + test replace1 + { + Bu::String a; + a = "This is a test."; + unitTest( a.replace("i", "ooo") == "Thooos ooos a test." ); + } + + test coreDerefBug1 + { + Bu::String a, b; + a = "bob"; + a.setSize( 0 ); + b = a; + b.getStr(); + } +} -- cgit v1.2.3