From 76c6d91ff52969ef00b310c97f11ec7768685f0e Mon Sep 17 00:00:00 2001 From: dbolduc Date: Sun, 7 Aug 2022 19:04:32 -0400 Subject: [PATCH] feat(spanner): equality for copyable classes --- .../cloud/spanner/create_instance_request_builder.h | 11 +++++++++++ .../spanner/create_instance_request_builder_test.cc | 10 ++++++++++ .../cloud/spanner/update_instance_request_builder.h | 11 +++++++++++ .../spanner/update_instance_request_builder_test.cc | 9 +++++++++ 4 files changed, 41 insertions(+) diff --git a/google/cloud/spanner/create_instance_request_builder.h b/google/cloud/spanner/create_instance_request_builder.h index 7825af777301b..8b5c60d854497 100644 --- a/google/cloud/spanner/create_instance_request_builder.h +++ b/google/cloud/spanner/create_instance_request_builder.h @@ -17,6 +17,7 @@ #include "google/cloud/spanner/instance.h" #include "google/cloud/spanner/version.h" +#include #include #include #include @@ -46,6 +47,16 @@ class CreateInstanceRequestBuilder { CreateInstanceRequestBuilder& operator=(CreateInstanceRequestBuilder&&) = default; + friend bool operator==(CreateInstanceRequestBuilder const& a, + CreateInstanceRequestBuilder const& b) noexcept { + return google::protobuf::util::MessageDifferencer::Equivalent(a.request_, + b.request_); + } + friend bool operator!=(CreateInstanceRequestBuilder const& a, + CreateInstanceRequestBuilder const& b) noexcept { + return !(a == b); + } + /** * Constructor requires Instance and Cloud Spanner instance config name. * The display_name is set to a default value of in.instance_id(). diff --git a/google/cloud/spanner/create_instance_request_builder_test.cc b/google/cloud/spanner/create_instance_request_builder_test.cc index f9ca80b00781a..5b76892d75da6 100644 --- a/google/cloud/spanner/create_instance_request_builder_test.cc +++ b/google/cloud/spanner/create_instance_request_builder_test.cc @@ -22,6 +22,16 @@ namespace cloud { namespace spanner { GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN +TEST(CreateInstanceRequestBuilder, Equality) { + Instance in(Project("test-project"), "test-instance"); + CreateInstanceRequestBuilder b1(in, "c1"); + CreateInstanceRequestBuilder b2(in, "c2"); + EXPECT_NE(b1, b2); + + b2 = b1; + EXPECT_EQ(b1, b2); +} + TEST(CreateInstanceRequestBuilder, DefaultValues) { Instance in(Project("test-project"), "test-instance"); std::string expected_config = diff --git a/google/cloud/spanner/update_instance_request_builder.h b/google/cloud/spanner/update_instance_request_builder.h index e857f2b11e392..46ee9ba4654ac 100644 --- a/google/cloud/spanner/update_instance_request_builder.h +++ b/google/cloud/spanner/update_instance_request_builder.h @@ -18,6 +18,7 @@ #include "google/cloud/spanner/instance.h" #include "google/cloud/spanner/version.h" #include +#include #include #include #include @@ -52,6 +53,16 @@ class UpdateInstanceRequestBuilder { UpdateInstanceRequestBuilder& operator=(UpdateInstanceRequestBuilder&&) = default; + friend bool operator==(UpdateInstanceRequestBuilder const& a, + UpdateInstanceRequestBuilder const& b) noexcept { + return google::protobuf::util::MessageDifferencer::Equivalent(a.request_, + b.request_); + } + friend bool operator!=(UpdateInstanceRequestBuilder const& a, + UpdateInstanceRequestBuilder const& b) noexcept { + return !(a == b); + } + explicit UpdateInstanceRequestBuilder(std::string instance_name) { request_.mutable_instance()->set_name(std::move(instance_name)); } diff --git a/google/cloud/spanner/update_instance_request_builder_test.cc b/google/cloud/spanner/update_instance_request_builder_test.cc index 154b6703713cb..85b55a6c8dfb0 100644 --- a/google/cloud/spanner/update_instance_request_builder_test.cc +++ b/google/cloud/spanner/update_instance_request_builder_test.cc @@ -42,6 +42,15 @@ TEST(UpdateInstanceRequestBuilder, Constructors) { EXPECT_EQ(expected_name, req.instance().name()); } +TEST(UpdateInstanceRequestBuilder, Equality) { + UpdateInstanceRequestBuilder b1("i1"); + UpdateInstanceRequestBuilder b2("i2"); + EXPECT_NE(b1, b2); + + b2 = b1; + EXPECT_EQ(b1, b2); +} + TEST(UpdateInstanceRequestBuilder, AddLabels) { Instance in(Project("test-project"), "test-instance"); std::string expected_name = in.FullName();