formattest.cpp

来自「C++ class libraries for network-centric,」· C++ 代码 · 共 311 行

CPP
311
字号
//// FormatTest.cpp//// $Id: //poco/1.2/Foundation/testsuite/src/FormatTest.cpp#1 $//// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.// All rights reserved.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions// are met://// 1. Redistributions of source code must retain the above copyright//    notice, this list of conditions and the following disclaimer.//// 2. Redistributions in binary form must reproduce the above copyright//    notice, this list of conditions and the following disclaimer in the//    documentation and/or other materials provided with the distribution.//// 3. Redistributions in any form must be accompanied by information on//    how to obtain complete source code for this software and any//    accompanying software that uses this software.  The source code//    must either be included in the distribution or be available for no//    more than the cost of distribution plus a nominal fee, and must be//    freely redistributable under reasonable conditions.  For an//    executable file, complete source code means the source code for all//    modules it contains.  It does not include source code for modules or//    files that typically accompany the major components of the operating//    system on which the executable file runs.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE// POSSIBILITY OF SUCH DAMAGE.//#include "FormatTest.h"#include "CppUnit/TestCaller.h"#include "CppUnit/TestSuite.h"#include "Poco/Format.h"#include "Poco/Exception.h"using Poco::format;using Poco::BadCastException;using Poco::Int64;using Poco::UInt64;FormatTest::FormatTest(const std::string& name): CppUnit::TestCase(name){}FormatTest::~FormatTest(){}void FormatTest::testChar(){	char c = 'a';	std::string s(format("%c", c));	assert (s == "a");	s = format("%2c", c);	assert (s == " a");	s = format("%-2c", c);	assert (s == "a ");		try	{		s = format("%c", std::string("foo"));		fail("bad argument - must throw");	}	catch (BadCastException&)	{	}}void FormatTest::testInt(){	int i = 42;	std::string s(format("%d", i));	assert (s == "42");	s = format("%4d", i);	assert (s == "  42");	s = format("%04d", i);	assert (s == "0042");	short h = 42;	s = format("%hd", h);	assert (s == "42");	s = format("%4hd", h);	assert (s == "  42");	s = format("%04hd", h);	assert (s == "0042");	unsigned short hu = 42;	s = format("%hu", hu);	assert (s == "42");	s = format("%4hu", hu);	assert (s == "  42");	s = format("%04hu", hu);	assert (s == "0042");		unsigned x = 0x42;	s = format("%x", x);	assert (s == "42");	s = format("%4x", x);	assert (s == "  42");	s = format("%04x", x);	assert (s == "0042");	unsigned o = 042;	s = format("%o", o);	assert (s == "42");	s = format("%4o", o);	assert (s == "  42");	s = format("%04o", o);	assert (s == "0042");	unsigned u = 42;	s = format("%u", u);	assert (s == "42");	s = format("%4u", u);	assert (s == "  42");	s = format("%04u", u);	assert (s == "0042");		long l = 42;	s = format("%ld", l);	assert (s == "42");	s = format("%4ld", l);	assert (s == "  42");	s = format("%04ld", l);	assert (s == "0042");	unsigned long ul = 42;	s = format("%lu", ul);	assert (s == "42");	s = format("%4lu", ul);	assert (s == "  42");	s = format("%04lu", ul);	assert (s == "0042");		unsigned long xl = 0x42;	s = format("%lx", xl);	assert (s == "42");	s = format("%4lx", xl);	assert (s == "  42");	s = format("%04lx", xl);	assert (s == "0042");		Int64 i64 = 42;	s = format("%Ld", i64);	assert (s == "42");	s = format("%4Ld", i64);	assert (s == "  42");	s = format("%04Ld", i64);	assert (s == "0042");		UInt64 ui64 = 42;	s = format("%Lu", ui64);	assert (s == "42");	s = format("%4Lu", ui64);	assert (s == "  42");	s = format("%04Lu", ui64);	assert (s == "0042");		x = 0xaa;	s = format("%x", x);	assert (s == "aa");	s = format("%X", x);	assert (s == "AA");		i = 42;	s = format("%+d", i);	assert (s == "+42");	i = -42;	s = format("%+d", i);	assert (s == "-42");	s = format("%d", i);	assert (s == "-42");	s = format("%d", i);	assert (s == "-42");		x = 0x42;	s = format("%#x", x);	assert (s == "0x42");		try	{		s = format("%d", l);		fail("bad argument - must throw");	}	catch (BadCastException&)	{	}}void FormatTest::testFloatFix(){	double d = 1.5;	std::string s(format("%f", d));	assert (s.find("1.50") == 0);	s = format("%10f", d);	assert (s.find(" 1.50") != std::string::npos);	s = format("%6.2f", d);	assert (s == "  1.50");	s = format("%-6.2f", d);	assert (s == "1.50  ");		float f = 1.5;	s = format("%hf", f);	assert (s.find("1.50") == 0);}void FormatTest::testFloatSci(){	double d = 1.5;	std::string s(format("%e", d));	assert (s.find("1.50") == 0);	assert (s.find("0e+0") != std::string::npos);	s = format("%20e", d);	assert (s.find(" 1.50") != std::string::npos);	assert (s.find("0e+0") != std::string::npos);	s = format("%10.2e", d);	assert (s == " 1.50e+000" || s == "  1.50e+00");	s = format("%-10.2e", d);	assert (s == "1.50e+000 " || s == "1.50e+00  ");	s = format("%-10.2E", d);	assert (s == "1.50E+000 " || s == "1.50E+00  ");}void FormatTest::testString(){	std::string foo("foo");	std::string s(format("%s", foo));	assert (s == "foo");		s = format("%5s", foo);	assert (s == "  foo");	s = format("%-5s", foo);	assert (s == "foo  ");}void FormatTest::testMultiple(){	std::string s(format("aaa%dbbb%4dccc", 1, 2));	assert (s == "aaa1bbb   2ccc");	s = format("%%%d%%%d%%%d", 1, 2, 3);	assert (s == "%1%2%3");		s = format("%d%d%d%d", 1, 2, 3, 4);	assert (s == "1234");	s = format("%d%d%d%d%d", 1, 2, 3, 4, 5);	assert (s == "12345");	s = format("%d%d%d%d%d%d", 1, 2, 3, 4, 5, 6);	assert (s == "123456");}void FormatTest::setUp(){}void FormatTest::tearDown(){}CppUnit::Test* FormatTest::suite(){	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FormatTest");	CppUnit_addTest(pSuite, FormatTest, testChar);	CppUnit_addTest(pSuite, FormatTest, testInt);	CppUnit_addTest(pSuite, FormatTest, testFloatFix);	CppUnit_addTest(pSuite, FormatTest, testFloatSci);	CppUnit_addTest(pSuite, FormatTest, testString);	CppUnit_addTest(pSuite, FormatTest, testMultiple);	return pSuite;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?