summaryrefslogtreecommitdiff
path: root/src/mongo/util/stringutils_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/stringutils_test.cpp')
-rw-r--r--src/mongo/util/stringutils_test.cpp323
1 files changed, 159 insertions, 164 deletions
diff --git a/src/mongo/util/stringutils_test.cpp b/src/mongo/util/stringutils_test.cpp
index 628ee601a36..faabd5f5b8c 100644
--- a/src/mongo/util/stringutils_test.cpp
+++ b/src/mongo/util/stringutils_test.cpp
@@ -34,168 +34,163 @@
namespace mongo {
- using std::string;
-
- TEST(Comparison, Basic) {
-
- //
- // Basic version comparison tests with different version string types
- //
-
- // Equal
- ASSERT(versionCmp("1.2.3", "1.2.3") == 0);
-
- // Basic
- ASSERT(versionCmp("1.2.3", "1.2.4") < 0);
- ASSERT(versionCmp("1.2.3", "1.2.20") < 0);
- ASSERT(versionCmp("1.2.3", "1.20.3") < 0);
- ASSERT(versionCmp("2.2.3", "10.2.3") < 0);
-
- // Post-fixed
- ASSERT(versionCmp("1.2.3", "1.2.3-") > 0);
- ASSERT(versionCmp("1.2.3", "1.2.3-pre") > 0);
- ASSERT(versionCmp("1.2.3", "1.2.4-") < 0);
- ASSERT(versionCmp("1.2.3-", "1.2.3") < 0);
- ASSERT(versionCmp("1.2.3-pre", "1.2.3") < 0);
- }
-
- TEST( LexNumCmp, Simple1 ) {
- ASSERT_EQUALS( 0, LexNumCmp::cmp( "a.b.c", "a.b.c", false ) );
- }
-
- void assertCmp( int expected,
- StringData s1,
- StringData s2,
- bool lexOnly = false ) {
- mongo::LexNumCmp cmp( lexOnly );
- ASSERT_EQUALS( expected, cmp.cmp( s1, s2, lexOnly ) );
- ASSERT_EQUALS( expected, cmp.cmp( s1, s2 ) );
- ASSERT_EQUALS( expected < 0, cmp( s1, s2 ) );
- }
-
- TEST( LexNumCmp, Simple2 ) {
- ASSERT( ! isdigit( (char)255 ) );
-
- assertCmp( 0, "a", "a" );
- assertCmp( -1, "a", "aa" );
- assertCmp( 1, "aa", "a" );
- assertCmp( -1, "a", "b" );
- assertCmp( 1, "100", "50" );
- assertCmp( -1, "50", "100" );
- assertCmp( 1, "b", "a" );
- assertCmp( 0, "aa", "aa" );
- assertCmp( -1, "aa", "ab" );
- assertCmp( 1, "ab", "aa" );
- assertCmp( 1, "0", "a" );
- assertCmp( 1, "a0", "aa" );
- assertCmp( -1, "a", "0" );
- assertCmp( -1, "aa", "a0" );
- assertCmp( 0, "0", "0" );
- assertCmp( 0, "10", "10" );
- assertCmp( -1, "1", "10" );
- assertCmp( 1, "10", "1" );
- assertCmp( 1, "11", "10" );
- assertCmp( -1, "10", "11" );
- assertCmp( 1, "f11f", "f10f" );
- assertCmp( -1, "f10f", "f11f" );
- assertCmp( -1, "f11f", "f111" );
- assertCmp( 1, "f111", "f11f" );
- assertCmp( -1, "f12f", "f12g" );
- assertCmp( 1, "f12g", "f12f" );
- assertCmp( 1, "aa{", "aab" );
- assertCmp( -1, "aa{", "aa1" );
- assertCmp( -1, "a1{", "a11" );
- assertCmp( 1, "a1{a", "a1{" );
- assertCmp( -1, "a1{", "a1{a" );
- assertCmp( 1, "21", "11" );
- assertCmp( -1, "11", "21" );
-
- assertCmp( -1 , "a.0" , "a.1" );
- assertCmp( -1 , "a.0.b" , "a.1" );
-
- assertCmp( -1 , "b." , "b.|" );
- assertCmp( -1 , "b.0e" , (string("b.") + (char)255).c_str() );
- assertCmp( -1 , "b." , "b.0e" );
-
- assertCmp( 0, "238947219478347782934718234", "238947219478347782934718234");
- assertCmp( 0, "000238947219478347782934718234", "238947219478347782934718234");
- assertCmp( 1, "000238947219478347782934718235", "238947219478347782934718234");
- assertCmp( -1, "238947219478347782934718234", "238947219478347782934718234.1");
- assertCmp( 0, "238", "000238");
- assertCmp( 0, "002384", "0002384");
- assertCmp( 0, "00002384", "0002384");
- assertCmp( 0, "0", "0");
- assertCmp( 0, "0000", "0");
- assertCmp( 0, "0", "000");
- assertCmp( -1, "0000", "0.0");
- assertCmp( 1, "2380", "238");
- assertCmp( 1, "2385", "2384");
- assertCmp( 1, "2385", "02384");
- assertCmp( 1, "2385", "002384");
- assertCmp( -1, "123.234.4567", "00238");
- assertCmp( 0, "123.234", "00123.234");
- assertCmp( 0, "a.123.b", "a.00123.b");
- assertCmp( 1, "a.123.b", "a.b.00123.b");
- assertCmp( -1, "a.00.0", "a.0.1");
- assertCmp( 0, "01.003.02", "1.3.2");
- assertCmp( -1, "1.3.2", "10.300.20");
- assertCmp( 0, "10.300.20", "000000000000010.0000300.000000020");
- assertCmp( 0, "0000a", "0a");
- assertCmp( -1, "a", "0a");
- assertCmp( -1, "000a", "001a");
- assertCmp( 0, "010a", "0010a");
-
- assertCmp( -1 , "a0" , "a00" );
- assertCmp( 0 , "a.0" , "a.00" );
- assertCmp( -1 , "a.b.c.d0" , "a.b.c.d00" );
- assertCmp( 1 , "a.b.c.0.y" , "a.b.c.00.x" );
-
- assertCmp( -1, "a", "a-" );
- assertCmp( 1, "a-", "a" );
- assertCmp( 0, "a-", "a-" );
-
- assertCmp( -1, "a", "a-c" );
- assertCmp( 1, "a-c", "a" );
- assertCmp( 0, "a-c", "a-c" );
-
- assertCmp( 1, "a-c.t", "a.t" );
- assertCmp( -1, "a.t", "a-c.t" );
- assertCmp( 0, "a-c.t", "a-c.t" );
-
- assertCmp( 1, "ac.t", "a.t" );
- assertCmp( -1, "a.t", "ac.t" );
- assertCmp( 0, "ac.t", "ac.t" );
- }
-
- TEST( LexNumCmp, LexOnly ) {
- assertCmp( -1, "0", "00", true );
- assertCmp( 1, "1", "01", true );
- assertCmp( -1, "1", "11", true );
- assertCmp( 1, "2", "11", true );
- }
-
- TEST( LexNumCmp, Substring1) {
- assertCmp( 0, "1234", "1234", false );
- assertCmp( 0, StringData("1234"), StringData("1234"), false );
- assertCmp( 0, StringData("1234", 4), StringData("1234", 4), false );
- assertCmp( -1, StringData("123", 3), StringData("1234", 4), false );
-
-
- assertCmp( 0, StringData("0001", 3), StringData("0000", 3), false );
-
- }
-
- TEST( IntegerToHex, VariousConversions ) {
- ASSERT_EQUALS(std::string("0"), integerToHex(0));
- ASSERT_EQUALS(std::string("1"), integerToHex(1));
- ASSERT_EQUALS(std::string("1337"), integerToHex(0x1337));
- ASSERT_EQUALS(std::string("FFFFD499"), integerToHex(-11111));
- ASSERT_EQUALS(std::string("F1FE60C4"), integerToHex(-234987324));
- ASSERT_EQUALS(std::string("80000000"), integerToHex(std::numeric_limits<int>::min()));
- ASSERT_EQUALS(std::string("7FFFFFFF"), integerToHex(std::numeric_limits<int>::max()));
- ASSERT_EQUALS(std::string("7FFFFFFFFFFFFFFF"),
- integerToHex(std::numeric_limits<long long>::max()));
- ASSERT_EQUALS(std::string("8000000000000000"),
- integerToHex(std::numeric_limits<long long>::min()));
- }
+using std::string;
+
+TEST(Comparison, Basic) {
+ //
+ // Basic version comparison tests with different version string types
+ //
+
+ // Equal
+ ASSERT(versionCmp("1.2.3", "1.2.3") == 0);
+
+ // Basic
+ ASSERT(versionCmp("1.2.3", "1.2.4") < 0);
+ ASSERT(versionCmp("1.2.3", "1.2.20") < 0);
+ ASSERT(versionCmp("1.2.3", "1.20.3") < 0);
+ ASSERT(versionCmp("2.2.3", "10.2.3") < 0);
+
+ // Post-fixed
+ ASSERT(versionCmp("1.2.3", "1.2.3-") > 0);
+ ASSERT(versionCmp("1.2.3", "1.2.3-pre") > 0);
+ ASSERT(versionCmp("1.2.3", "1.2.4-") < 0);
+ ASSERT(versionCmp("1.2.3-", "1.2.3") < 0);
+ ASSERT(versionCmp("1.2.3-pre", "1.2.3") < 0);
+}
+
+TEST(LexNumCmp, Simple1) {
+ ASSERT_EQUALS(0, LexNumCmp::cmp("a.b.c", "a.b.c", false));
+}
+
+void assertCmp(int expected, StringData s1, StringData s2, bool lexOnly = false) {
+ mongo::LexNumCmp cmp(lexOnly);
+ ASSERT_EQUALS(expected, cmp.cmp(s1, s2, lexOnly));
+ ASSERT_EQUALS(expected, cmp.cmp(s1, s2));
+ ASSERT_EQUALS(expected < 0, cmp(s1, s2));
+}
+
+TEST(LexNumCmp, Simple2) {
+ ASSERT(!isdigit((char)255));
+
+ assertCmp(0, "a", "a");
+ assertCmp(-1, "a", "aa");
+ assertCmp(1, "aa", "a");
+ assertCmp(-1, "a", "b");
+ assertCmp(1, "100", "50");
+ assertCmp(-1, "50", "100");
+ assertCmp(1, "b", "a");
+ assertCmp(0, "aa", "aa");
+ assertCmp(-1, "aa", "ab");
+ assertCmp(1, "ab", "aa");
+ assertCmp(1, "0", "a");
+ assertCmp(1, "a0", "aa");
+ assertCmp(-1, "a", "0");
+ assertCmp(-1, "aa", "a0");
+ assertCmp(0, "0", "0");
+ assertCmp(0, "10", "10");
+ assertCmp(-1, "1", "10");
+ assertCmp(1, "10", "1");
+ assertCmp(1, "11", "10");
+ assertCmp(-1, "10", "11");
+ assertCmp(1, "f11f", "f10f");
+ assertCmp(-1, "f10f", "f11f");
+ assertCmp(-1, "f11f", "f111");
+ assertCmp(1, "f111", "f11f");
+ assertCmp(-1, "f12f", "f12g");
+ assertCmp(1, "f12g", "f12f");
+ assertCmp(1, "aa{", "aab");
+ assertCmp(-1, "aa{", "aa1");
+ assertCmp(-1, "a1{", "a11");
+ assertCmp(1, "a1{a", "a1{");
+ assertCmp(-1, "a1{", "a1{a");
+ assertCmp(1, "21", "11");
+ assertCmp(-1, "11", "21");
+
+ assertCmp(-1, "a.0", "a.1");
+ assertCmp(-1, "a.0.b", "a.1");
+
+ assertCmp(-1, "b.", "b.|");
+ assertCmp(-1, "b.0e", (string("b.") + (char)255).c_str());
+ assertCmp(-1, "b.", "b.0e");
+
+ assertCmp(0, "238947219478347782934718234", "238947219478347782934718234");
+ assertCmp(0, "000238947219478347782934718234", "238947219478347782934718234");
+ assertCmp(1, "000238947219478347782934718235", "238947219478347782934718234");
+ assertCmp(-1, "238947219478347782934718234", "238947219478347782934718234.1");
+ assertCmp(0, "238", "000238");
+ assertCmp(0, "002384", "0002384");
+ assertCmp(0, "00002384", "0002384");
+ assertCmp(0, "0", "0");
+ assertCmp(0, "0000", "0");
+ assertCmp(0, "0", "000");
+ assertCmp(-1, "0000", "0.0");
+ assertCmp(1, "2380", "238");
+ assertCmp(1, "2385", "2384");
+ assertCmp(1, "2385", "02384");
+ assertCmp(1, "2385", "002384");
+ assertCmp(-1, "123.234.4567", "00238");
+ assertCmp(0, "123.234", "00123.234");
+ assertCmp(0, "a.123.b", "a.00123.b");
+ assertCmp(1, "a.123.b", "a.b.00123.b");
+ assertCmp(-1, "a.00.0", "a.0.1");
+ assertCmp(0, "01.003.02", "1.3.2");
+ assertCmp(-1, "1.3.2", "10.300.20");
+ assertCmp(0, "10.300.20", "000000000000010.0000300.000000020");
+ assertCmp(0, "0000a", "0a");
+ assertCmp(-1, "a", "0a");
+ assertCmp(-1, "000a", "001a");
+ assertCmp(0, "010a", "0010a");
+
+ assertCmp(-1, "a0", "a00");
+ assertCmp(0, "a.0", "a.00");
+ assertCmp(-1, "a.b.c.d0", "a.b.c.d00");
+ assertCmp(1, "a.b.c.0.y", "a.b.c.00.x");
+
+ assertCmp(-1, "a", "a-");
+ assertCmp(1, "a-", "a");
+ assertCmp(0, "a-", "a-");
+
+ assertCmp(-1, "a", "a-c");
+ assertCmp(1, "a-c", "a");
+ assertCmp(0, "a-c", "a-c");
+
+ assertCmp(1, "a-c.t", "a.t");
+ assertCmp(-1, "a.t", "a-c.t");
+ assertCmp(0, "a-c.t", "a-c.t");
+
+ assertCmp(1, "ac.t", "a.t");
+ assertCmp(-1, "a.t", "ac.t");
+ assertCmp(0, "ac.t", "ac.t");
+}
+
+TEST(LexNumCmp, LexOnly) {
+ assertCmp(-1, "0", "00", true);
+ assertCmp(1, "1", "01", true);
+ assertCmp(-1, "1", "11", true);
+ assertCmp(1, "2", "11", true);
+}
+
+TEST(LexNumCmp, Substring1) {
+ assertCmp(0, "1234", "1234", false);
+ assertCmp(0, StringData("1234"), StringData("1234"), false);
+ assertCmp(0, StringData("1234", 4), StringData("1234", 4), false);
+ assertCmp(-1, StringData("123", 3), StringData("1234", 4), false);
+
+
+ assertCmp(0, StringData("0001", 3), StringData("0000", 3), false);
+}
+
+TEST(IntegerToHex, VariousConversions) {
+ ASSERT_EQUALS(std::string("0"), integerToHex(0));
+ ASSERT_EQUALS(std::string("1"), integerToHex(1));
+ ASSERT_EQUALS(std::string("1337"), integerToHex(0x1337));
+ ASSERT_EQUALS(std::string("FFFFD499"), integerToHex(-11111));
+ ASSERT_EQUALS(std::string("F1FE60C4"), integerToHex(-234987324));
+ ASSERT_EQUALS(std::string("80000000"), integerToHex(std::numeric_limits<int>::min()));
+ ASSERT_EQUALS(std::string("7FFFFFFF"), integerToHex(std::numeric_limits<int>::max()));
+ ASSERT_EQUALS(std::string("7FFFFFFFFFFFFFFF"),
+ integerToHex(std::numeric_limits<long long>::max()));
+ ASSERT_EQUALS(std::string("8000000000000000"),
+ integerToHex(std::numeric_limits<long long>::min()));
+}
}