diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | drumgizmo/drumgizmoc.cc | 3 | ||||
| -rw-r--r-- | src/bytesizeparser.cc | 18 | ||||
| -rw-r--r-- | test/Makefile.am | 12 | ||||
| -rw-r--r-- | test/bytesizeparsertest.cc | 127 | 
5 files changed, 152 insertions, 9 deletions
| @@ -57,6 +57,7 @@ test/semaphoretest  test/enginetest  test/paintertest  test/drumkitcreatortest +test/bytesizeparsertest  test/dgreftest/dgreftest  test/dgreftest/*.mid  test/dgreftest/*.wav diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 6ea6b5d..56b2367 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -214,6 +214,9 @@ int main(int argc, char* argv[])  			{  				printf("%s", version_str);  				printf(usage_str, argv[0]); +				std::cerr << "Stream size should be in <number>[suffix] format "; +				std::cerr << "where [suffix] is k, M, or G." << std::endl; +				std::cerr << "Example: 10M which is 10 * 1024 * 1024 bytes" << std::endl;  				return 1;  			}  			settings.disk_cache_enable = true; diff --git a/src/bytesizeparser.cc b/src/bytesizeparser.cc index 0bab316..329407d 100644 --- a/src/bytesizeparser.cc +++ b/src/bytesizeparser.cc @@ -58,13 +58,18 @@ std::size_t byteSizeParser(const std::string& argument)  	std::string suffix;  	bool error = false; +	if(argument.find('-') != std::string::npos) +	{ +		error = true; +	} +  	try  	{  		stream_size = std::stoi(argument, &suffix_index);  	}  	catch(std::invalid_argument)  	{ -		std::cerr << "Invalid option for diskstreamsize" << std::endl; +		std::cerr << "Invalid argument for diskstreamsize" << std::endl;  		error = true;  	}  	catch(std::out_of_range) @@ -82,17 +87,16 @@ std::size_t byteSizeParser(const std::string& argument)  	}  	if(!error)  	{ -		std::size_t suffix_size = suffixToSize(suffix[0]); -		if (suffix_size) +		std::size_t suffix_size = 1; +		if(suffix_index <= suffix.length())  		{ -			stream_size *= suffix_size; +			suffix_size = suffixToSize(suffix[0]); +  		} +		stream_size *= suffix_size;  	}  	if(error)  	{ -		std::cerr << "Stream size should be in <number>[suffix] format "; -		std::cerr << "where [suffix] is k, M, or G." << std::endl; -		std::cerr << "Example: 10M which is 10 * 1024 * 1024 bytes" << std::endl;  		return 0;  	}  	return stream_size; diff --git a/test/Makefile.am b/test/Makefile.am index 12d4713..58d7f1b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -6,7 +6,7 @@ if ENABLE_TESTS  TESTS = resource enginetest paintertest resampler configfile audiocache \  	audiocachefile audiocacheidmanager audiocacheeventhandler \  	memchecker randomtest atomictest syncedsettingstest imagecachetest \ -	semaphoretest drumkitcreatortest +	semaphoretest drumkitcreatortest bytesizeparsertest  if ENABLE_LV2  TESTS += lv2 @@ -189,7 +189,7 @@ semaphoretest_SOURCES = \  	semaphoretest.cc \  	test.cc -drumkitcreatortest_CXXFLAGS = -DOUTPUT=\"drumkitcreatortest\" $(CPPUNIT_CFLAGS) +drumkitcreatortest_CXXFLAGS = -DOUTPUT=\"drumkitcreatortest\" $(CPPUNIT_CFLAGS) \  	-I$(top_srcdir)/src \  	-I$(top_srcdir)/hugin -DDISABLE_HUGIN  drumkitcreatortest_CFLAGS = -DDISABLE_HUGIN @@ -200,4 +200,12 @@ drumkitcreatortest_SOURCES = \  	drumkit_creator.cc \  	drumkitcreatortest.cc +bytesizeparsertest_CXXFLAGS = -DOUTPUT=\"bytesizeparsertest\" $(CPPUNIT_CFLAGS) \ +	-I$(top_srcdir)/src +bytesizeparsertest_LDFLAGS = $(CPPUNIT_LIBS) +bytesizeparsertest_SOURCES = \ +	$(top_srcdir)/src/bytesizeparser.cc \ +	bytesizeparsertest.cc \ +	test.cc +  endif diff --git a/test/bytesizeparsertest.cc b/test/bytesizeparsertest.cc new file mode 100644 index 0000000..e4776fe --- /dev/null +++ b/test/bytesizeparsertest.cc @@ -0,0 +1,127 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            bytesizeparsertest.cc + * + *  Sun Mar 05 11:44:23 CET 2017 + *  Copyright 2017 Goran Mekić + *  meka@tilda.center + ****************************************************************************/ + +/* + *  This file is part of DrumGizmo. + * + *  DrumGizmo is free software; you can redistribute it and/or modify + *  it under the terms of the GNU Lesser General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  DrumGizmo is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public License + *  along with DrumGizmo; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include <cppunit/extensions/HelperMacros.h> + +#include "bytesizeparser.h" + + +class ByteSizeParserTest +	: public CppUnit::TestFixture +{ +	CPPUNIT_TEST_SUITE(ByteSizeParserTest); +	CPPUNIT_TEST(suffixTest); +	CPPUNIT_TEST(falseSuffixTest); +	CPPUNIT_TEST(falseNumberTest); +	CPPUNIT_TEST(tooBigNumberTest); +	CPPUNIT_TEST_SUITE_END(); + +public: +	void setUp() {} + +	void tearDown() {} + +	void suffixTest() +	{ +		std::size_t computed_size, expected_size; +		std::size_t kilo = 1024, mega = kilo * 1024, giga = mega * 1024; +		computed_size = byteSizeParser("3"); +		expected_size = 3; +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3k"); +		expected_size = 3 * kilo; +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3M"); +		expected_size = 3 * mega; +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3G"); +		expected_size = 3 * giga; +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); +	} + +	void falseSuffixTest() +	{ +		std::size_t computed_size, expected_size = 0; +		computed_size = byteSizeParser("3K"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3m"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3g"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3ddDD"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); +	} + +	void falseNumberTest() +	{ +		std::size_t computed_size, expected_size = 0; +		computed_size = byteSizeParser("K3k"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("-3"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("-3k"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("-3M"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("-3G"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3-"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3-k"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("k-3"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("3-1"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); + +		computed_size = byteSizeParser("   -3"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); +	} + +	void tooBigNumberTest() +	{ +		std::size_t computed_size, expected_size = 0; +		computed_size = byteSizeParser("999999999999999999999999999999999999G"); +		CPPUNIT_ASSERT_EQUAL(expected_size, computed_size); +	} +}; + +// Registers the fixture into the 'registry' +CPPUNIT_TEST_SUITE_REGISTRATION(ByteSizeParserTest); | 
