C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
7.0 KiB
267 lines
7.0 KiB
20 years ago
|
/** @file
|
||
|
|
||
|
$Id$
|
||
|
|
||
|
$Date$
|
||
|
$Author$
|
||
|
|
||
|
@copy © Marc Wäckerlin
|
||
|
@license LGPL, see file <a href="license.html">COPYING</a>
|
||
|
|
||
|
$Log$
|
||
20 years ago
|
Revision 1.3 2004/12/20 13:23:00 marc
|
||
|
new tests for string exceptions
|
||
|
|
||
20 years ago
|
Revision 1.2 2004/10/13 11:19:22 marc
|
||
|
remove stdout, print stack trace
|
||
|
|
||
20 years ago
|
Revision 1.1 2004/10/07 09:31:30 marc
|
||
|
new feature
|
||
|
|
||
|
|
||
|
*/
|
||
13 years ago
|
#include <mrw/string.hxx>
|
||
|
#include <mrw/list.hxx>
|
||
|
#include <mrw/vector.hxx>
|
||
|
#include <mrw/deque.hxx>
|
||
|
#include <mrw/set.hxx>
|
||
|
#include <mrw/map.hxx>
|
||
|
#include <mrw/multiset.hxx>
|
||
|
#include <mrw/multimap.hxx>
|
||
|
#include <mrw/stacktrace.hxx>
|
||
20 years ago
|
#include <cppunit/TestFixture.h>
|
||
|
#include <cppunit/ui/text/TestRunner.h>
|
||
|
#include <cppunit/extensions/HelperMacros.h>
|
||
|
#include <cppunit/extensions/TestFactoryRegistry.h>
|
||
|
|
||
|
class StdExtTest: public CppUnit::TestFixture {
|
||
|
public:
|
||
|
void StringConv() {
|
||
|
std::string s("Integer=");
|
||
|
int i(4);
|
||
|
CPPUNIT_ASSERT(s+mrw::string(i) == "Integer=4");
|
||
|
}
|
||
|
void StringShift() {
|
||
|
std::string s("Integer=");
|
||
|
int i(4);
|
||
|
CPPUNIT_ASSERT((s<<i<<" test "<<4<<(long)5<<" xx") == "Integer=4 test 45 xx");
|
||
|
int i2 = 0;
|
||
|
std::string s2, s3;
|
||
|
s>>s2>>s3>>i2;
|
||
|
CPPUNIT_ASSERT(s2=="Integer=4");
|
||
|
CPPUNIT_ASSERT(s3=="test");
|
||
|
CPPUNIT_ASSERT(i2==45);
|
||
|
CPPUNIT_ASSERT(s==" xx");
|
||
|
s2=""; s3="";
|
||
20 years ago
|
s>>s2;
|
||
20 years ago
|
CPPUNIT_ASSERT(s2=="xx");
|
||
|
CPPUNIT_ASSERT(s=="");
|
||
|
}
|
||
|
void StringAdd() {
|
||
|
std::string s;
|
||
|
s=s+(signed short)1+(signed int)2+(signed long)3+(signed char)'A'+
|
||
|
(unsigned short)1+(unsigned int)2+(unsigned long)3+(unsigned char)'A'+'c';
|
||
|
CPPUNIT_ASSERT(s=="1236512365c");
|
||
|
s=(signed short)-4+s;
|
||
|
s=(signed int)5+s;
|
||
|
s=(signed long)6+s;
|
||
|
s=(signed char)8+s;
|
||
|
s=(unsigned short)4+s;
|
||
|
s=(unsigned int)5+s;
|
||
|
s=(unsigned long)6+s;
|
||
|
s=(unsigned char)8+s;
|
||
|
s='a'+s;
|
||
|
CPPUNIT_ASSERT(s=="a8654865-41236512365c");
|
||
|
s+=(signed short)-4;
|
||
|
s+=(signed int)5 ;
|
||
|
s+=(signed long)6;
|
||
|
s+=(signed char)8 ;
|
||
|
s+=(unsigned short)4;
|
||
|
s+=(unsigned int)5 ;
|
||
|
s+=(unsigned long)6;
|
||
|
s+=(unsigned char)8 ;
|
||
|
s+='a';
|
||
|
CPPUNIT_ASSERT(s=="a8654865-41236512365c-45684568a");
|
||
|
}
|
||
|
void ListShift() {
|
||
|
std::list<int> l;
|
||
|
l<<1<<2<<3<<4<<5<<6<<7<<8;
|
||
|
int i1(0), i2(0), i3(0), i4(0);
|
||
|
l>>i1>>i2>>i3>>i4;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 l=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==1 && i2==2 && i3==3 && i4==4);
|
||
|
CPPUNIT_ASSERT(l.size()==4);
|
||
|
for (int i=0; i<4; (l.pop_front(), ++i)) {
|
||
|
CPPUNIT_ASSERT(l.front()==i+5);
|
||
|
}
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
l>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void VectorShift() {
|
||
|
std::vector<int> l;
|
||
|
l<<1<<2<<3<<4<<5<<6<<7<<8;
|
||
|
int i1(0), i2(0), i3(0), i4(0);
|
||
|
l>>i1>>i2>>i3>>i4;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 l=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==1 && i2==2 && i3==3 && i4==4);
|
||
|
CPPUNIT_ASSERT(l.size()==4);
|
||
|
for (int i=0; i<4; (l.erase(l.begin()), ++i)) {
|
||
|
CPPUNIT_ASSERT(l.front()==i+5);
|
||
|
}
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
l>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void DequeShift() {
|
||
|
std::deque<int> l;
|
||
|
l<<1<<2<<3<<4<<5<<6<<7<<8;
|
||
|
int i1(0), i2(0), i3(0), i4(0);
|
||
|
l>>i1>>i2>>i3>>i4;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 l=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==1 && i2==2 && i3==3 && i4==4);
|
||
|
CPPUNIT_ASSERT(l.size()==4);
|
||
|
for (int i=0; i<4; (l.erase(l.begin()), ++i)) {
|
||
|
CPPUNIT_ASSERT(l.front()==i+5);
|
||
|
}
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
l>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void SetShift() {
|
||
|
std::set<int> s;
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
s<<1<<2<<3<<4<<5<<6<<7<<8<<8;
|
||
|
} catch (mrw::invalid_argument& e) {
|
||
20 years ago
|
mrw::StackTrace::createSymtable();
|
||
20 years ago
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
int i1(0), i2(0), i3(0), i4(0);
|
||
|
s>>i1>>i2>>i3>>i4;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 s=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==1 && i2==2 && i3==3 && i4==4);
|
||
|
CPPUNIT_ASSERT(s.size()==4);
|
||
|
for (int i=0; i<4; ++i) {
|
||
|
CPPUNIT_ASSERT(s.find(i+5)!=s.end());
|
||
|
}
|
||
|
s.erase(s.begin(), s.end());
|
||
|
exc=false;
|
||
|
try {
|
||
|
s>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void MapShift() {
|
||
|
std::map<int, std::string> s;
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
s<<std::make_pair(1, std::string("one"))
|
||
|
<<std::make_pair(2, std::string("two"))
|
||
|
<<std::make_pair(2, std::string("two"));
|
||
|
} catch (mrw::invalid_argument& e) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
std::pair<int, std::string> i1, i2;
|
||
|
s>>i1>>i2;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 s=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==std::make_pair(1, std::string("one")) &&
|
||
|
i2==std::make_pair(2, std::string("two")));
|
||
|
CPPUNIT_ASSERT(s.size()==0);
|
||
|
exc=false;
|
||
|
try {
|
||
|
s>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void MultisetShift() {
|
||
|
std::multiset<int> s;
|
||
|
s<<1<<2<<3<<4<<5<<6<<7<<8<<9;
|
||
|
int i1(0), i2(0), i3(0), i4(0);
|
||
|
s>>i1>>i2>>i3>>i4;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 s=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==1 && i2==2 && i3==3 && i4==4);
|
||
|
CPPUNIT_ASSERT(s.size()==5);
|
||
|
for (int i=0; i<5; ++i) {
|
||
|
CPPUNIT_ASSERT(s.find(i+5)!=s.end());
|
||
|
}
|
||
|
s.erase(s.begin(), s.end());
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
s>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
|
void MultimapShift() {
|
||
|
std::multimap<int, std::string> s;
|
||
|
s<<std::make_pair(1, std::string("one"))
|
||
|
<<std::make_pair(2, std::string("two"))
|
||
|
<<std::make_pair(2, std::string("two"));
|
||
|
std::pair<int, std::string> i1, i2;
|
||
|
s>>i1>>i2;
|
||
|
// now: i1==1 i2==2 i3==3 i4==4 s=={5, 6, 7, 8}
|
||
|
CPPUNIT_ASSERT(i1==std::make_pair(1, std::string("one")) &&
|
||
|
i2==std::make_pair(2, std::string("two")));
|
||
|
CPPUNIT_ASSERT(s.size()==1);
|
||
|
s>>i1;
|
||
|
CPPUNIT_ASSERT(i1==std::make_pair(2, std::string("two")));
|
||
|
bool exc(false);
|
||
|
try {
|
||
|
s>>i1;
|
||
|
} catch (mrw::length_error&) {
|
||
|
exc=true;
|
||
|
}
|
||
|
CPPUNIT_ASSERT(exc);
|
||
|
}
|
||
20 years ago
|
void StringException1() {
|
||
|
std::string s("Hello World");
|
||
|
int hello;
|
||
|
s>>hello; // not an int, exception expected
|
||
|
}
|
||
|
void StringException2() {
|
||
|
std::string s("Hello World");
|
||
|
mrw::to<int>(s); // not an int, exception expected
|
||
|
}
|
||
20 years ago
|
CPPUNIT_TEST_SUITE(StdExtTest);
|
||
|
CPPUNIT_TEST(StringConv);
|
||
|
CPPUNIT_TEST(StringShift);
|
||
|
CPPUNIT_TEST(StringAdd);
|
||
|
CPPUNIT_TEST(ListShift);
|
||
|
CPPUNIT_TEST(VectorShift);
|
||
|
CPPUNIT_TEST(DequeShift);
|
||
|
CPPUNIT_TEST(SetShift);
|
||
|
CPPUNIT_TEST(MapShift);
|
||
|
CPPUNIT_TEST(MultisetShift);
|
||
|
CPPUNIT_TEST(MultimapShift);
|
||
20 years ago
|
CPPUNIT_TEST_EXCEPTION(StringException1, mrw::invalid_argument);
|
||
|
CPPUNIT_TEST_EXCEPTION(StringException2, mrw::invalid_argument);
|
||
20 years ago
|
CPPUNIT_TEST_SUITE_END();
|
||
|
};
|
||
|
CPPUNIT_TEST_SUITE_REGISTRATION(StdExtTest);
|
||
|
|
||
|
int main() {
|
||
|
CppUnit::TextUi::TestRunner runner;
|
||
|
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
|
||
|
return runner.run() ? 0 : 1;
|
||
|
}
|