xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/unittests/memrange-selftests.c (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1 /* Self tests for mem ranges for GDB, the GNU debugger.
2 
3    Copyright (C) 2017-2020 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "gdbsupport/selftest.h"
22 #include "memrange.h"
23 
24 namespace selftests {
25 namespace memrange_tests {
26 
27 static void
28 normalize_mem_ranges_tests ()
29 {
30   /* Empty vector.  */
31   {
32     std::vector<mem_range> ranges;
33 
34     normalize_mem_ranges (&ranges);
35 
36     SELF_CHECK (ranges.size () == 0);
37   }
38 
39   /* With one range.  */
40   {
41     std::vector<mem_range> ranges;
42 
43     ranges.emplace_back (10, 20);
44 
45     normalize_mem_ranges (&ranges);
46 
47     SELF_CHECK (ranges.size () == 1);
48     SELF_CHECK (ranges[0] == mem_range (10, 20));
49   }
50 
51   /* Completely disjoint ranges.  */
52   {
53     std::vector<mem_range> ranges;
54 
55     ranges.emplace_back (20, 1);
56     ranges.emplace_back (10, 1);
57 
58     normalize_mem_ranges (&ranges);
59 
60     SELF_CHECK (ranges.size () == 2);
61     SELF_CHECK (ranges[0] == mem_range (10, 1));
62     SELF_CHECK (ranges[1] == mem_range (20, 1));
63   }
64 
65   /* Overlapping and contiguous ranges.  */
66   {
67     std::vector<mem_range> ranges;
68 
69     ranges.emplace_back (5, 10);
70     ranges.emplace_back (10, 10);
71     ranges.emplace_back (15, 10);
72 
73     normalize_mem_ranges (&ranges);
74 
75     SELF_CHECK (ranges.size () == 1);
76     SELF_CHECK (ranges[0] == mem_range (5, 20));
77   }
78 
79   /* Duplicate ranges.  */
80   {
81     std::vector<mem_range> ranges;
82 
83     ranges.emplace_back (10, 10);
84     ranges.emplace_back (10, 10);
85 
86     normalize_mem_ranges (&ranges);
87 
88     SELF_CHECK (ranges.size () == 1);
89     SELF_CHECK (ranges[0] == mem_range (10, 10));
90   }
91 
92   /* Range completely inside another.  */
93   {
94     std::vector<mem_range> ranges;
95 
96     ranges.emplace_back (14, 2);
97     ranges.emplace_back (10, 10);
98 
99     normalize_mem_ranges (&ranges);
100 
101     SELF_CHECK (ranges.size () == 1);
102     SELF_CHECK (ranges[0] == mem_range (10, 10));
103   }
104 }
105 
106 } /* namespace memrange_tests */
107 } /* namespace selftests */
108 
109 void _initialize_memrange_selftests ();
110 void
111 _initialize_memrange_selftests ()
112 {
113   selftests::register_test
114     ("normalize_mem_ranges",
115      selftests::memrange_tests::normalize_mem_ranges_tests);
116 }
117