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
>
>

Reply via email to