Skip to content

Commit

Permalink
Add Strings.equal (#3774)
Browse files Browse the repository at this point in the history
Co-authored-by: Francisco <fg@frang.io>
  • Loading branch information
0xCaso and frangio committed Dec 28, 2022
1 parent f799475 commit 7a6a9d1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* `ERC20Votes`: optimize by using unchecked arithmetic. ([#3748](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3748))
* `Initializable`: optimize `_disableInitializers` by using `!=` instead of `<`. ([#3787](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3787))
* `Math`: optimize `log256` rounding check. ([#3745](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3745))
* `Strings`: add `equal` method. ([#3774](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3774))

### Deprecations

Expand Down
4 changes: 4 additions & 0 deletions contracts/mocks/StringsMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,8 @@ contract StringsMock {
function toHexString(address addr) public pure returns (string memory) {
return Strings.toHexString(addr);
}

function equal(string memory a, string memory b) public pure returns (bool) {
return Strings.equal(a, b);
}
}
7 changes: 7 additions & 0 deletions contracts/utils/Strings.sol
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,11 @@ library Strings {
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}

/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return keccak256(bytes(a)) == keccak256(bytes(b));
}
}
25 changes: 25 additions & 0 deletions test/utils/Strings.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,29 @@ contract('Strings', function (accounts) {
expect(await this.strings.methods['toHexString(address)'](addr)).to.equal(addr);
});
});

describe('equal', function () {
it('compares two empty strings', async function () {
expect(await this.strings.methods['equal(string,string)']('', '')).to.equal(true);
});

it('compares two equal strings', async function () {
expect(await this.strings.methods['equal(string,string)']('a', 'a')).to.equal(true);
});

it('compares two different strings', async function () {
expect(await this.strings.methods['equal(string,string)']('a', 'b')).to.equal(false);
});

it('compares two different strings of different lengths', async function () {
expect(await this.strings.methods['equal(string,string)']('a', 'aa')).to.equal(false);
expect(await this.strings.methods['equal(string,string)']('aa', 'a')).to.equal(false);
});

it('compares two different strings of different (big) lengths', async function () {
const str1 = 'a'.repeat(201);
const str2 = 'a'.repeat(200) + 'b';
expect(await this.strings.methods['equal(string,string)'](str1, str2)).to.equal(false);
});
});
});

0 comments on commit 7a6a9d1

Please sign in to comment.