-
Notifications
You must be signed in to change notification settings - Fork 11.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
pragma solidity ^0.5.0; | ||
|
||
/** | ||
* @title Strings | ||
* @dev String operations. | ||
*/ | ||
library Strings { | ||
/** | ||
* Concatenates two strings. | ||
* string(abi.encodePacked(a, b)) | ||
* https://solidity.readthedocs.io/en/latest/types.html?highlight=concatenate | ||
*/ | ||
|
||
/** | ||
* @dev Converts a uint256 to a string. | ||
* via OraclizeAPI - MIT licence | ||
* https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol | ||
*/ | ||
function fromUint256(uint256 value) internal pure returns (string memory) { | ||
if (value == 0) { | ||
return "0"; | ||
} | ||
uint256 temp = value; | ||
uint256 digits; | ||
while (temp != 0) { | ||
digits++; | ||
temp /= 10; | ||
} | ||
bytes memory buffer = new bytes(digits); | ||
uint256 index = digits - 1; | ||
temp = value; | ||
while (temp != 0) { | ||
buffer[index--] = byte(uint8(48 + temp % 10)); | ||
temp /= 10; | ||
} | ||
return string(buffer); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
pragma solidity ^0.5.0; | ||
|
||
import "../drafts/Strings.sol"; | ||
|
||
contract StringsMock { | ||
function fromUint256(uint256 value) public pure returns (string memory) { | ||
return Strings.fromUint256(value); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
const { constants } = require('openzeppelin-test-helpers'); | ||
|
||
const StringsMock = artifacts.require('StringsMock'); | ||
|
||
contract('Strings', function () { | ||
beforeEach(async function () { | ||
this.strings = await StringsMock.new(); | ||
}); | ||
|
||
describe('from uint256', function () { | ||
it('converts 0', async function () { | ||
(await this.strings.fromUint256(0)).should.equal('0'); | ||
}); | ||
|
||
it('converts a positive number', async function () { | ||
(await this.strings.fromUint256(4132)).should.equal('4132'); | ||
}); | ||
|
||
it('converts MAX_UINT256', async function () { | ||
(await this.strings.fromUint256(constants.MAX_UINT256)).should.equal(constants.MAX_UINT256.toString()); | ||
}); | ||
}); | ||
}); |