diff --git a/src/sdk/main/include/TokenTransfer.h b/src/sdk/main/include/TokenTransfer.h index 237194914..bdc428174 100644 --- a/src/sdk/main/include/TokenTransfer.h +++ b/src/sdk/main/include/TokenTransfer.h @@ -97,6 +97,14 @@ class TokenTransfer */ void validateChecksums(const Client& client) const; + /** + * Compare this TokenTransfer to another TokenTransfer and determine if they represent the same TokenTransfer. + * + * @param other The other TokenTransfer with which to compare this TokenTransfer. + * @return \c TRUE if this TokenTransfer is the same as the input TokenTransfer, otherwise \c FALSE. + */ + [[nodiscard]] bool operator==(const TokenTransfer& other) const; + /** * Construct an AccountAmount protobuf object from this TokenTransfer object. * diff --git a/src/sdk/main/src/TokenTransfer.cc b/src/sdk/main/src/TokenTransfer.cc index 98835eec0..1007663ce 100644 --- a/src/sdk/main/src/TokenTransfer.cc +++ b/src/sdk/main/src/TokenTransfer.cc @@ -78,6 +78,13 @@ void TokenTransfer::validateChecksums(const Client& client) const mAccountId.validateChecksum(client); } +//----- +bool TokenTransfer::operator==(const TokenTransfer& other) const +{ + return (mTokenId == other.mTokenId) && (mAccountId == other.mAccountId) && (mAmount == other.mAmount) && + (mIsApproval == other.mIsApproval) && (mExpectedDecimals == other.mExpectedDecimals); +} + //----- std::unique_ptr TokenTransfer::toProtobuf() const { diff --git a/src/sdk/tests/unit/TokenTransferUnitTests.cc b/src/sdk/tests/unit/TokenTransferUnitTests.cc index 6ecee720c..4b0d43bc1 100644 --- a/src/sdk/tests/unit/TokenTransferUnitTests.cc +++ b/src/sdk/tests/unit/TokenTransferUnitTests.cc @@ -4,8 +4,8 @@ #include "AccountId.h" #include "TokenId.h" -#include #include +#include using namespace Hiero; @@ -114,3 +114,48 @@ TEST_F(TokenTransferUnitTests, ToProtobuf) EXPECT_EQ(proto->amount(), getTestAmount()); EXPECT_EQ(proto->is_approval(), getTestIsApproval()); } + +//----- +TEST_F(TokenTransferUnitTests, OperatorEqualsSame) +{ + // Given + // Default + TokenTransfer defaultTokenL; + TokenTransfer defaultTokenR; + // Identical + TokenTransfer equalTokenL( + getTestTokenId(), getTestAccountId(), getTestAmount(), getTestExpectedDecimals(), getTestIsApproval()); + TokenTransfer equalTokenR( + getTestTokenId(), getTestAccountId(), getTestAmount(), getTestExpectedDecimals(), getTestIsApproval()); + + // Then + EXPECT_TRUE(defaultTokenL == defaultTokenR); + EXPECT_TRUE(equalTokenL == equalTokenR); +} + +//----- +TEST_F(TokenTransferUnitTests, OperatorEqualsDiff) +{ + // Given + TokenTransfer testTokenTransfer( + getTestTokenId(), getTestAccountId(), getTestAmount(), getTestExpectedDecimals(), getTestIsApproval()); + + // When + TokenTransfer diffTestToken( + TokenId(505ULL), getTestAccountId(), getTestAmount(), getTestExpectedDecimals(), getTestIsApproval()); + TokenTransfer diffTestAccountId( + getTestTokenId(), AccountId(12345ULL), getTestAmount(), getTestExpectedDecimals(), getTestIsApproval()); + TokenTransfer diffTestAmount( + getTestTokenId(), getTestAccountId(), 500LL, getTestExpectedDecimals(), getTestIsApproval()); + TokenTransfer diffTestExpectedDecimals( + getTestTokenId(), getTestAccountId(), getTestAmount(), 2U, getTestIsApproval()); + TokenTransfer diffTestIsApproval( + getTestTokenId(), getTestAccountId(), getTestAmount(), getTestExpectedDecimals(), false); + + // Then + EXPECT_FALSE(testTokenTransfer == diffTestToken); + EXPECT_FALSE(testTokenTransfer == diffTestAccountId); + EXPECT_FALSE(testTokenTransfer == diffTestAmount); + EXPECT_FALSE(testTokenTransfer == diffTestExpectedDecimals); + EXPECT_FALSE(testTokenTransfer == diffTestIsApproval); +}