diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-06-15 10:08:20 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-06-17 15:08:07 +0200 |
commit | 470752f50c146b449b1c9bdccc36ed031535663c (patch) | |
tree | 92e5af3b31e63e6cffdcc51717d1bd6584c59729 /o3tl | |
parent | 561a02ec72cf963d7cd59cfb9a183c1032f0861b (diff) |
create o3tl::array_view
A very basic implementation of the proposed std::array_view, similar to
clang's llvm::ArrayRef.
Mostly cribbed from the string_view implementation :-)
Use it for the SfxDispatcher::setSlotFilter function
Change-Id: Ife7e4971741b41827e145787899872c9b2bea82b
Reviewed-on: https://gerrit.libreoffice.org/38817
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'o3tl')
-rw-r--r-- | o3tl/CppunitTest_o3tl_tests.mk | 1 | ||||
-rw-r--r-- | o3tl/qa/test-array_view.cxx | 79 |
2 files changed, 80 insertions, 0 deletions
diff --git a/o3tl/CppunitTest_o3tl_tests.mk b/o3tl/CppunitTest_o3tl_tests.mk index 55c1fee84a20..01a7cc0cbdc5 100644 --- a/o3tl/CppunitTest_o3tl_tests.mk +++ b/o3tl/CppunitTest_o3tl_tests.mk @@ -27,6 +27,7 @@ $(eval $(call gb_CppunitTest_use_libraries,o3tl_tests,\ $(eval $(call gb_CppunitTest_add_exception_objects,o3tl_tests,\ o3tl/qa/cow_wrapper_clients \ + o3tl/qa/test-array_view \ o3tl/qa/test-cow_wrapper \ o3tl/qa/test-lru_map \ o3tl/qa/test-sorted_vector \ diff --git a/o3tl/qa/test-array_view.cxx b/o3tl/qa/test-array_view.cxx new file mode 100644 index 000000000000..3a19c093304a --- /dev/null +++ b/o3tl/qa/test-array_view.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include <stdexcept> + +#include <cppunit/TestAssert.h> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <o3tl/array_view.hxx> + +namespace { + +class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testOperations); + CPPUNIT_TEST_SUITE_END(); + + + void testOperations() { + int some_data[] { 1, 2, 3 }; + o3tl::array_view<int> v(some_data); + + CPPUNIT_ASSERT_EQUAL(1, *v.begin()); + CPPUNIT_ASSERT_EQUAL( + o3tl::array_view<int>::difference_type(3), v.end() - v.begin()); + CPPUNIT_ASSERT_EQUAL(1, *v.cbegin()); + CPPUNIT_ASSERT_EQUAL( + o3tl::array_view<int>::difference_type(3), v.cend() - v.cbegin()); + CPPUNIT_ASSERT_EQUAL(3, *v.rbegin()); + CPPUNIT_ASSERT_EQUAL( + o3tl::array_view<int>::difference_type(3), v.rend() - v.rbegin()); + CPPUNIT_ASSERT_EQUAL(3, *v.crbegin()); + CPPUNIT_ASSERT_EQUAL( + o3tl::array_view<int>::difference_type(3), v.crend() - v.crbegin()); + CPPUNIT_ASSERT_EQUAL(o3tl::array_view<int>::size_type(3), v.size()); + CPPUNIT_ASSERT_EQUAL(o3tl::array_view<int>::size_type(3), v.length()); + CPPUNIT_ASSERT_EQUAL(o3tl::array_view<int>::npos - 1, v.max_size()); + CPPUNIT_ASSERT(!v.empty()); + CPPUNIT_ASSERT_EQUAL(2, v[1]); + try { + v.at(o3tl::array_view<int>::npos); + CPPUNIT_FAIL("missing exception"); + } catch (std::out_of_range &) {} + CPPUNIT_ASSERT_EQUAL(1, v.at(0)); + CPPUNIT_ASSERT_EQUAL(3, v.at(2)); + try { + v.at(3); + CPPUNIT_FAIL("missing exception"); + } catch (std::out_of_range &) {} + CPPUNIT_ASSERT_EQUAL(1, v.front()); + CPPUNIT_ASSERT_EQUAL(3, v.back()); + CPPUNIT_ASSERT_EQUAL(1, *v.data()); + { + int d1[] { 1, 2 }; + int d2[] { 3, 4, 5, 6 }; + o3tl::array_view<int> v1( d1 ); + o3tl::array_view<int> v2( d2 ); + v1.swap(v2); + CPPUNIT_ASSERT_EQUAL(o3tl::array_view<int>::size_type(4), v1.size()); + CPPUNIT_ASSERT_EQUAL(o3tl::array_view<int>::size_type(2), v2.size()); + } + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ |