From c867a1834ff9ac08214b19e34a71aeae215f00a4 Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Thu, 21 Sep 2017 16:26:04 -0500 Subject: 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). --- test/common/array.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'test/common') 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 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 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 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" }; -- cgit v1.2.3