// vim: syntax=cpp /* * Copyright (C) 2007-2023 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/blob.h" #include "bu/exceptionindexoutofbounds.h" #include "bu/sio.h" #include suite Blob { test set { Bu::Blob a("hello there"); unitTest( !strcmp( a.getData(), "hello there") ); Bu::Blob b( a ); a = "New string"; unitTest( !strcmp( a.getData(), "New string") ); unitTest( !strcmp( b.getData(), "hello there") ); b = a; unitTest( !strcmp( b.getData(), "New string") ); } test empty { Bu::Blob n; Bu::Blob e(""); unitTest( n.isEmpty() == false ); unitTest( n.isNull() == true ); unitTest( n.isNullOrEmpty() == true ); unitTest( e.isEmpty() == true ); unitTest( e.isNull() == false ); unitTest( e.isNullOrEmpty() == true ); unitTestCatch( n[0], Bu::ExceptionIndexOutOfBounds ); unitTestCatch( e[0], Bu::ExceptionIndexOutOfBounds ); } test index { Bu::Blob a("hello there"); unitTest( a[5] == ' ' ); unitTest( a[6] == 't' ); unitTestCatch( a[-1], Bu::ExceptionIndexOutOfBounds ); unitTestCatch( a[-100], Bu::ExceptionIndexOutOfBounds ); unitTest( a[10] == 'e' ); unitTestCatch( a[11], Bu::ExceptionIndexOutOfBounds ); unitTestCatch( a[12], Bu::ExceptionIndexOutOfBounds ); } test compare { Bu::Blob a("cat"), b("dog"), c("cattail"), d("dog"); unitTest( a != b ); unitTest( a != c ); unitTest( a != "catt" ); unitTest( a != "ca" ); unitTest( !(a == c) ); unitTest( !(a == d) ); unitTest( a == a ); unitTest( !(a != a) ); unitTest( !(b != d) ); unitTest( a < b ); unitTest( a <= b ); unitTest( a < c ); unitTest( a <= c ); unitTest( !(b < d) ); unitTest( b <= d ); unitTest( !(c < a) ); unitTest( a < "dog" ); unitTest( a <= "dog" ); unitTest( a < "cattail" ); unitTest( a <= "cattail" ); unitTest( !(b < "dog") ); unitTest( b <= "dog" ); unitTest( !(c < "cattail") ); unitTest( b > a ); unitTest( b >= a ); unitTest( c > a ); unitTest( c >= a ); unitTest( !(d > b) ); unitTest( d <= b ); unitTest( !(a > c) ); unitTest( b > "cat" ); unitTest( b >= "cat" ); unitTest( c > "cat" ); unitTest( c >= "cat" ); unitTest( !(d > "dog") ); unitTest( d <= "dog" ); unitTest( !(a > "cattail") ); } test iterator { const char *sDat = "abcdefghijklmnopqrstuvwxyz"; Bu::Blob bDat( sDat ); Bu::Blob::const_iterator i2; const char *sCmp = sDat; for( Bu::Blob::const_iterator i = bDat.begin(); i; i++, sCmp++ ) { unitTest( *i == *sCmp ); if( *i == 'k' ) i2 = i; } i2++; unitTest( *i2 == 'l' ); unitTest( *(i2 + 3) == 'o' ); //unitTest( Bu::Blob( i2 ) == "lmnopqrstuvwxyz" ); //unitTest( Bu::Blob( i2, i2+5 ) == "lmnop" ); sCmp--; for( Bu::Blob::iterator i = bDat.rbegin(); i; i++, sCmp-- ) { unitTest( *i == *sCmp ); } } test const_iterator { const char *sDat = "abcdefghijklmnopqrstuvwxyz"; Bu::Blob bDat( sDat ); Bu::Blob::const_iterator i2; const char *sCmp = sDat; for( Bu::Blob::const_iterator i = bDat.begin(); i; i++, sCmp++ ) { unitTest( *i == *sCmp ); if( *i == 'k' ) i2 = i; } i2++; unitTest( *i2 == 'l' ); unitTest( *(i2 + 3) == 'o' ); unitTest( Bu::Blob( i2 ) == "lmnopqrstuvwxyz" ); unitTest( Bu::Blob( i2, i2+5 ) == "lmnop" ); sCmp--; for( Bu::Blob::const_iterator i = bDat.rbegin(); i; i++, sCmp-- ) { unitTest( *i == *sCmp ); } } test sort { Bu::List lList; lList.append("Moose"); lList.append("Cattail"); lList.append("Cat"); lList.append("Cattxil"); lList.append("Moo"); lList.append("Cattails"); lList.append("Dog"); lList.sort(); Bu::List::iterator i = lList.begin(); unitTest( *i == "Cat" && i++ ); unitTest( *i == "Cattail" && i++ ); unitTest( *i == "Cattails" && i++ ); unitTest( *i == "Cattxil" && i++ ); unitTest( *i == "Dog" && i++ ); unitTest( *i == "Moo" && i++ ); unitTest( *i == "Moose" && !(i++) ); } }