/* Self tests for the iterator_range class. Copyright (C) 2026 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "gdbsupport/selftest.h" #include "gdbsupport/iterator-range.h" #include "int-array-iterator.h" namespace selftests { using int_array_iterator_range = iterator_range; static void test_iterator_range_1 (int_array_iterator_range &r, int array[], int size, int_array_iterator &begin, int_array_iterator &end) { SELF_CHECK (r.begin () == begin); SELF_CHECK (r.end () == end); SELF_CHECK (r.size () == size); SELF_CHECK (r.empty () == (size == 0)); int j = 0; for (auto i : r) { SELF_CHECK (j < size); SELF_CHECK (i == array[j]); j++; } SELF_CHECK (j == size); } static void test_iterator_range () { int array[] = { 4, 4, 5, 6, 7, 8, 9 }; int array_size = ARRAY_SIZE (array); int_array_iterator begin (array, array_size); int_array_iterator end; { /* Constructor using begin and end. */ auto r = int_array_iterator_range (begin, end); test_iterator_range_1 (r, array, array_size, begin, end); } { /* Constructor using begin, assuming end can be default-constructed. */ auto r2 = int_array_iterator_range (begin); test_iterator_range_1 (r2, array, array_size, begin, end); } { /* Empty range. */ auto r3 = int_array_iterator_range (); test_iterator_range_1 (r3, nullptr, 0, end, end); } { auto r4 = int_array_iterator_range (begin, end); /* Copy constructor. */ auto r5 (r4); test_iterator_range_1 (r5, array, array_size, begin, end); /* Move constructor. */ auto r6 (std::move (r4)); test_iterator_range_1 (r6, array, array_size, begin, end); } { const auto r7 = int_array_iterator_range (begin, end); /* Const copy constructor. */ auto r8 (r7); test_iterator_range_1 (r8, array, array_size, begin, end); } } } /* namespace selftests */ INIT_GDB_FILE (iterator_range_selftests) { selftests::register_test ("iterator_range", selftests::test_iterator_range); }