]> granicus.if.org Git - pdns/commitdiff
make DNSName friends with unordered maps and sets, plus test this
authorbert hubert <bert.hubert@netherlabs.nl>
Thu, 11 Feb 2016 13:08:57 +0000 (14:08 +0100)
committerbert hubert <bert.hubert@netherlabs.nl>
Thu, 11 Feb 2016 13:08:57 +0000 (14:08 +0100)
pdns/dnsname.hh
pdns/test-dnsname_cc.cc

index 5dbd6fc3e4295771eb7e90d1cbd8fef63b72f20c..6e7e744ac863bf0c829890b9c8118388276fc31c 100644 (file)
@@ -251,3 +251,9 @@ struct SuffixMatchNode
 };
 
 std::ostream & operator<<(std::ostream &os, const DNSName& d);
+namespace std {
+    template <>
+    struct hash<DNSName> {
+        size_t operator () (const DNSName& dn) const { return dn.hash(0); }
+    };
+}
index 295898a102bd8506b3602f9f5ba46a0e0b2f40d0..c2c683b06350a299590fb514e55af81ab653bde2 100644 (file)
@@ -8,6 +8,7 @@
 #include "misc.hh"
 #include "dnswriter.hh"
 #include "dnsrecords.hh"
+#include <unordered_set>
 using namespace boost;
 using std::string;
 
@@ -280,6 +281,25 @@ BOOST_AUTO_TEST_CASE(test_hash) {
   BOOST_CHECK(stdev < 10);      
 }
 
+BOOST_AUTO_TEST_CASE(test_hashContainer) {
+  std::unordered_set<DNSName> s;
+  s.insert(DNSName("www.powerdns.com"));
+  BOOST_CHECK(s.count(DNSName("WwW.PoWerDNS.CoM")));
+  BOOST_CHECK_EQUAL(s.size(), 1);
+  s.insert(DNSName("www.POWERDNS.com"));
+  BOOST_CHECK_EQUAL(s.size(), 1);
+  s.insert(DNSName("www2.POWERDNS.com"));
+  BOOST_CHECK_EQUAL(s.size(), 2);
+
+  s.clear();
+  unsigned int n=0;
+  for(; n < 100000; ++n)
+    s.insert(DNSName(std::to_string(n)+".test.nl"));
+  BOOST_CHECK_EQUAL(s.size(), n);
+
+}
+
+
 BOOST_AUTO_TEST_CASE(test_QuestionHash) {
   vector<unsigned char> packet;
   reportBasicTypes();
@@ -618,4 +638,5 @@ BOOST_AUTO_TEST_CASE(test_wirelength) { // Testing if we get the correct value f
   BOOST_CHECK_EQUAL(sname.wirelength(), 19);
 }
 
+
 BOOST_AUTO_TEST_SUITE_END()