]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/hash-set-tests.c
1 /* Unit tests for hash-set.h.
2 Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
32 /* Construct a hash_set <const char *> and verify that various operations
36 test_set_of_strings ()
38 hash_set
<const char *> s
;
39 ASSERT_EQ (0, s
.elements ());
41 const char *red
= "red";
42 const char *green
= "green";
43 const char *blue
= "blue";
45 ASSERT_EQ (false, s
.contains (red
));
47 for (hash_set
<const char *>::iterator it
= s
.begin (); it
!= s
.end (); ++it
)
48 ASSERT_EQ (true, false);
50 /* Populate the hash_set. */
51 ASSERT_EQ (false, s
.add (red
));
52 ASSERT_EQ (false, s
.add (green
));
53 ASSERT_EQ (false, s
.add (blue
));
54 ASSERT_EQ (true, s
.add (green
));
56 /* Verify that the values are now within the set. */
57 ASSERT_EQ (true, s
.contains (red
));
58 ASSERT_EQ (true, s
.contains (green
));
59 ASSERT_EQ (true, s
.contains (blue
));
60 ASSERT_EQ (3, s
.elements ());
64 ASSERT_EQ (false, s
.contains (red
));
65 ASSERT_EQ (true, s
.contains (green
));
66 ASSERT_EQ (true, s
.contains (blue
));
67 ASSERT_EQ (2, s
.elements ());
70 ASSERT_EQ (false, s
.contains (red
));
71 ASSERT_EQ (true, s
.contains (green
));
72 ASSERT_EQ (true, s
.contains (blue
));
73 ASSERT_EQ (2, s
.elements ());
76 for (hash_set
<const char *>::iterator it
= s
.begin (); it
!= s
.end (); ++it
)
80 ASSERT_EQ (*it
, blue
);
81 ASSERT_EQ (seen
& (1 << n
), 0);
86 hash_set
<const char *, true> t
;
87 ASSERT_EQ (0, t
.elements ());
89 ASSERT_EQ (false, t
.contains (red
));
91 for (hash_set
<const char *, true>::iterator it
= t
.begin ();
93 ASSERT_EQ (true, false);
95 /* Populate the hash_set. */
96 ASSERT_EQ (false, t
.add (red
));
97 ASSERT_EQ (false, t
.add (green
));
98 ASSERT_EQ (false, t
.add (blue
));
99 ASSERT_EQ (true, t
.add (green
));
101 /* Verify that the values are now within the set. */
102 ASSERT_EQ (true, t
.contains (red
));
103 ASSERT_EQ (true, t
.contains (green
));
104 ASSERT_EQ (true, t
.contains (blue
));
105 ASSERT_EQ (3, t
.elements ());
108 for (hash_set
<const char *, true>::iterator it
= t
.begin ();
109 it
!= t
.end (); ++it
)
114 else if (*it
== blue
)
117 ASSERT_EQ (*it
, red
);
118 ASSERT_EQ (seen
& (1 << n
), 0);
125 ASSERT_EQ (false, t
.contains (red
));
126 ASSERT_EQ (true, t
.contains (green
));
127 ASSERT_EQ (true, t
.contains (blue
));
128 ASSERT_EQ (2, t
.elements ());
131 ASSERT_EQ (false, t
.contains (red
));
132 ASSERT_EQ (true, t
.contains (green
));
133 ASSERT_EQ (true, t
.contains (blue
));
134 ASSERT_EQ (2, t
.elements ());
137 /* Run all of the selftests within this file. */
140 hash_set_tests_c_tests ()
142 test_set_of_strings ();
145 } // namespace selftest
147 #endif /* #if CHECKING_P */