diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2017-12-12 14:56:42 -0500 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2017-12-12 14:56:42 -0500 |
commit | 143093d6a23b1b84274461bebb9e88e11b4f2a2f (patch) | |
tree | 59719b22d7ea4a66fad03744708768e123b534e7 /src/mongo/idl/idl_test.cpp | |
parent | 1cb47465e4d460a0a76ba9985d6adec4bc09cb38 (diff) | |
download | mongo-143093d6a23b1b84274461bebb9e88e11b4f2a2f.tar.gz |
SERVER-31705 IDL Generate Equality and Less than comparison operators
Diffstat (limited to 'src/mongo/idl/idl_test.cpp')
-rw-r--r-- | src/mongo/idl/idl_test.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/mongo/idl/idl_test.cpp b/src/mongo/idl/idl_test.cpp index fe2a845aa3d..4c871112b1b 100644 --- a/src/mongo/idl/idl_test.cpp +++ b/src/mongo/idl/idl_test.cpp @@ -174,6 +174,10 @@ void TestLoopback(TestT test_value) { auto serializedDoc = builder.obj(); ASSERT_BSONOBJ_EQ(testDoc, serializedDoc); + + // Validate the operator == works + // Use ASSERT instead of ASSERT_EQ to avoid operator<< + ASSERT(one_new == testStruct); } } @@ -482,6 +486,102 @@ TEST(IDLStructTests, TestNonStrictStruct) { } } +/// Struct default comparison tests +TEST(IDLCompareTests, TestAllFields) { + IDLParserErrorContext ctxt("root"); + + // Positive: equality works + { + CompareAllField3 origStruct; + origStruct.setField1(12); + origStruct.setField2(123); + origStruct.setField3(1234); + + auto testDoc = BSON("field1" << 12 << "field2" << 123 << "field3" << 1234); + auto parsedStruct = CompareAllField3::parse(ctxt, testDoc); + + // Avoid ASSET_<RelOp> to avoid operator << + ASSERT_TRUE(origStruct == parsedStruct); + ASSERT_FALSE(origStruct != parsedStruct); + ASSERT_FALSE(origStruct < parsedStruct); + ASSERT_FALSE(parsedStruct < origStruct); + } + + // Positive: not equality works in field 3 + { + CompareAllField3 origStruct; + origStruct.setField1(12); + origStruct.setField2(123); + origStruct.setField3(12345); + + auto testDoc = BSON("field1" << 12 << "field2" << 123 << "field3" << 1234); + auto parsedStruct = CompareAllField3::parse(ctxt, testDoc); + + // Avoid ASSET_<RelOp> to avoid operator << + ASSERT_FALSE(origStruct == parsedStruct); + ASSERT_TRUE(origStruct != parsedStruct); + ASSERT_FALSE(origStruct < parsedStruct); + ASSERT_TRUE(parsedStruct < origStruct); + } +} + + +/// Struct partial comparison tests +TEST(IDLCompareTests, TestSomeFields) { + IDLParserErrorContext ctxt("root"); + + // Positive: partial equality works when field 2 is different + { + CompareSomeField3 origStruct; + origStruct.setField1(12); + origStruct.setField2(12345); + origStruct.setField3(1234); + + auto testDoc = BSON("field1" << 12 << "field2" << 123 << "field3" << 1234); + auto parsedStruct = CompareSomeField3::parse(ctxt, testDoc); + + // Avoid ASSET_<RelOp> to avoid operator << + ASSERT_TRUE(origStruct == parsedStruct); + ASSERT_FALSE(origStruct != parsedStruct); + ASSERT_FALSE(origStruct < parsedStruct); + ASSERT_FALSE(parsedStruct < origStruct); + } + + // Positive: partial equality works when field 3 is different + { + CompareSomeField3 origStruct; + origStruct.setField1(12); + origStruct.setField2(1); + origStruct.setField3(12345); + + auto testDoc = BSON("field1" << 12 << "field2" << 123 << "field3" << 1234); + auto parsedStruct = CompareSomeField3::parse(ctxt, testDoc); + + // Avoid ASSET_<RelOp> to avoid operator << + ASSERT_FALSE(origStruct == parsedStruct); + ASSERT_TRUE(origStruct != parsedStruct); + ASSERT_FALSE(origStruct < parsedStruct); + ASSERT_TRUE(parsedStruct < origStruct); + } + + // Positive: partial equality works when field 1 is different + { + CompareSomeField3 origStruct; + origStruct.setField1(123); + origStruct.setField2(1); + origStruct.setField3(1234); + + auto testDoc = BSON("field1" << 12 << "field2" << 123 << "field3" << 1234); + auto parsedStruct = CompareSomeField3::parse(ctxt, testDoc); + + // Avoid ASSET_<RelOp> to avoid operator << + ASSERT_FALSE(origStruct == parsedStruct); + ASSERT_TRUE(origStruct != parsedStruct); + ASSERT_FALSE(origStruct < parsedStruct); + ASSERT_TRUE(parsedStruct < origStruct); + } +} + /// Field tests // Positive: check ignored field is ignored TEST(IDLFieldTests, TestStrictStructIgnoredField) { @@ -959,6 +1059,10 @@ void TestBinDataVector() { auto serializedDoc = builder.obj(); ASSERT_BSONOBJ_EQ(testDoc, serializedDoc); + + // Validate the operator == works + // Use ASSERT instead of ASSERT_EQ to avoid operator<< + ASSERT(one_new == testStruct); } } |