From: plouj Date: Mon, 21 Jan 2019 19:04:04 +0000 (+0000) Subject: * hash-map-tests.c (test_map_of_strings_to_int): Show how to use X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8d12eb3b9b1870f8c4d010bbbc8c0dbf2c05f7e;p=thirdparty%2Fgcc.git * hash-map-tests.c (test_map_of_strings_to_int): Show how to use string contents as hash_map keys. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268121 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff92634df4dd..5ca20aed5da4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-01-21 Michael Ploujnikov + + * hash-map-tests.c (test_map_of_strings_to_int): Show how to use + string contents as hash_map keys. + 2019-01-21 Bernd Edlinger PR c/88928 diff --git a/gcc/hash-map-tests.c b/gcc/hash-map-tests.c index 7b7a1c89045f..2137464e6937 100644 --- a/gcc/hash-map-tests.c +++ b/gcc/hash-map-tests.c @@ -77,6 +77,26 @@ test_map_of_strings_to_int () m.remove (eric); ASSERT_EQ (5, m.elements ()); ASSERT_EQ (NULL, m.get (eric)); + + /* A plain char * key is hashed based on its value (address), rather + than the string it points to. */ + char *another_ant = static_cast (xcalloc (4, 1)); + another_ant[0] = 'a'; + another_ant[1] = 'n'; + another_ant[2] = 't'; + another_ant[3] = 0; + ASSERT_NE (ant, another_ant); + unsigned prev_size = m.elements (); + ASSERT_EQ (false, m.put (another_ant, 7)); + ASSERT_EQ (prev_size + 1, m.elements ()); + + /* Need to use string_hash or nofree_string_hash key types to hash + based on the string contents. */ + hash_map string_map; + ASSERT_EQ (false, string_map.put (ant, 1)); + ASSERT_EQ (1, string_map.elements ()); + ASSERT_EQ (true, string_map.put (another_ant, 5)); + ASSERT_EQ (1, string_map.elements ()); } /* Run all of the selftests within this file. */