Strings.t.sol 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {Test} from "forge-std/Test.sol";
  4. import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
  5. contract StringsTest is Test {
  6. using Strings for *;
  7. function testParse(uint256 value) external pure {
  8. assertEq(value, value.toString().parseUint());
  9. }
  10. function testParseSigned(int256 value) external pure {
  11. assertEq(value, value.toStringSigned().parseInt());
  12. }
  13. function testParseHex(uint256 value) external pure {
  14. assertEq(value, value.toHexString().parseHexUint());
  15. }
  16. function testParseChecksumHex(address value) external pure {
  17. assertEq(value, value.toChecksumHexString().parseAddress());
  18. }
  19. function testTryParseHexUintExtendedEnd(string memory random) external pure {
  20. uint256 length = bytes(random).length;
  21. assembly ("memory-safe") {
  22. mstore(add(add(random, 0x20), length), 0x3030303030303030303030303030303030303030303030303030303030303030)
  23. }
  24. (bool success, ) = random.tryParseHexUint(1, length + 1);
  25. assertFalse(success);
  26. }
  27. function testTryParseAddressExtendedEnd(address random, uint256 begin) external pure {
  28. begin = bound(begin, 3, 43);
  29. string memory input = random.toHexString();
  30. uint256 length = bytes(input).length;
  31. assembly ("memory-safe") {
  32. mstore(add(add(input, 0x20), length), 0x3030303030303030303030303030303030303030303030303030303030303030)
  33. }
  34. (bool success, ) = input.tryParseAddress(begin, begin + 40);
  35. assertFalse(success);
  36. }
  37. }