diff --git a/include/etl/multi_vector.h b/include/etl/multi_vector.h index e657f26d..b9a6698c 100644 --- a/include/etl/multi_vector.h +++ b/include/etl/multi_vector.h @@ -1,68 +1,68 @@ -///\file - -/****************************************************************************** -The MIT License(MIT) - -Embedded Template Library. -https://github.com/ETLCPP/etl -https://www.etlcpp.com - -Copyright(c) 2021 jwellbelove - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files(the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and / or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions : - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -******************************************************************************/ - -#ifndef ETL_MULTI_VECTOR_INCLUDED -#define ETL_MULTI_VECTOR_INCLUDED - -#include "platform.h" -#include "vector.h" - -///\defgroup multi_vector multi_vector -/// A multi dimentional vector. -///\ingroup containers - -namespace etl -{ -#if ETL_CPP11_SUPPORTED - - namespace private_multi_vector - { - template - struct multi_vector_t - { - using type = etl::vector::type, TD1>; - static constexpr size_t Max_Size = TD1; - }; - - template - struct multi_vector_t - { - using type = etl::vector; - static constexpr size_t Max_Size = TD1; - }; - } - - template - using multi_vector = typename private_multi_vector::multi_vector_t::type; -} - -#endif -#endif - +/////\file +// +///****************************************************************************** +//The MIT License(MIT) +// +//Embedded Template Library. +//https://github.com/ETLCPP/etl +//https://www.etlcpp.com +// +//Copyright(c) 2021 jwellbelove +// +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files(the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions : +// +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. +// +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. +//******************************************************************************/ +// +//#ifndef ETL_MULTI_VECTOR_INCLUDED +//#define ETL_MULTI_VECTOR_INCLUDED +// +//#include "platform.h" +//#include "vector.h" +// +/////\defgroup multi_vector multi_vector +///// A multi dimentional vector. +/////\ingroup containers +// +//namespace etl +//{ +//#if ETL_CPP11_SUPPORTED +// +// namespace private_multi_vector +// { +// template +// struct multi_vector_t +// { +// using type = etl::vector::type, TD1>; +// static constexpr size_t Max_Size = TD1; +// }; +// +// template +// struct multi_vector_t +// { +// using type = etl::vector; +// static constexpr size_t Max_Size = TD1; +// }; +// } +// +// template +// using multi_vector = typename private_multi_vector::multi_vector_t::type; +//} +// +//#endif +//#endif +// diff --git a/test/test_multi_vector.cpp b/test/test_multi_vector.cpp index 2f8e9597..c16a2e9c 100644 --- a/test/test_multi_vector.cpp +++ b/test/test_multi_vector.cpp @@ -1,470 +1,527 @@ -/****************************************************************************** -The MIT License(MIT) - -Embedded Template Library. -https://github.com/ETLCPP/etl -https://www.etlcpp.com - -Copyright(c) 2021 jwellbelove - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files(the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and / or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions : - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -******************************************************************************/ - -#include "unit_test_framework.h" - -#include "etl/vector.h" -#include "etl/multi_vector.h" - -#include -#include -#include - -#include "etl/integral_limits.h" - -namespace -{ - SUITE(test_vector) - { - static const size_t SIZE1 = 4UL; - static const size_t SIZE2 = 3UL; - - using Data = etl::multi_vector; - using Compare_Data = std::vector>; - - Compare_Data compare_data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - //************************************************************************* - TEST(test_constructor) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK_EQUAL(data.size(), SIZE1); - CHECK_EQUAL(data.max_size(), SIZE1); - - CHECK_EQUAL(data[0].size(), SIZE2); - CHECK_EQUAL(data[0].max_size(), SIZE2); - } - - //************************************************************************* - TEST(test_assignment) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data other_data; - - other_data = data; - - bool isEqual = std::equal(data.begin(), data.end(), other_data.begin()); - - CHECK(isEqual); - } - - //************************************************************************* - TEST(test_at) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - for (size_t i = 0UL; i < data.size(); ++i) - { - for (size_t j = 0UL; j < data[0].size(); ++j) - { - CHECK_EQUAL(data[i].at(j), compare_data[i].at(j)); - } - } - - CHECK_THROW(data.at(data.size()), etl::vector_out_of_bounds); - CHECK_THROW(data[0].at(data[0].size()), etl::vector_out_of_bounds); - } - - //************************************************************************* - TEST(test_at_const) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - for (size_t i = 0UL; i < data.size(); ++i) - { - for (size_t j = 0UL; j < data[0].size(); ++j) - { - CHECK_EQUAL(data[i].at(j), compare_data[i].at(j)); - } - - CHECK_THROW(data.at(data.size()), etl::vector_out_of_bounds); - } - } - - //************************************************************************* - TEST(test_index_operator) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - for (size_t i = 0UL; i < data.size(); ++i) - { - for (size_t j = 0UL; j < data[0].size(); ++j) - { - CHECK_EQUAL(data[i][j], compare_data[i][j]); - } - } - } - - //************************************************************************* - TEST(test_index_operator_const) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - for (size_t i = 0UL; i < data.size(); ++i) - { - for (size_t j = 0UL; j < data[0].size(); ++j) - { - CHECK_EQUAL(data[i][j], compare_data[i][j]); - } - } - } - - //************************************************************************* - TEST(test_front) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - int& ref = data.front().front(); - CHECK(ref == compare_data.front().front()); - } - - //************************************************************************* - TEST(test_front_const) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - const int& ref = data.front().front(); - CHECK(ref == compare_data.front().front()); - } - - //************************************************************************* - TEST(test_back) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - int& ref = data.back().back(); - CHECK(ref == compare_data.back().back()); - } - - //************************************************************************* - TEST(test_back_const) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - const int& ref = data.back().back(); - CHECK(ref == compare_data.back().back()); - } - - //************************************************************************* - TEST(test_data) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - bool isEqual = std::equal(data.begin(), data.end(), data.data()); - - CHECK(isEqual); - } - - //************************************************************************* - TEST(test_data_const) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - bool isEqual = std::equal(data.begin(), data.end(), data.data()); - - CHECK(isEqual); - } - - //************************************************************************* - TEST(test_begin) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data.begin() == &data[0]); - CHECK(data[0].begin() == &data[0][0]); - CHECK(data[1].begin() == &data[1][0]); - CHECK(data[2].begin() == &data[2][0]); - CHECK(data[3].begin() == &data[3][0]); - } - - //************************************************************************* - TEST(test_end) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data.end() == &data[SIZE1]); - CHECK(data[0].end() == &data[0][SIZE2]); - CHECK(data[1].end() == &data[1][SIZE2]); - CHECK(data[2].end() == &data[2][SIZE2]); - CHECK(data[3].end() == &data[3][SIZE2]); - } - - //************************************************************************* - TEST(test_cbegin) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data.cbegin() == &data[0]); - CHECK(data[0].cbegin() == &data[0][0]); - CHECK(data[1].cbegin() == &data[1][0]); - CHECK(data[2].cbegin() == &data[2][0]); - CHECK(data[3].cbegin() == &data[3][0]); - } - - //************************************************************************* - TEST(test_cend) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data.cend() == &data[SIZE1]); - CHECK(data[0].cend() == &data[0][SIZE2]); - CHECK(data[1].cend() == &data[1][SIZE2]); - CHECK(data[2].cend() == &data[2][SIZE2]); - CHECK(data[3].cend() == &data[3][SIZE2]); - } - - //************************************************************************* - TEST(test_rbegin) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - typedef etl::multi_vector Inner; - - CHECK(data.rbegin() == Data::reverse_iterator(&data[SIZE1])); - CHECK(data[0].rbegin() == Inner::reverse_iterator(&data[0][SIZE2])); - CHECK(data[1].rbegin() == Inner::reverse_iterator(&data[1][SIZE2])); - CHECK(data[2].rbegin() == Inner::reverse_iterator(&data[2][SIZE2])); - CHECK(data[3].rbegin() == Inner::reverse_iterator(&data[3][SIZE2])); - } - - //************************************************************************* - TEST(test_rend) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - typedef etl::multi_vector Inner; - - CHECK(data.rend() == Data::reverse_iterator(&data[0])); - CHECK(data[0].rend() == Inner::reverse_iterator(&data[0][0])); - CHECK(data[1].rend() == Inner::reverse_iterator(&data[1][0])); - CHECK(data[2].rend() == Inner::reverse_iterator(&data[2][0])); - CHECK(data[3].rend() == Inner::reverse_iterator(&data[3][0])); - } - - //************************************************************************* - TEST(test_crbegin) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - typedef etl::multi_vector Inner; - - CHECK(data.rbegin() == Data::const_reverse_iterator(&data[SIZE1])); - CHECK(data[0].rbegin() == Inner::const_reverse_iterator(&data[0][SIZE2])); - CHECK(data[1].rbegin() == Inner::const_reverse_iterator(&data[1][SIZE2])); - CHECK(data[2].rbegin() == Inner::const_reverse_iterator(&data[2][SIZE2])); - CHECK(data[3].rbegin() == Inner::const_reverse_iterator(&data[3][SIZE2])); - } - - //************************************************************************* - TEST(test_crend) - { - const Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - typedef etl::multi_vector Inner; - - CHECK(data.rend() == Data::const_reverse_iterator(&data[0])); - CHECK(data[0].rend() == Inner::const_reverse_iterator(&data[0][0])); - CHECK(data[1].rend() == Inner::const_reverse_iterator(&data[1][0])); - CHECK(data[2].rend() == Inner::const_reverse_iterator(&data[2][0])); - CHECK(data[3].rend() == Inner::const_reverse_iterator(&data[3][0])); - } - - //************************************************************************* - TEST(test_empty) - { - Data data; - - CHECK(data.empty()); - CHECK(data[0].empty()); - } - - //************************************************************************* - TEST(test_size) - { - Data data; - - CHECK_EQUAL(0, data.size()); - CHECK_EQUAL(0, data[0].size()); - } - - //************************************************************************* - TEST(test_max_size) - { - Data data; - - data.resize(1); - - CHECK_EQUAL(SIZE1, data.max_size()); - CHECK_EQUAL(SIZE2, data[0].max_size()); - } - - //************************************************************************* - TEST(test_swap) - { - Data data1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data data2 = { { { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 }, { 21, 22, 23 } } }; - - Data data1b = { { { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 }, { 21, 22, 23 } } }; - Data data2b = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - using ETL_OR_STD::swap; - swap(data1, data2); - - CHECK(std::equal(data1b.begin(), data1b.end(), data1.begin())); - CHECK(std::equal(data2b.begin(), data2b.end(), data2.begin())); - } - - //************************************************************************* - TEST(test_assign) - { - Data initial = { { { -1, -1, -1 }, { -1, -1, -1 }, { -1, -1, -1 }, { -1, -1, -1 } } }; - Data source = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data check1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { -1, -1, -1 }, { -1, -1, -1 } } }; - Data check2 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 99, 99, 99 }, { 99, 99, 99 } } }; - - typedef etl::multi_vector Inner; - const Inner ninetynine = { { 99, 99, 99 } }; - - Data data; - - // Initial data. - data.assign(std::begin(initial), std::end(initial)); - bool isEqual = std::equal(data.begin(), data.end(), std::begin(initial)); - CHECK(isEqual); - - // Assign smaller. - data.assign(std::begin(initial), std::end(initial)); - data.assign(&source[0], &source[2]); - isEqual = std::equal(data.begin(), data.end(), std::begin(check1)); - CHECK(isEqual); - } - - //************************************************************************* - TEST(test_insert_value) - { - Data initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } } }; - Data check1 = { { { 9, 10, 11 }, { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } } }; - Data check2 = { { { 0, 1, 2 }, { 9, 10, 11 }, { 3, 4, 5 }, { 6, 7, 8 } } }; - Data check3 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - typedef etl::multi_vector Inner; - const Inner inserted = { { 9, 10, 11 } }; - - Data data; - Data::iterator result; - - // Insert beginning. - data.assign(std::begin(initial), std::end(initial)); - result = data.insert(data.begin(), inserted); - CHECK(data[0] == *result); - bool isEqual = std::equal(data.begin(), data.end(), check1.begin()); - CHECK(isEqual); - - // Insert middle. - data.assign(std::begin(initial), std::end(initial)); - result = data.insert(data.begin() + 1U, inserted); - CHECK(data[1] == *result); - isEqual = std::equal(data.begin(), data.end(), check2.begin()); - CHECK(isEqual); - - // Insert end. - data.assign(std::begin(initial), std::end(initial)); - result = data.insert(data.begin() + 3U, inserted); - CHECK(data[3] == *result); - isEqual = std::equal(data.begin(), data.end(), check3.begin()); - CHECK(isEqual); - } - - //************************************************************************* - TEST(test_equal) - { - Data data1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data data2 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data1 == data2); - } - - //************************************************************************* - TEST(test_not_equal) - { - Data data1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data data2 = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(data1 != data2); - } - - //************************************************************************* - TEST(test_less_than) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(lesser < data); - CHECK(!(data < data)); - CHECK(!(greater < data)); - } - - //************************************************************************* - TEST(test_less_than_equal) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(lesser <= data); - CHECK(data <= data); - CHECK(!(greater <= data)); - } - - //************************************************************************* - TEST(test_greater_than) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(greater > data); - CHECK(!(data > data)); - CHECK(!(lesser > data)); - } - - //************************************************************************* - TEST(test_greater_than_equal) - { - Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; - - CHECK(greater >= data); - CHECK(data >= data); - CHECK(!(lesser >= data)); - } - }; -} +///****************************************************************************** +//The MIT License(MIT) +// +//Embedded Template Library. +//https://github.com/ETLCPP/etl +//https://www.etlcpp.com +// +//Copyright(c) 2021 jwellbelove +// +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files(the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions : +// +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. +// +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. +//******************************************************************************/ +// +//#include "unit_test_framework.h" +// +//#include "etl/vector.h" +//#include "etl/multi_vector.h" +// +//#include +//#include +//#include +//#include +// +//#include "etl/integral_limits.h" +// +//namespace +//{ +// static const size_t SIZE1 = 4UL; +// static const size_t SIZE2 = 3UL; +// +// using Data = etl::multi_vector; +// using Compare_Data = std::vector>; +// using Array = std::array, SIZE1>; +// +// void Copy(const Array& from, Data& to) +// { +// to.resize(SIZE1); +// +// for (size_t i = 0U; i < SIZE1; ++i) +// { +// to[i].resize(SIZE2); +// +// for (size_t j = 0U; j < SIZE2; ++j) +// { +// to[i][j] = from[i][j]; +// } +// } +// } +// +// Compare_Data compare_data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// SUITE(test_vector) +// { +// //************************************************************************* +// TEST(test_constructor) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// CHECK_EQUAL(data.size(), SIZE1); +// CHECK_EQUAL(data.max_size(), SIZE1); +// +// CHECK_EQUAL(data[0].size(), SIZE2); +// CHECK_EQUAL(data[0].max_size(), SIZE2); +// } +// +// //************************************************************************* +// TEST(test_assignment) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Data other_data; +// Copy(initial, data); +// +// other_data = data; +// +// bool isEqual = std::equal(data.begin(), data.end(), other_data.begin()); +// +// CHECK(isEqual); +// } +// +// //************************************************************************* +// TEST(test_at) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// for (size_t i = 0UL; i < data.size(); ++i) +// { +// for (size_t j = 0UL; j < data[0].size(); ++j) +// { +// CHECK_EQUAL(data[i].at(j), compare_data[i].at(j)); +// } +// } +// +// CHECK_THROW(data.at(data.size()), etl::vector_out_of_bounds); +// CHECK_THROW(data[0].at(data[0].size()), etl::vector_out_of_bounds); +// } +// +// //************************************************************************* +// TEST(test_at_const) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// for (size_t i = 0UL; i < data.size(); ++i) +// { +// for (size_t j = 0UL; j < data[0].size(); ++j) +// { +// CHECK_EQUAL(data[i].at(j), compare_data[i].at(j)); +// } +// +// CHECK_THROW(data.at(data.size()), etl::vector_out_of_bounds); +// } +// } +// +// //************************************************************************* +// TEST(test_index_operator) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// for (size_t i = 0UL; i < data.size(); ++i) +// { +// for (size_t j = 0UL; j < data[0].size(); ++j) +// { +// CHECK_EQUAL(data[i][j], compare_data[i][j]); +// } +// } +// } +// +// //************************************************************************* +// TEST(test_index_operator_const) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// for (size_t i = 0UL; i < data.size(); ++i) +// { +// for (size_t j = 0UL; j < data[0].size(); ++j) +// { +// CHECK_EQUAL(data[i][j], compare_data[i][j]); +// } +// } +// } +// +// //************************************************************************* +// TEST(test_front) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// int& ref = data.front().front(); +// CHECK(ref == compare_data.front().front()); +// } +// +// //************************************************************************* +// TEST(test_front_const) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// const int& ref = data.front().front(); +// CHECK(ref == compare_data.front().front()); +// } +// +// //************************************************************************* +// TEST(test_back) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// int& ref = data.back().back(); +// CHECK(ref == compare_data.back().back()); +// } +// +// //************************************************************************* +// TEST(test_back_const) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// const int& ref = data.back().back(); +// CHECK(ref == compare_data.back().back()); +// } +// +// //************************************************************************* +// TEST(test_data) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// bool isEqual = std::equal(data.begin(), data.end(), data.data()); +// +// CHECK(isEqual); +// } +// +// //************************************************************************* +// TEST(test_data_const) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// bool isEqual = std::equal(data.begin(), data.end(), data.data()); +// +// CHECK(isEqual); +// } +// +// //************************************************************************* +// TEST(test_begin) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// CHECK(data.begin() == &data[0]); +// CHECK(data[0].begin() == &data[0][0]); +// CHECK(data[1].begin() == &data[1][0]); +// CHECK(data[2].begin() == &data[2][0]); +// CHECK(data[3].begin() == &data[3][0]); +// } +// +// //************************************************************************* +// TEST(test_end) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// CHECK(data.end() == &data[SIZE1]); +// CHECK(data[0].end() == &data[0][SIZE2]); +// CHECK(data[1].end() == &data[1][SIZE2]); +// CHECK(data[2].end() == &data[2][SIZE2]); +// CHECK(data[3].end() == &data[3][SIZE2]); +// } +// +// //************************************************************************* +// TEST(test_cbegin) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// CHECK(data.cbegin() == &data[0]); +// CHECK(data[0].cbegin() == &data[0][0]); +// CHECK(data[1].cbegin() == &data[1][0]); +// CHECK(data[2].cbegin() == &data[2][0]); +// CHECK(data[3].cbegin() == &data[3][0]); +// } +// +// //************************************************************************* +// TEST(test_cend) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// CHECK(data.cend() == &data[SIZE1]); +// CHECK(data[0].cend() == &data[0][SIZE2]); +// CHECK(data[1].cend() == &data[1][SIZE2]); +// CHECK(data[2].cend() == &data[2][SIZE2]); +// CHECK(data[3].cend() == &data[3][SIZE2]); +// } +// +// //************************************************************************* +// TEST(test_rbegin) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// typedef etl::multi_vector Inner; +// +// CHECK(data.rbegin() == Data::reverse_iterator(&data[SIZE1])); +// CHECK(data[0].rbegin() == Inner::reverse_iterator(&data[0][SIZE2])); +// CHECK(data[1].rbegin() == Inner::reverse_iterator(&data[1][SIZE2])); +// CHECK(data[2].rbegin() == Inner::reverse_iterator(&data[2][SIZE2])); +// CHECK(data[3].rbegin() == Inner::reverse_iterator(&data[3][SIZE2])); +// } +// +// //************************************************************************* +// TEST(test_rend) +// { +// Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// typedef etl::multi_vector Inner; +// +// CHECK(data.rend() == Data::reverse_iterator(&data[0])); +// CHECK(data[0].rend() == Inner::reverse_iterator(&data[0][0])); +// CHECK(data[1].rend() == Inner::reverse_iterator(&data[1][0])); +// CHECK(data[2].rend() == Inner::reverse_iterator(&data[2][0])); +// CHECK(data[3].rend() == Inner::reverse_iterator(&data[3][0])); +// } +// +// //************************************************************************* +// TEST(test_crbegin) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// typedef etl::multi_vector Inner; +// +// CHECK(data.rbegin() == Data::const_reverse_iterator(&data[SIZE1])); +// CHECK(data[0].rbegin() == Inner::const_reverse_iterator(&data[0][SIZE2])); +// CHECK(data[1].rbegin() == Inner::const_reverse_iterator(&data[1][SIZE2])); +// CHECK(data[2].rbegin() == Inner::const_reverse_iterator(&data[2][SIZE2])); +// CHECK(data[3].rbegin() == Inner::const_reverse_iterator(&data[3][SIZE2])); +// } +// +// //************************************************************************* +// TEST(test_crend) +// { +// const Array initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data data; +// Copy(initial, data); +// +// typedef etl::multi_vector Inner; +// +// CHECK(data.rend() == Data::const_reverse_iterator(&data[0])); +// CHECK(data[0].rend() == Inner::const_reverse_iterator(&data[0][0])); +// CHECK(data[1].rend() == Inner::const_reverse_iterator(&data[1][0])); +// CHECK(data[2].rend() == Inner::const_reverse_iterator(&data[2][0])); +// CHECK(data[3].rend() == Inner::const_reverse_iterator(&data[3][0])); +// } +// +// //************************************************************************* +// TEST(test_empty) +// { +// Data data; +// +// CHECK(data.empty()); +// CHECK(data[0].empty()); +// } +// +// //************************************************************************* +// TEST(test_size) +// { +// Data data; +// +// CHECK_EQUAL(0, data.size()); +// CHECK_EQUAL(0, data[0].size()); +// } +// +// //************************************************************************* +// TEST(test_max_size) +// { +// Data data; +// +// data.resize(1); +// +// CHECK_EQUAL(SIZE1, data.max_size()); +// CHECK_EQUAL(SIZE2, data[0].max_size()); +// } +// +// //************************************************************************* +// TEST(test_swap) +// { +// Array initial1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Array initial2 = { { { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 }, { 21, 22, 23 } } }; +// +// Array initial1b = { { { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 }, { 21, 22, 23 } } }; +// Array initial2b = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// using ETL_OR_STD::swap; +// swap(data1, data2); +// +// CHECK(std::equal(data1b.begin(), data1b.end(), data1.begin())); +// CHECK(std::equal(data2b.begin(), data2b.end(), data2.begin())); +// } +// +// //************************************************************************* +// TEST(test_assign) +// { +// Data initial = { { { -1, -1, -1 }, { -1, -1, -1 }, { -1, -1, -1 }, { -1, -1, -1 } } }; +// Data source = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data check1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { -1, -1, -1 }, { -1, -1, -1 } } }; +// Data check2 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 99, 99, 99 }, { 99, 99, 99 } } }; +// +// typedef etl::multi_vector Inner; +// const Inner ninetynine = { { 99, 99, 99 } }; +// +// Data data; +// +// // Initial data. +// data.assign(std::begin(initial), std::end(initial)); +// bool isEqual = std::equal(data.begin(), data.end(), std::begin(initial)); +// CHECK(isEqual); +// +// // Assign smaller. +// data.assign(std::begin(initial), std::end(initial)); +// data.assign(&source[0], &source[2]); +// isEqual = std::equal(data.begin(), data.end(), std::begin(check1)); +// CHECK(isEqual); +// } +// +// //************************************************************************* +// TEST(test_insert_value) +// { +// Data initial = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } } }; +// Data check1 = { { { 9, 10, 11 }, { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } } }; +// Data check2 = { { { 0, 1, 2 }, { 9, 10, 11 }, { 3, 4, 5 }, { 6, 7, 8 } } }; +// Data check3 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// typedef etl::multi_vector Inner; +// const Inner inserted = { { 9, 10, 11 } }; +// +// Data data; +// Data::iterator result; +// +// // Insert beginning. +// data.assign(std::begin(initial), std::end(initial)); +// result = data.insert(data.begin(), inserted); +// CHECK(data[0] == *result); +// bool isEqual = std::equal(data.begin(), data.end(), check1.begin()); +// CHECK(isEqual); +// +// // Insert middle. +// data.assign(std::begin(initial), std::end(initial)); +// result = data.insert(data.begin() + 1U, inserted); +// CHECK(data[1] == *result); +// isEqual = std::equal(data.begin(), data.end(), check2.begin()); +// CHECK(isEqual); +// +// // Insert end. +// data.assign(std::begin(initial), std::end(initial)); +// result = data.insert(data.begin() + 3U, inserted); +// CHECK(data[3] == *result); +// isEqual = std::equal(data.begin(), data.end(), check3.begin()); +// CHECK(isEqual); +// } +// +// //************************************************************************* +// TEST(test_equal) +// { +// Array initial1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Array initial2 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(data1 == data2); +// } +// +// //************************************************************************* +// TEST(test_not_equal) +// { +// Array initial1 = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Array initial2 = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(data1 != data2); +// } +// +// //************************************************************************* +// TEST(test_less_than) +// { +// Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(lesser < data); +// CHECK(!(data < data)); +// CHECK(!(greater < data)); +// } +// +// //************************************************************************* +// TEST(test_less_than_equal) +// { +// Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(lesser <= data); +// CHECK(data <= data); +// CHECK(!(greater <= data)); +// } +// +// //************************************************************************* +// TEST(test_greater_than) +// { +// Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(greater > data); +// CHECK(!(data > data)); +// CHECK(!(lesser > data)); +// } +// +// //************************************************************************* +// TEST(test_greater_than_equal) +// { +// Data data = { { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data lesser = { { { 0, 1, 2 }, { 3, 4, 4 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// Data greater = { { { 0, 1, 2 }, { 3, 4, 6 }, { 6, 7, 8 }, { 9, 10, 11 } } }; +// +// CHECK(greater >= data); +// CHECK(data >= data); +// CHECK(!(lesser >= data)); +// } +// }; +//}