diff options
Diffstat (limited to 'gdb/unittests/memrange-selftests.c')
-rw-r--r-- | gdb/unittests/memrange-selftests.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/gdb/unittests/memrange-selftests.c b/gdb/unittests/memrange-selftests.c new file mode 100644 index 0000000..e4349b6 --- /dev/null +++ b/gdb/unittests/memrange-selftests.c @@ -0,0 +1,115 @@ +/* Self tests for mem ranges for GDB, the GNU debugger. + + Copyright (C) 2017 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 <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "selftest.h" +#include "memrange.h" + +namespace selftests { +namespace memrange_tests { + +static void +normalize_mem_ranges_tests () +{ + /* Empty vector. */ + { + std::vector<mem_range> ranges; + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 0); + } + + /* With one range. */ + { + std::vector<mem_range> ranges; + + ranges.emplace_back (10, 20); + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 1); + SELF_CHECK (ranges[0] == mem_range (10, 20)); + } + + /* Completely disjoint ranges. */ + { + std::vector<mem_range> ranges; + + ranges.emplace_back (20, 1); + ranges.emplace_back (10, 1); + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 2); + SELF_CHECK (ranges[0] == mem_range (10, 1)); + SELF_CHECK (ranges[1] == mem_range (20, 1)); + } + + /* Overlapping and contiguous ranges. */ + { + std::vector<mem_range> ranges; + + ranges.emplace_back (5, 10); + ranges.emplace_back (10, 10); + ranges.emplace_back (15, 10); + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 1); + SELF_CHECK (ranges[0] == mem_range (5, 20)); + } + + /* Duplicate ranges. */ + { + std::vector<mem_range> ranges; + + ranges.emplace_back (10, 10); + ranges.emplace_back (10, 10); + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 1); + SELF_CHECK (ranges[0] == mem_range (10, 10)); + } + + /* Range completely inside another. */ + { + std::vector<mem_range> ranges; + + ranges.emplace_back (14, 2); + ranges.emplace_back (10, 10); + + normalize_mem_ranges (&ranges); + + SELF_CHECK (ranges.size () == 1); + SELF_CHECK (ranges[0] == mem_range (10, 10)); + } +} + +} /* namespace memrange_tests */ +} /* namespace selftests */ + +void +_initialize_memrange_selftests () +{ + selftests::register_test + ("normalize_mem_ranges", + selftests::memrange_tests::normalize_mem_ranges_tests); +} |