]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/tests/testCharacterSet.cc
Source Format Enforcement (#532)
[thirdparty/squid.git] / src / tests / testCharacterSet.cc
index d109cbc31363137054529f0a695ca7260488b973..e54b4d38da1e048b439406eb2f056a2734be8dc6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
  *
  * Squid software is distributed under GPLv2+ license and includes
  * contributions from numerous individuals and organizations.
@@ -19,7 +19,7 @@ void
 testCharacterSet::CharacterSetConstruction()
 {
     {
-        CharacterSet t(NULL,"");
+        CharacterSet t(nullptr,"");
         CPPUNIT_ASSERT_EQUAL(std::string("anonymous"),std::string(t.name));
     }
     {
@@ -28,15 +28,19 @@ testCharacterSet::CharacterSetConstruction()
     }
     {
         CharacterSet t("test","");
-        for (int j = 0; j < 255; ++j)
+        for (int j = 0; j < 256; ++j)
             CPPUNIT_ASSERT_EQUAL(false,t[j]);
     }
     {
         CharacterSet t("test","0");
         CPPUNIT_ASSERT_EQUAL(true,t['0']);
-        for (int j = 0; j < 255; ++j)
-            if (j != '0')
+        for (int j = 0; j < 256; ++j) {
+            if (j != '0') {
                 CPPUNIT_ASSERT_EQUAL(false,t[j]);
+            } else {
+                CPPUNIT_ASSERT_EQUAL(true,t[j]);
+            }
+        }
     }
 }
 
@@ -76,15 +80,44 @@ testCharacterSet::CharacterSetUnion()
     {
         CharacterSet hex("hex","");
         hex += CharacterSet::DIGIT;
-        hex += CharacterSet(NULL,"aAbBcCdDeEfF");
-        for (int j = 0; j < 255; ++j)
+        hex += CharacterSet(nullptr,"aAbBcCdDeEfF");
+        CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, hex);
+        for (int j = 0; j < 256; ++j)
             CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG[j],hex[j]);
     }
     {
-        CharacterSet hex(NULL,"");
-        hex = CharacterSet::DIGIT + CharacterSet(NULL,"aAbBcCdDeEfF");
-        for (int j = 0; j < 255; ++j)
+        CharacterSet hex(nullptr,"");
+        hex = CharacterSet::DIGIT + CharacterSet(nullptr,"aAbBcCdDeEfF");
+        for (int j = 0; j < 256; ++j)
             CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG[j],hex[j]);
     }
 }
 
+void
+testCharacterSet::CharacterSetEqualityOp()
+{
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::ALPHA, CharacterSet::ALPHA);
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet(nullptr,"01"));
+    CPPUNIT_ASSERT_EQUAL(CharacterSet(nullptr,"01"), CharacterSet(nullptr,"01"));
+    CPPUNIT_ASSERT_EQUAL(CharacterSet(nullptr,"01"), CharacterSet("","01"));
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit",'0','1'));
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit", {{'0','1'}}));
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit", {{'0','0'},{'1','1'}}));
+}
+
+void
+testCharacterSet::CharacterSetSubtract()
+{
+    CharacterSet sample(nullptr, "0123456789aAbBcCdDeEfFz");
+
+    sample -= CharacterSet(nullptr, "z"); //character in set
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample);
+
+    sample -= CharacterSet(nullptr, "z"); // character not in set
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample);
+
+    sample += CharacterSet(nullptr, "z");
+    // one in set, one not; test operator-
+    CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample - CharacterSet(nullptr, "qz"));
+}
+