aboutsummaryrefslogtreecommitdiff
path: root/test/common
diff options
context:
space:
mode:
authorColin Snover2017-09-21 16:26:04 -0500
committerEugene Sandulenko2017-09-30 11:17:53 +0200
commitc867a1834ff9ac08214b19e34a71aeae215f00a4 (patch)
treeda4893b054f06ba994c0352df6a2cd13bdbdbba4 /test/common
parent8bc745fb55c55623d8ada90198db8cdc8b6be8e0 (diff)
downloadscummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.tar.gz
scummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.tar.bz2
scummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.zip
COMMON: Add standard count & count+copy array constructors
These are additions to match C++11 std::vector common init patterns, to make Common::Array cover more common use cases where C-style arrays are currently used (and should not be).
Diffstat (limited to 'test/common')
-rw-r--r--test/common/array.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/common/array.h b/test/common/array.h
index 515dae3926..7506162821 100644
--- a/test/common/array.h
+++ b/test/common/array.h
@@ -298,6 +298,49 @@ class ArrayTestSuite : public CxxTest::TestSuite
TS_ASSERT_EQUALS(array2.size(), (unsigned int)3);
}
+ class Copyable {
+ bool _copied;
+ int _value;
+ Copyable &operator=(Copyable &);
+ public:
+ Copyable() : _copied(false), _value(1) {}
+ explicit Copyable(const int v) : _copied(false), _value(v) {}
+ Copyable(const Copyable &other) : _copied(true), _value(other._value) {}
+ bool copied() const { return _copied; }
+ int value() const { return _value; }
+ };
+
+ void test_array_constructor_count() {
+ Common::Array<int> array(10);
+ TS_ASSERT_EQUALS(array.size(), 10U);
+ TS_ASSERT_EQUALS(array[0], 0);
+ TS_ASSERT_EQUALS(array[9], 0);
+ }
+
+ void test_array_constructor_count_copy_value() {
+ Common::Array<int> trivial(5, 1);
+ TS_ASSERT_EQUALS(trivial.size(), 5U);
+ TS_ASSERT_EQUALS(trivial[0], 1);
+ TS_ASSERT_EQUALS(trivial[4], 1);
+
+ Copyable c(123);
+ typedef Common::Array<Copyable> NonTrivialArray;
+
+ NonTrivialArray nonTrivialCopy(3, c);
+ TS_ASSERT_EQUALS(nonTrivialCopy.size(), 3U);
+ for (NonTrivialArray::size_type i = 0; i < nonTrivialCopy.size(); ++i) {
+ TS_ASSERT_EQUALS(nonTrivialCopy[0].value(), 123);
+ TS_ASSERT(nonTrivialCopy[0].copied());
+ }
+
+ NonTrivialArray nonTrivialDefault(3);
+ TS_ASSERT_EQUALS(nonTrivialDefault.size(), 3U);
+ for (NonTrivialArray::size_type i = 0; i < nonTrivialDefault.size(); ++i) {
+ TS_ASSERT_EQUALS(nonTrivialDefault[0].value(), 1);
+ TS_ASSERT(!nonTrivialDefault[0].copied());
+ }
+ }
+
void test_array_constructor_str() {
const char *array1[] = { "a", "b", "c" };