Bytes.t.sol 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {Test} from "forge-std/Test.sol";
  4. import {Bytes} from "@openzeppelin/contracts/utils/Bytes.sol";
  5. contract BytesTest is Test {
  6. // REVERSE BITS
  7. function testSymbolicReverseBytes32(bytes32 value) public pure {
  8. assertEq(Bytes.reverseBytes32(Bytes.reverseBytes32(value)), value);
  9. }
  10. function testSymbolicReverseBytes16(bytes16 value) public pure {
  11. assertEq(Bytes.reverseBytes16(Bytes.reverseBytes16(value)), value);
  12. }
  13. function testSymbolicReverseBytes16Dirty(bytes16 value) public pure {
  14. assertEq(Bytes.reverseBytes16(Bytes.reverseBytes16(_dirtyBytes16(value))), value);
  15. assertEq(Bytes.reverseBytes16(_dirtyBytes16(Bytes.reverseBytes16(value))), value);
  16. }
  17. function testSymbolicReverseBytes8(bytes8 value) public pure {
  18. assertEq(Bytes.reverseBytes8(Bytes.reverseBytes8(value)), value);
  19. }
  20. function testSymbolicReverseBytes8Dirty(bytes8 value) public pure {
  21. assertEq(Bytes.reverseBytes8(Bytes.reverseBytes8(_dirtyBytes8(value))), value);
  22. assertEq(Bytes.reverseBytes8(_dirtyBytes8(Bytes.reverseBytes8(value))), value);
  23. }
  24. function testSymbolicReverseBytes4(bytes4 value) public pure {
  25. assertEq(Bytes.reverseBytes4(Bytes.reverseBytes4(value)), value);
  26. }
  27. function testSymbolicReverseBytes4Dirty(bytes4 value) public pure {
  28. assertEq(Bytes.reverseBytes4(Bytes.reverseBytes4(_dirtyBytes4(value))), value);
  29. assertEq(Bytes.reverseBytes4(_dirtyBytes4(Bytes.reverseBytes4(value))), value);
  30. }
  31. function testSymbolicReverseBytes2(bytes2 value) public pure {
  32. assertEq(Bytes.reverseBytes2(Bytes.reverseBytes2(value)), value);
  33. }
  34. function testSymbolicReverseBytes2Dirty(bytes2 value) public pure {
  35. assertEq(Bytes.reverseBytes2(Bytes.reverseBytes2(_dirtyBytes2(value))), value);
  36. assertEq(Bytes.reverseBytes2(_dirtyBytes2(Bytes.reverseBytes2(value))), value);
  37. }
  38. // Helpers
  39. function _dirtyBytes16(bytes16 value) private pure returns (bytes16 dirty) {
  40. assembly ("memory-safe") {
  41. dirty := or(value, shr(128, not(0)))
  42. }
  43. }
  44. function _dirtyBytes8(bytes8 value) private pure returns (bytes8 dirty) {
  45. assembly ("memory-safe") {
  46. dirty := or(value, shr(192, not(0)))
  47. }
  48. }
  49. function _dirtyBytes4(bytes4 value) private pure returns (bytes4 dirty) {
  50. assembly ("memory-safe") {
  51. dirty := or(value, shr(224, not(0)))
  52. }
  53. }
  54. function _dirtyBytes2(bytes2 value) private pure returns (bytes2 dirty) {
  55. assembly ("memory-safe") {
  56. dirty := or(value, shr(240, not(0)))
  57. }
  58. }
  59. }