summaryrefslogtreecommitdiff
path: root/src/mongo/idl/idl_test.cpp
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2017-12-12 14:56:42 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2017-12-12 14:56:42 -0500
commit143093d6a23b1b84274461bebb9e88e11b4f2a2f (patch)
tree59719b22d7ea4a66fad03744708768e123b534e7 /src/mongo/idl/idl_test.cpp
parent1cb47465e4d460a0a76ba9985d6adec4bc09cb38 (diff)
downloadmongo-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.cpp104
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);
}
}