summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--drumgizmo/drumgizmoc.cc3
-rw-r--r--src/bytesizeparser.cc18
-rw-r--r--test/Makefile.am12
-rw-r--r--test/bytesizeparsertest.cc127
5 files changed, 152 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 9486c44..b2d9feb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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);