diff options
-rw-r--r-- | src/CharacterSet.cpp | 4 | ||||
-rw-r--r-- | test/src/CharacterSetTests.cpp | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/CharacterSet.cpp b/src/CharacterSet.cpp index 5287806..d0b31a4 100644 --- a/src/CharacterSet.cpp +++ b/src/CharacterSet.cpp @@ -9,6 +9,7 @@ #include "CharacterSet.hpp" +#include <algorithm> #include <set> namespace Uri { @@ -51,6 +52,9 @@ namespace Uri { CharacterSet::CharacterSet(char first, char last) : impl_(new Impl) { + if (first > last) { + std::swap(first, last); + } for (char c = first; c < last + 1; ++c) { (void)impl_->charactersInSet.insert(c); } diff --git a/test/src/CharacterSetTests.cpp b/test/src/CharacterSetTests.cpp index 7013127..3663ee6 100644 --- a/test/src/CharacterSetTests.cpp +++ b/test/src/CharacterSetTests.cpp @@ -43,6 +43,20 @@ TEST(CharacterSetTests, RangeConstructor) { } } +TEST(CharacterSetTests, Range_Constructor_Reversed) { + Uri::CharacterSet cs('G', 'A'); + for (char c = 0; c < 0x7F; ++c) { + if ( + (c >= 'A') + && (c <= 'G') + ) { + ASSERT_TRUE(cs.Contains(c)); + } else { + ASSERT_FALSE(cs.Contains(c)); + } + } +} + TEST(CharacterSetTests, InitializerListConstructor) { Uri::CharacterSet cs1{'X'}; for (char c = 0; c < 0x7F; ++c) { |