On Sun, Apr 13, 2025 at 12:13 PM François Dumont <frs.dum...@gmail.com> wrote:
> > On 11/04/2025 08:36, Tomasz Kaminski wrote: > > > > On Thu, Apr 10, 2025 at 10:47 PM Jonathan Wakely <jwak...@redhat.com> > wrote: > >> On 10/04/25 22:36 +0200, François Dumont wrote: >> >After running the test with -fno-exceptions option we rather need this >> >patch. >> > >> >Ok to commit ? >> > >> >François >> > >> > >> >On 10/04/2025 21:08, François Dumont wrote: >> >>Hi >> >> >> >> No problem detected now that we really test std::deque >> >>shrink_to_fit implementation. >> >> >> >> libstdc++: Add std::deque<>::shrink_to_fit test >> >> >> >> The existing test is currently testing std::vector. Make it test >> >>std::deque. >> >> >> >> libstdc++-v3/ChangeLog: >> >> >> >> * >> >>testsuite/23_containers/deque/capacity/shrink_to_fit.cc: Adapt test >> >> to check std::deque shrink_to_fit method. >> >> >> >>Tested under Linux x64. >> >> >> >>Ok to commit ? >> >> >> >>François >> >> >diff --git >> a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc >> b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc >> >index 7cb67079214..9c8b3a926e8 100644 >> >--- >> a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc >> >+++ >> b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc >> >@@ -1,4 +1,5 @@ >> > // { dg-do run { target c++11 } } >> >+// { dg-add-options no_pch } >> >> Tests using replacement_memory_operators.h need: >> >> // { dg-require-effective-target std_allocator_new } >> // { dg-xfail-run-if "AIX operator new" { powerpc-ibm-aix* } } >> >> See e.g. 23_containers/unordered_set/96088.cc >> > Thanks, I new I needed to add something like that but then forgot to amend > my test. > > > >> > >> > // 2010-01-08 Paolo Carlini <paolo.carl...@oracle.com> >> > >> >@@ -19,18 +20,39 @@ >> > // with this library; see the file COPYING3. If not see >> > // <http://www.gnu.org/licenses/>. >> > >> >-#include <vector> >> >+#define _GLIBCXX_DEQUE_BUF_SIZE sizeof(int) * 3 >> >> Couldn't the test just create more elements, instead of modifying the >> internals? We should test it using the default parameters, no? >> > Sounds better indeed, done using std::__deque_buf_size extension. > > > In from_range test I have used a class that contains some padding, > to be able to fill the deque buffer, while still test with few elements, > > struct EightInBuf > > { > EightInBuf(int x) : elems{x} > { } > > private: > int elems[512 / (sizeof(int) * 8)]; > > friend constexpr bool operator==(EightInBuf const& lhs, int rhs) > { return lhs.elems[0] == rhs; } > }; > > > > > It is a nice alternative even if you are still relying on the 512 > implementation detail hidden by _GLIBCXX_DEQUE_BUF_SIZE macro. > > This is why I preferred to use__deque_buf_size. > When using _GLIBCXX_DEBUG this function will be defined inside std::__cxx1998 namespace, not in the std directly. There is a macro _GLIBCXX_STD_C that can be used to refer to it, but it works only inside std namespace. > >+#include <deque> >> > #include <testsuite_hooks.h> >> >+#include <replacement_memory_operators.h> >> > >> > // libstdc++/42573 >> > void test01() >> > { >> >- std::vector<int> d(100); >> >+ __gnu_test::counter::reset(); >> >+ >> >+ std::deque<int> d; >> > d.push_back(1); >> > d.push_back(1); >> >- // VERIFY( d.size() < d.capacity() ); >> >+ d.push_back(1); >> >+ d.pop_front(); >> >+ VERIFY( d.size() == 2 ); >> >+ // 1 node array allocation + 2 node allocation = 3. >> >+ VERIFY( __gnu_test::counter::count() == 3 ); >> >+ VERIFY( __gnu_test::counter::get()._M_increments == 3 ); >> >+ >> > d.shrink_to_fit(); >> >- // VERIFY( d.size() == d.capacity() ); >> >+ VERIFY( d.size() == 2 ); >> >+#if __cpp_exceptions >> >+ // 1 node array allocation + 1 node allocation = 2. >> >+ const int expected_count = 2; >> >+ const int expected_increments = 2; >> >+#else >> >> It would be useful to add a comment here saying that shrink_to_fit() >> is a no-op for -fno-exceptions because we choose not to reallocate. >> >> Added. > > Ok to commit ? > > François > >