From dd7b74f65add792e552f2c30d9c97193f6235b81 Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 12:19:07 +0000 Subject: [PATCH 01/12] Add shorthands to DynamicBufferLib --- src/utils/DynamicArrayLib.sol | 952 +++++++++++++++++++++++++++++++++ src/utils/DynamicBufferLib.sol | 403 +++++++++++++- test/DynamicBufferLib.t.sol | 35 ++ 3 files changed, 1389 insertions(+), 1 deletion(-) create mode 100644 src/utils/DynamicArrayLib.sol diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol new file mode 100644 index 000000000..ec5ba18c8 --- /dev/null +++ b/src/utils/DynamicArrayLib.sol @@ -0,0 +1,952 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +/// @notice Library for memory arrays with automatic capacity resizing. +/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/DynamicArrayLib.sol) +library DynamicArrayLib { + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* STRUCTS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev Type to represent a dynamic array in memory. + /// You can directly assign to `data`, and the `p` function will + /// take care of the memory allocation. + struct DynamicArray { + uint256[] data; + } + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* OPERATIONS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + // /// @dev Reserves at least `minimum` amount of contiguous memory. + // function reserve(DynamicArray memory buffer, uint256 minimum) + // internal + // pure + // returns (DynamicArray memory result) + // { + // _deallocate(result); + // result = buffer; + // uint256 n = buffer.data.length; + // if (minimum > n) { + // uint256 i = 0x40; + // do {} while ((i <<= 1) < minimum); + // bytes memory data; + // /// @solidity memory-safe-assembly + // assembly { + // data := 0x01 + // mstore(data, sub(i, n)) + // } + // result = p(result, data); + // } + // } + + /// @dev Clears the array without deallocating the memory. + function clear(DynamicArray memory array) internal pure returns (DynamicArray memory result) { + _deallocate(result); + /// @solidity memory-safe-assembly + assembly { + mstore(mload(array), 0) + } + result = array; + } + + // /// @dev Returns a string pointing to the underlying bytes data. + // /// Note: The string WILL change if the buffer is updated. + // function s(DynamicBuffer memory buffer) internal pure returns (string memory) { + // return string(buffer.data); + // } + + // /// @dev Appends `data` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p(DynamicBuffer memory buffer, bytes memory data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = buffer; + // if (data.length == uint256(0)) return result; + // /// @solidity memory-safe-assembly + // assembly { + // let w := not(0x1f) + // let bufData := mload(buffer) + // let bufDataLen := mload(bufData) + // let newBufDataLen := add(mload(data), bufDataLen) + // // Some random prime number to multiply `cap`, so that + // // we know that the `cap` is for a dynamic buffer. + // // Selected to be larger than any memory pointer realistically. + // let prime := 1621250193422201 + // let cap := mload(add(bufData, w)) // `mload(sub(bufData, 0x20))`. + // // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. + // cap := mul(div(cap, prime), iszero(mod(cap, prime))) + + // // Expand / Reallocate memory if required. + // // Note that we need to allocate an extra word for the length, and + // // and another extra word as a safety word (giving a total of 0x40 bytes). + // // Without the safety word, the backwards copying can cause a buffer overflow. + // for {} iszero(lt(newBufDataLen, cap)) {} { + // // Approximately more than double the capacity to ensure more than enough space. + // let newCap := and(add(cap, add(or(cap, newBufDataLen), 0x20)), w) + // // If the memory is contiguous, we can simply expand it. + // if iszero(or(xor(mload(0x40), add(bufData, add(0x40, cap))), eq(bufData, 0x60))) { + // // Store `cap * prime` in the word before the length. + // mstore(add(bufData, w), mul(prime, newCap)) + // mstore(0x40, add(bufData, add(0x40, newCap))) // Expand the memory allocation. + // break + // } + // // Set the `newBufData` to point to the word after `cap`. + // let newBufData := add(mload(0x40), 0x20) + // mstore(0x40, add(newBufData, add(0x40, newCap))) // Reallocate the memory. + // mstore(buffer, newBufData) // Store the `newBufData`. + // // Copy `bufData` one word at a time, backwards. + // for { let o := and(add(bufDataLen, 0x20), w) } 1 {} { + // mstore(add(newBufData, o), mload(add(bufData, o))) + // o := add(o, w) // `sub(o, 0x20)`. + // if iszero(o) { break } + // } + // // Store `cap * prime` in the word before the length. + // mstore(add(newBufData, w), mul(prime, newCap)) + // bufData := newBufData // Assign `newBufData` to `bufData`. + // break + // } + // // If it's a reserve operation, set the variables to skip the appending. + // if eq(data, 0x01) { + // mstore(data, 0x00) + // newBufDataLen := bufDataLen + // } + // // Copy `data` one word at a time, backwards. + // for { let o := and(add(mload(data), 0x20), w) } 1 {} { + // mstore(add(add(bufData, bufDataLen), o), mload(add(data, o))) + // o := add(o, w) // `sub(o, 0x20)`. + // if iszero(o) { break } + // } + // mstore(add(add(bufData, 0x20), newBufDataLen), 0) // Zeroize the word after the buffer. + // mstore(bufData, newBufDataLen) // Store the length. + // } + // } + + // /// @dev Appends `data0`, `data1` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p(DynamicBuffer memory buffer, bytes memory data0, bytes memory data1) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(p(buffer, data0), data1); + // } + + // /// @dev Appends `data0` .. `data2` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p( + // DynamicBuffer memory buffer, + // bytes memory data0, + // bytes memory data1, + // bytes memory data2 + // ) internal pure returns (DynamicBuffer memory result) { + // _deallocate(result); + // result = p(p(p(buffer, data0), data1), data2); + // } + + // /// @dev Appends `data0` .. `data3` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p( + // DynamicBuffer memory buffer, + // bytes memory data0, + // bytes memory data1, + // bytes memory data2, + // bytes memory data3 + // ) internal pure returns (DynamicBuffer memory result) { + // _deallocate(result); + // result = p(p(p(p(buffer, data0), data1), data2), data3); + // } + + // /// @dev Appends `data0` .. `data4` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p( + // DynamicBuffer memory buffer, + // bytes memory data0, + // bytes memory data1, + // bytes memory data2, + // bytes memory data3, + // bytes memory data4 + // ) internal pure returns (DynamicBuffer memory result) { + // _deallocate(result); + // result = p(p(p(p(p(buffer, data0), data1), data2), data3), data4); + // } + + // /// @dev Appends `data0` .. `data5` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p( + // DynamicBuffer memory buffer, + // bytes memory data0, + // bytes memory data1, + // bytes memory data2, + // bytes memory data3, + // bytes memory data4, + // bytes memory data5 + // ) internal pure returns (DynamicBuffer memory result) { + // _deallocate(result); + // result = p(p(p(p(p(p(buffer, data0), data1), data2), data3), data4), data5); + // } + + // /// @dev Appends `data0` .. `data6` to `buffer`. + // /// Returns the same buffer, so that it can be used for function chaining. + // function p( + // DynamicBuffer memory buffer, + // bytes memory data0, + // bytes memory data1, + // bytes memory data2, + // bytes memory data3, + // bytes memory data4, + // bytes memory data5, + // bytes memory data6 + // ) internal pure returns (DynamicBuffer memory result) { + // _deallocate(result); + // result = p(p(p(p(p(p(p(buffer, data0), data1), data2), data3), data4), data5), data6); + // } + + // /// @dev Appends `abi.encodePacked(bool(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBool(DynamicBuffer memory buffer, bool data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // uint256 casted; + // /// @solidity memory-safe-assembly + // assembly { + // casted := iszero(iszero(data)) + // } + // result = p(buffer, _single(casted, 1)); + // } + + // /// @dev Appends `abi.encodePacked(address(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pAddress(DynamicBuffer memory buffer, address data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(uint256(uint160(data)), 20)); + // } + + // /// @dev Appends `abi.encodePacked(uint8(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint8(DynamicBuffer memory buffer, uint8 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 1)); + // } + + // /// @dev Appends `abi.encodePacked(uint16(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint16(DynamicBuffer memory buffer, uint16 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 2)); + // } + + // /// @dev Appends `abi.encodePacked(uint24(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint24(DynamicBuffer memory buffer, uint24 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 3)); + // } + + // /// @dev Appends `abi.encodePacked(uint32(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint32(DynamicBuffer memory buffer, uint32 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 4)); + // } + + // /// @dev Appends `abi.encodePacked(uint40(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint40(DynamicBuffer memory buffer, uint40 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 5)); + // } + + // /// @dev Appends `abi.encodePacked(uint48(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint48(DynamicBuffer memory buffer, uint48 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 6)); + // } + + // /// @dev Appends `abi.encodePacked(uint56(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint56(DynamicBuffer memory buffer, uint56 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 7)); + // } + + // /// @dev Appends `abi.encodePacked(uint64(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint64(DynamicBuffer memory buffer, uint64 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 8)); + // } + + // /// @dev Appends `abi.encodePacked(uint72(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint72(DynamicBuffer memory buffer, uint72 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 9)); + // } + + // /// @dev Appends `abi.encodePacked(uint80(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint80(DynamicBuffer memory buffer, uint80 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 10)); + // } + + // /// @dev Appends `abi.encodePacked(uint88(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint88(DynamicBuffer memory buffer, uint88 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 11)); + // } + + // /// @dev Appends `abi.encodePacked(uint96(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint96(DynamicBuffer memory buffer, uint96 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 12)); + // } + + // /// @dev Appends `abi.encodePacked(uint104(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint104(DynamicBuffer memory buffer, uint104 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 13)); + // } + + // /// @dev Appends `abi.encodePacked(uint112(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint112(DynamicBuffer memory buffer, uint112 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 14)); + // } + + // /// @dev Appends `abi.encodePacked(uint120(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint120(DynamicBuffer memory buffer, uint120 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 15)); + // } + + // /// @dev Appends `abi.encodePacked(uint128(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint128(DynamicBuffer memory buffer, uint128 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 16)); + // } + + // /// @dev Appends `abi.encodePacked(uint136(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint136(DynamicBuffer memory buffer, uint136 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 17)); + // } + + // /// @dev Appends `abi.encodePacked(uint144(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint144(DynamicBuffer memory buffer, uint144 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 18)); + // } + + // /// @dev Appends `abi.encodePacked(uint152(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint152(DynamicBuffer memory buffer, uint152 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 19)); + // } + + // /// @dev Appends `abi.encodePacked(uint160(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint160(DynamicBuffer memory buffer, uint160 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 20)); + // } + + // /// @dev Appends `abi.encodePacked(uint168(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint168(DynamicBuffer memory buffer, uint168 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 21)); + // } + + // /// @dev Appends `abi.encodePacked(uint176(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint176(DynamicBuffer memory buffer, uint176 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 22)); + // } + + // /// @dev Appends `abi.encodePacked(uint184(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint184(DynamicBuffer memory buffer, uint184 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 23)); + // } + + // /// @dev Appends `abi.encodePacked(uint192(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint192(DynamicBuffer memory buffer, uint192 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 24)); + // } + + // /// @dev Appends `abi.encodePacked(uint200(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint200(DynamicBuffer memory buffer, uint200 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 25)); + // } + + // /// @dev Appends `abi.encodePacked(uint208(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint208(DynamicBuffer memory buffer, uint208 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 26)); + // } + + // /// @dev Appends `abi.encodePacked(uint216(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint216(DynamicBuffer memory buffer, uint216 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 27)); + // } + + // /// @dev Appends `abi.encodePacked(uint224(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint224(DynamicBuffer memory buffer, uint224 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 28)); + // } + + // /// @dev Appends `abi.encodePacked(uint232(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint232(DynamicBuffer memory buffer, uint232 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 29)); + // } + + // /// @dev Appends `abi.encodePacked(uint240(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint240(DynamicBuffer memory buffer, uint240 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 30)); + // } + + // /// @dev Appends `abi.encodePacked(uint248(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint248(DynamicBuffer memory buffer, uint248 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 31)); + // } + + // /// @dev Appends `abi.encodePacked(uint256(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pUint256(DynamicBuffer memory buffer, uint256 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(data, 32)); + // } + + // /// @dev Appends `abi.encodePacked(bytes1(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes1(DynamicBuffer memory buffer, bytes1 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 1)); + // } + + // /// @dev Appends `abi.encodePacked(bytes2(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes2(DynamicBuffer memory buffer, bytes2 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 2)); + // } + + // /// @dev Appends `abi.encodePacked(bytes3(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes3(DynamicBuffer memory buffer, bytes3 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 3)); + // } + + // /// @dev Appends `abi.encodePacked(bytes4(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes4(DynamicBuffer memory buffer, bytes4 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 4)); + // } + + // /// @dev Appends `abi.encodePacked(bytes5(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes5(DynamicBuffer memory buffer, bytes5 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 5)); + // } + + // /// @dev Appends `abi.encodePacked(bytes6(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes6(DynamicBuffer memory buffer, bytes6 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 6)); + // } + + // /// @dev Appends `abi.encodePacked(bytes7(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes7(DynamicBuffer memory buffer, bytes7 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 7)); + // } + + // /// @dev Appends `abi.encodePacked(bytes8(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes8(DynamicBuffer memory buffer, bytes8 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 8)); + // } + + // /// @dev Appends `abi.encodePacked(bytes9(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes9(DynamicBuffer memory buffer, bytes9 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 9)); + // } + + // /// @dev Appends `abi.encodePacked(bytes10(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes10(DynamicBuffer memory buffer, bytes10 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 10)); + // } + + // /// @dev Appends `abi.encodePacked(bytes11(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes11(DynamicBuffer memory buffer, bytes11 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 11)); + // } + + // /// @dev Appends `abi.encodePacked(bytes12(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes12(DynamicBuffer memory buffer, bytes12 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 12)); + // } + + // /// @dev Appends `abi.encodePacked(bytes13(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes13(DynamicBuffer memory buffer, bytes13 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 13)); + // } + + // /// @dev Appends `abi.encodePacked(bytes14(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes14(DynamicBuffer memory buffer, bytes14 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 14)); + // } + + // /// @dev Appends `abi.encodePacked(bytes15(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes15(DynamicBuffer memory buffer, bytes15 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 15)); + // } + + // /// @dev Appends `abi.encodePacked(bytes16(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes16(DynamicBuffer memory buffer, bytes16 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 16)); + // } + + // /// @dev Appends `abi.encodePacked(bytes17(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes17(DynamicBuffer memory buffer, bytes17 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 17)); + // } + + // /// @dev Appends `abi.encodePacked(bytes18(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes18(DynamicBuffer memory buffer, bytes18 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 18)); + // } + + // /// @dev Appends `abi.encodePacked(bytes19(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes19(DynamicBuffer memory buffer, bytes19 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 19)); + // } + + // /// @dev Appends `abi.encodePacked(bytes20(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes20(DynamicBuffer memory buffer, bytes20 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 20)); + // } + + // /// @dev Appends `abi.encodePacked(bytes21(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes21(DynamicBuffer memory buffer, bytes21 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 21)); + // } + + // /// @dev Appends `abi.encodePacked(bytes22(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes22(DynamicBuffer memory buffer, bytes22 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 22)); + // } + + // /// @dev Appends `abi.encodePacked(bytes23(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes23(DynamicBuffer memory buffer, bytes23 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 23)); + // } + + // /// @dev Appends `abi.encodePacked(bytes24(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes24(DynamicBuffer memory buffer, bytes24 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 24)); + // } + + // /// @dev Appends `abi.encodePacked(bytes25(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes25(DynamicBuffer memory buffer, bytes25 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 25)); + // } + + // /// @dev Appends `abi.encodePacked(bytes26(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes26(DynamicBuffer memory buffer, bytes26 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 26)); + // } + + // /// @dev Appends `abi.encodePacked(bytes27(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes27(DynamicBuffer memory buffer, bytes27 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 27)); + // } + + // /// @dev Appends `abi.encodePacked(bytes28(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes28(DynamicBuffer memory buffer, bytes28 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 28)); + // } + + // /// @dev Appends `abi.encodePacked(bytes29(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes29(DynamicBuffer memory buffer, bytes29 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 29)); + // } + + // /// @dev Appends `abi.encodePacked(bytes30(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes30(DynamicBuffer memory buffer, bytes30 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 30)); + // } + + // /// @dev Appends `abi.encodePacked(bytes31(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes31(DynamicBuffer memory buffer, bytes31 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 31)); + // } + + // /// @dev Appends `abi.encodePacked(bytes32(data))` to buffer. + // /// Returns the same buffer, so that it can be used for function chaining. + // function pBytes32(DynamicBuffer memory buffer, bytes32 data) + // internal + // pure + // returns (DynamicBuffer memory result) + // { + // _deallocate(result); + // result = p(buffer, _single(bytes32(data), 32)); + // } + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* PRIVATE HELPERS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev Helper for deallocating a automatically allocated array pointer. + function _deallocate(DynamicArray memory result) private pure { + /// @solidity memory-safe-assembly + assembly { + mstore(0x40, result) // Deallocate, as we have already allocated. + } + } +} diff --git a/src/utils/DynamicBufferLib.sol b/src/utils/DynamicBufferLib.sol index 58b0b61bc..3ae182798 100644 --- a/src/utils/DynamicBufferLib.sol +++ b/src/utils/DynamicBufferLib.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; /// @notice Library for buffers with automatic capacity resizing. -/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/DynamicBuffer.sol) +/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/DynamicBufferLib.sol) /// @author Modified from cozyco (https://github.com/samkingco/cozyco/blob/main/contracts/utils/DynamicBuffer.sol) library DynamicBufferLib { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ @@ -943,6 +943,407 @@ library DynamicBufferLib { result = p(buffer, _single(bytes32(data), 32)); } + /// @dev Shorthand for returning a new buffer. + function p() internal pure returns (DynamicBuffer memory result) {} + + /// @dev Shorthand for `p(buffer, data)`. + function p(bytes memory data) internal pure returns (DynamicBuffer memory result) { + p(result, data); + } + + /// @dev Shorthand for `p(buffer, data0, data1)`. + function p(bytes memory data0, bytes memory data1) + internal + pure + returns (DynamicBuffer memory result) + { + p(p(result, data0), data1); + } + + /// @dev Shorthand for `p(buffer, data0, .., data2)`. + function p(bytes memory data0, bytes memory data1, bytes memory data2) + internal + pure + returns (DynamicBuffer memory result) + { + p(p(p(result, data0), data1), data2); + } + + /// @dev Shorthand for `p(buffer, data0, .., data3)`. + function p(bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3) + internal + pure + returns (DynamicBuffer memory result) + { + p(p(p(p(result, data0), data1), data2), data3); + } + + /// @dev Shorthand for `p(buffer, data0, .., data4)`. + function p( + bytes memory data0, + bytes memory data1, + bytes memory data2, + bytes memory data3, + bytes memory data4 + ) internal pure returns (DynamicBuffer memory result) { + p(p(p(p(p(result, data0), data1), data2), data3), data4); + } + + /// @dev Shorthand for `p(buffer, data0, .., data5)`. + function p( + bytes memory data0, + bytes memory data1, + bytes memory data2, + bytes memory data3, + bytes memory data4, + bytes memory data5 + ) internal pure returns (DynamicBuffer memory result) { + p(p(p(p(p(p(result, data0), data1), data2), data3), data4), data5); + } + + /// @dev Shorthand for `p(buffer, data0, .., data6)`. + function p( + bytes memory data0, + bytes memory data1, + bytes memory data2, + bytes memory data3, + bytes memory data4, + bytes memory data5, + bytes memory data6 + ) internal pure returns (DynamicBuffer memory result) { + p(p(p(p(p(p(p(result, data0), data1), data2), data3), data4), data5), data6); + } + + /// @dev Shorthand for `pBool(buffer, data)`. + function pBool(bool data) internal pure returns (DynamicBuffer memory result) { + pBool(result, data); + } + + /// @dev Shorthand for `pAddress(buffer, data)`. + function pAddress(address data) internal pure returns (DynamicBuffer memory result) { + pAddress(result, data); + } + + /// @dev Shorthand for `pUint8(buffer, data)`. + function pUint8(uint8 data) internal pure returns (DynamicBuffer memory result) { + pUint8(result, data); + } + + /// @dev Shorthand for `pUint16(buffer, data)`. + function pUint16(uint16 data) internal pure returns (DynamicBuffer memory result) { + pUint16(result, data); + } + + /// @dev Shorthand for `pUint24(buffer, data)`. + function pUint24(uint24 data) internal pure returns (DynamicBuffer memory result) { + pUint24(result, data); + } + + /// @dev Shorthand for `pUint32(buffer, data)`. + function pUint32(uint32 data) internal pure returns (DynamicBuffer memory result) { + pUint32(result, data); + } + + /// @dev Shorthand for `pUint40(buffer, data)`. + function pUint40(uint40 data) internal pure returns (DynamicBuffer memory result) { + pUint40(result, data); + } + + /// @dev Shorthand for `pUint48(buffer, data)`. + function pUint48(uint48 data) internal pure returns (DynamicBuffer memory result) { + pUint48(result, data); + } + + /// @dev Shorthand for `pUint56(buffer, data)`. + function pUint56(uint56 data) internal pure returns (DynamicBuffer memory result) { + pUint56(result, data); + } + + /// @dev Shorthand for `pUint64(buffer, data)`. + function pUint64(uint64 data) internal pure returns (DynamicBuffer memory result) { + pUint64(result, data); + } + + /// @dev Shorthand for `pUint72(buffer, data)`. + function pUint72(uint72 data) internal pure returns (DynamicBuffer memory result) { + pUint72(result, data); + } + + /// @dev Shorthand for `pUint80(buffer, data)`. + function pUint80(uint80 data) internal pure returns (DynamicBuffer memory result) { + pUint80(result, data); + } + + /// @dev Shorthand for `pUint88(buffer, data)`. + function pUint88(uint88 data) internal pure returns (DynamicBuffer memory result) { + pUint88(result, data); + } + + /// @dev Shorthand for `pUint96(buffer, data)`. + function pUint96(uint96 data) internal pure returns (DynamicBuffer memory result) { + pUint96(result, data); + } + + /// @dev Shorthand for `pUint104(buffer, data)`. + function pUint104(uint104 data) internal pure returns (DynamicBuffer memory result) { + pUint104(result, data); + } + + /// @dev Shorthand for `pUint112(buffer, data)`. + function pUint112(uint112 data) internal pure returns (DynamicBuffer memory result) { + pUint112(result, data); + } + + /// @dev Shorthand for `pUint120(buffer, data)`. + function pUint120(uint120 data) internal pure returns (DynamicBuffer memory result) { + pUint120(result, data); + } + + /// @dev Shorthand for `pUint128(buffer, data)`. + function pUint128(uint128 data) internal pure returns (DynamicBuffer memory result) { + pUint128(result, data); + } + + /// @dev Shorthand for `pUint136(buffer, data)`. + function pUint136(uint136 data) internal pure returns (DynamicBuffer memory result) { + pUint136(result, data); + } + + /// @dev Shorthand for `pUint144(buffer, data)`. + function pUint144(uint144 data) internal pure returns (DynamicBuffer memory result) { + pUint144(result, data); + } + + /// @dev Shorthand for `pUint152(buffer, data)`. + function pUint152(uint152 data) internal pure returns (DynamicBuffer memory result) { + pUint152(result, data); + } + + /// @dev Shorthand for `pUint160(buffer, data)`. + function pUint160(uint160 data) internal pure returns (DynamicBuffer memory result) { + pUint160(result, data); + } + + /// @dev Shorthand for `pUint168(buffer, data)`. + function pUint168(uint168 data) internal pure returns (DynamicBuffer memory result) { + pUint168(result, data); + } + + /// @dev Shorthand for `pUint176(buffer, data)`. + function pUint176(uint176 data) internal pure returns (DynamicBuffer memory result) { + pUint176(result, data); + } + + /// @dev Shorthand for `pUint184(buffer, data)`. + function pUint184(uint184 data) internal pure returns (DynamicBuffer memory result) { + pUint184(result, data); + } + + /// @dev Shorthand for `pUint192(buffer, data)`. + function pUint192(uint192 data) internal pure returns (DynamicBuffer memory result) { + pUint192(result, data); + } + + /// @dev Shorthand for `pUint200(buffer, data)`. + function pUint200(uint200 data) internal pure returns (DynamicBuffer memory result) { + pUint200(result, data); + } + + /// @dev Shorthand for `pUint208(buffer, data)`. + function pUint208(uint208 data) internal pure returns (DynamicBuffer memory result) { + pUint208(result, data); + } + + /// @dev Shorthand for `pUint216(buffer, data)`. + function pUint216(uint216 data) internal pure returns (DynamicBuffer memory result) { + pUint216(result, data); + } + + /// @dev Shorthand for `pUint224(buffer, data)`. + function pUint224(uint224 data) internal pure returns (DynamicBuffer memory result) { + pUint224(result, data); + } + + /// @dev Shorthand for `pUint232(buffer, data)`. + function pUint232(uint232 data) internal pure returns (DynamicBuffer memory result) { + pUint232(result, data); + } + + /// @dev Shorthand for `pUint240(buffer, data)`. + function pUint240(uint240 data) internal pure returns (DynamicBuffer memory result) { + pUint240(result, data); + } + + /// @dev Shorthand for `pUint248(buffer, data)`. + function pUint248(uint248 data) internal pure returns (DynamicBuffer memory result) { + pUint248(result, data); + } + + /// @dev Shorthand for `pUint256(buffer, data)`. + function pUint256(uint256 data) internal pure returns (DynamicBuffer memory result) { + pUint256(result, data); + } + + /// @dev Shorthand for `pBytes1(buffer, data)`. + function pBytes1(bytes1 data) internal pure returns (DynamicBuffer memory result) { + pBytes1(result, data); + } + + /// @dev Shorthand for `pBytes2(buffer, data)`. + function pBytes2(bytes2 data) internal pure returns (DynamicBuffer memory result) { + pBytes2(result, data); + } + + /// @dev Shorthand for `pBytes3(buffer, data)`. + function pBytes3(bytes3 data) internal pure returns (DynamicBuffer memory result) { + pBytes3(result, data); + } + + /// @dev Shorthand for `pBytes4(buffer, data)`. + function pBytes4(bytes4 data) internal pure returns (DynamicBuffer memory result) { + pBytes4(result, data); + } + + /// @dev Shorthand for `pBytes5(buffer, data)`. + function pBytes5(bytes5 data) internal pure returns (DynamicBuffer memory result) { + pBytes5(result, data); + } + + /// @dev Shorthand for `pBytes6(buffer, data)`. + function pBytes6(bytes6 data) internal pure returns (DynamicBuffer memory result) { + pBytes6(result, data); + } + + /// @dev Shorthand for `pBytes7(buffer, data)`. + function pBytes7(bytes7 data) internal pure returns (DynamicBuffer memory result) { + pBytes7(result, data); + } + + /// @dev Shorthand for `pBytes8(buffer, data)`. + function pBytes8(bytes8 data) internal pure returns (DynamicBuffer memory result) { + pBytes8(result, data); + } + + /// @dev Shorthand for `pBytes9(buffer, data)`. + function pBytes9(bytes9 data) internal pure returns (DynamicBuffer memory result) { + pBytes9(result, data); + } + + /// @dev Shorthand for `pBytes10(buffer, data)`. + function pBytes10(bytes10 data) internal pure returns (DynamicBuffer memory result) { + pBytes10(result, data); + } + + /// @dev Shorthand for `pBytes11(buffer, data)`. + function pBytes11(bytes11 data) internal pure returns (DynamicBuffer memory result) { + pBytes11(result, data); + } + + /// @dev Shorthand for `pBytes12(buffer, data)`. + function pBytes12(bytes12 data) internal pure returns (DynamicBuffer memory result) { + pBytes12(result, data); + } + + /// @dev Shorthand for `pBytes13(buffer, data)`. + function pBytes13(bytes13 data) internal pure returns (DynamicBuffer memory result) { + pBytes13(result, data); + } + + /// @dev Shorthand for `pBytes14(buffer, data)`. + function pBytes14(bytes14 data) internal pure returns (DynamicBuffer memory result) { + pBytes14(result, data); + } + + /// @dev Shorthand for `pBytes15(buffer, data)`. + function pBytes15(bytes15 data) internal pure returns (DynamicBuffer memory result) { + pBytes15(result, data); + } + + /// @dev Shorthand for `pBytes16(buffer, data)`. + function pBytes16(bytes16 data) internal pure returns (DynamicBuffer memory result) { + pBytes16(result, data); + } + + /// @dev Shorthand for `pBytes17(buffer, data)`. + function pBytes17(bytes17 data) internal pure returns (DynamicBuffer memory result) { + pBytes17(result, data); + } + + /// @dev Shorthand for `pBytes18(buffer, data)`. + function pBytes18(bytes18 data) internal pure returns (DynamicBuffer memory result) { + pBytes18(result, data); + } + + /// @dev Shorthand for `pBytes19(buffer, data)`. + function pBytes19(bytes19 data) internal pure returns (DynamicBuffer memory result) { + pBytes19(result, data); + } + + /// @dev Shorthand for `pBytes20(buffer, data)`. + function pBytes20(bytes20 data) internal pure returns (DynamicBuffer memory result) { + pBytes20(result, data); + } + + /// @dev Shorthand for `pBytes21(buffer, data)`. + function pBytes21(bytes21 data) internal pure returns (DynamicBuffer memory result) { + pBytes21(result, data); + } + + /// @dev Shorthand for `pBytes22(buffer, data)`. + function pBytes22(bytes22 data) internal pure returns (DynamicBuffer memory result) { + pBytes22(result, data); + } + + /// @dev Shorthand for `pBytes23(buffer, data)`. + function pBytes23(bytes23 data) internal pure returns (DynamicBuffer memory result) { + pBytes23(result, data); + } + + /// @dev Shorthand for `pBytes24(buffer, data)`. + function pBytes24(bytes24 data) internal pure returns (DynamicBuffer memory result) { + pBytes24(result, data); + } + + /// @dev Shorthand for `pBytes25(buffer, data)`. + function pBytes25(bytes25 data) internal pure returns (DynamicBuffer memory result) { + pBytes25(result, data); + } + + /// @dev Shorthand for `pBytes26(buffer, data)`. + function pBytes26(bytes26 data) internal pure returns (DynamicBuffer memory result) { + pBytes26(result, data); + } + + /// @dev Shorthand for `pBytes27(buffer, data)`. + function pBytes27(bytes27 data) internal pure returns (DynamicBuffer memory result) { + pBytes27(result, data); + } + + /// @dev Shorthand for `pBytes28(buffer, data)`. + function pBytes28(bytes28 data) internal pure returns (DynamicBuffer memory result) { + pBytes28(result, data); + } + + /// @dev Shorthand for `pBytes29(buffer, data)`. + function pBytes29(bytes29 data) internal pure returns (DynamicBuffer memory result) { + pBytes29(result, data); + } + + /// @dev Shorthand for `pBytes30(buffer, data)`. + function pBytes30(bytes30 data) internal pure returns (DynamicBuffer memory result) { + pBytes30(result, data); + } + + /// @dev Shorthand for `pBytes31(buffer, data)`. + function pBytes31(bytes31 data) internal pure returns (DynamicBuffer memory result) { + pBytes31(result, data); + } + + /// @dev Shorthand for `pBytes32(buffer, data)`. + function pBytes32(bytes32 data) internal pure returns (DynamicBuffer memory result) { + pBytes32(result, data); + } + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PRIVATE HELPERS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ diff --git a/test/DynamicBufferLib.t.sol b/test/DynamicBufferLib.t.sol index 22ed8b783..e0bc9e1f8 100644 --- a/test/DynamicBufferLib.t.sol +++ b/test/DynamicBufferLib.t.sol @@ -441,6 +441,41 @@ contract DynamicBufferLibTest is SoladyTest { assertEq(bufferB.data, "010120123012340123450123456"); } + function testDynamicBufferShorthands() public { + assertEq(DynamicBufferLib.p().s(), ""); + assertEq(DynamicBufferLib.p("0").s(), "0"); + assertEq(DynamicBufferLib.p("0", "1").s(), "01"); + assertEq(DynamicBufferLib.p("0", "1", "2").s(), "012"); + assertEq(DynamicBufferLib.p("0", "1", "2", "3").s(), "0123"); + assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4").s(), "01234"); + assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4", "5").s(), "012345"); + assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4", "5", "6").s(), "0123456"); + assertEq( + DynamicBufferLib.pBool(true).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pBool(true).s() + ); + assertEq( + DynamicBufferLib.pBool(false).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pBool(false).s() + ); + assertEq( + DynamicBufferLib.pUint8(11).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pUint8(11).s() + ); + assertEq( + DynamicBufferLib.pUint256(11).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pUint256(11).s() + ); + assertEq( + DynamicBufferLib.pBytes1(bytes1(uint8(2))).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pBytes1(bytes1(uint8(2))).s() + ); + assertEq( + DynamicBufferLib.pBytes32(bytes32(uint256(2))).s(), + DynamicBufferLib.DynamicBuffer(new bytes(0)).pBytes32(bytes32(uint256(2))).s() + ); + } + function _checkSamePointers( DynamicBufferLib.DynamicBuffer memory a, DynamicBufferLib.DynamicBuffer memory b From 65976e220b0088974905155a98b6933e76a1c92c Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 12:20:45 +0000 Subject: [PATCH 02/12] T --- test/DynamicBufferLib.t.sol | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/test/DynamicBufferLib.t.sol b/test/DynamicBufferLib.t.sol index e0bc9e1f8..1463bd70e 100644 --- a/test/DynamicBufferLib.t.sol +++ b/test/DynamicBufferLib.t.sol @@ -450,29 +450,21 @@ contract DynamicBufferLibTest is SoladyTest { assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4").s(), "01234"); assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4", "5").s(), "012345"); assertEq(DynamicBufferLib.p("0", "1", "2", "3", "4", "5", "6").s(), "0123456"); + assertEq(DynamicBufferLib.pBool(true).s(), DynamicBufferLib.p().pBool(true).s()); + assertEq(DynamicBufferLib.pBool(false).s(), DynamicBufferLib.p().pBool(false).s()); assertEq( - DynamicBufferLib.pBool(true).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pBool(true).s() - ); - assertEq( - DynamicBufferLib.pBool(false).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pBool(false).s() - ); - assertEq( - DynamicBufferLib.pUint8(11).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pUint8(11).s() - ); - assertEq( - DynamicBufferLib.pUint256(11).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pUint256(11).s() + DynamicBufferLib.pAddress(address(this)).s(), + DynamicBufferLib.p().pAddress(address(this)).s() ); + assertEq(DynamicBufferLib.pUint8(11).s(), DynamicBufferLib.p().pUint8(11).s()); + assertEq(DynamicBufferLib.pUint256(11).s(), DynamicBufferLib.p().pUint256(11).s()); assertEq( DynamicBufferLib.pBytes1(bytes1(uint8(2))).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pBytes1(bytes1(uint8(2))).s() + DynamicBufferLib.p().pBytes1(bytes1(uint8(2))).s() ); assertEq( DynamicBufferLib.pBytes32(bytes32(uint256(2))).s(), - DynamicBufferLib.DynamicBuffer(new bytes(0)).pBytes32(bytes32(uint256(2))).s() + DynamicBufferLib.p().pBytes32(bytes32(uint256(2))).s() ); } From 8fdea54807db15e8ce7af4ae3db0014953bc674b Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 12:25:05 +0000 Subject: [PATCH 03/12] T --- src/utils/DynamicBufferLib.sol | 76 ++-------------------------------- 1 file changed, 3 insertions(+), 73 deletions(-) diff --git a/src/utils/DynamicBufferLib.sol b/src/utils/DynamicBufferLib.sol index 3ae182798..167fa8e41 100644 --- a/src/utils/DynamicBufferLib.sol +++ b/src/utils/DynamicBufferLib.sol @@ -20,6 +20,9 @@ library DynamicBufferLib { /* OPERATIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + // Some of these functions returns the same buffer for function chaining. + // `e.g. buffer.p("1").p("2", "3")`. + /// @dev Reserves at least `minimum` amount of contiguous memory. function reserve(DynamicBuffer memory buffer, uint256 minimum) internal @@ -63,7 +66,6 @@ library DynamicBufferLib { } /// @dev Appends `data` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p(DynamicBuffer memory buffer, bytes memory data) internal pure @@ -132,7 +134,6 @@ library DynamicBufferLib { } /// @dev Appends `data0`, `data1` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p(DynamicBuffer memory buffer, bytes memory data0, bytes memory data1) internal pure @@ -143,7 +144,6 @@ library DynamicBufferLib { } /// @dev Appends `data0` .. `data2` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p( DynamicBuffer memory buffer, bytes memory data0, @@ -155,7 +155,6 @@ library DynamicBufferLib { } /// @dev Appends `data0` .. `data3` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p( DynamicBuffer memory buffer, bytes memory data0, @@ -168,7 +167,6 @@ library DynamicBufferLib { } /// @dev Appends `data0` .. `data4` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p( DynamicBuffer memory buffer, bytes memory data0, @@ -182,7 +180,6 @@ library DynamicBufferLib { } /// @dev Appends `data0` .. `data5` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p( DynamicBuffer memory buffer, bytes memory data0, @@ -197,7 +194,6 @@ library DynamicBufferLib { } /// @dev Appends `data0` .. `data6` to `buffer`. - /// Returns the same buffer, so that it can be used for function chaining. function p( DynamicBuffer memory buffer, bytes memory data0, @@ -213,7 +209,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bool(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBool(DynamicBuffer memory buffer, bool data) internal pure @@ -229,7 +224,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(address(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pAddress(DynamicBuffer memory buffer, address data) internal pure @@ -240,7 +234,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint8(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint8(DynamicBuffer memory buffer, uint8 data) internal pure @@ -251,7 +244,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint16(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint16(DynamicBuffer memory buffer, uint16 data) internal pure @@ -262,7 +254,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint24(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint24(DynamicBuffer memory buffer, uint24 data) internal pure @@ -273,7 +264,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint32(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint32(DynamicBuffer memory buffer, uint32 data) internal pure @@ -284,7 +274,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint40(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint40(DynamicBuffer memory buffer, uint40 data) internal pure @@ -295,7 +284,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint48(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint48(DynamicBuffer memory buffer, uint48 data) internal pure @@ -306,7 +294,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint56(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint56(DynamicBuffer memory buffer, uint56 data) internal pure @@ -317,7 +304,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint64(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint64(DynamicBuffer memory buffer, uint64 data) internal pure @@ -328,7 +314,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint72(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint72(DynamicBuffer memory buffer, uint72 data) internal pure @@ -339,7 +324,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint80(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint80(DynamicBuffer memory buffer, uint80 data) internal pure @@ -350,7 +334,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint88(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint88(DynamicBuffer memory buffer, uint88 data) internal pure @@ -361,7 +344,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint96(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint96(DynamicBuffer memory buffer, uint96 data) internal pure @@ -372,7 +354,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint104(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint104(DynamicBuffer memory buffer, uint104 data) internal pure @@ -383,7 +364,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint112(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint112(DynamicBuffer memory buffer, uint112 data) internal pure @@ -394,7 +374,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint120(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint120(DynamicBuffer memory buffer, uint120 data) internal pure @@ -405,7 +384,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint128(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint128(DynamicBuffer memory buffer, uint128 data) internal pure @@ -416,7 +394,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint136(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint136(DynamicBuffer memory buffer, uint136 data) internal pure @@ -427,7 +404,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint144(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint144(DynamicBuffer memory buffer, uint144 data) internal pure @@ -438,7 +414,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint152(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint152(DynamicBuffer memory buffer, uint152 data) internal pure @@ -449,7 +424,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint160(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint160(DynamicBuffer memory buffer, uint160 data) internal pure @@ -460,7 +434,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint168(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint168(DynamicBuffer memory buffer, uint168 data) internal pure @@ -471,7 +444,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint176(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint176(DynamicBuffer memory buffer, uint176 data) internal pure @@ -482,7 +454,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint184(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint184(DynamicBuffer memory buffer, uint184 data) internal pure @@ -493,7 +464,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint192(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint192(DynamicBuffer memory buffer, uint192 data) internal pure @@ -504,7 +474,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint200(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint200(DynamicBuffer memory buffer, uint200 data) internal pure @@ -515,7 +484,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint208(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint208(DynamicBuffer memory buffer, uint208 data) internal pure @@ -526,7 +494,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint216(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint216(DynamicBuffer memory buffer, uint216 data) internal pure @@ -537,7 +504,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint224(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint224(DynamicBuffer memory buffer, uint224 data) internal pure @@ -548,7 +514,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint232(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint232(DynamicBuffer memory buffer, uint232 data) internal pure @@ -559,7 +524,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint240(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint240(DynamicBuffer memory buffer, uint240 data) internal pure @@ -570,7 +534,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint248(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint248(DynamicBuffer memory buffer, uint248 data) internal pure @@ -581,7 +544,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(uint256(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pUint256(DynamicBuffer memory buffer, uint256 data) internal pure @@ -592,7 +554,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes1(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes1(DynamicBuffer memory buffer, bytes1 data) internal pure @@ -603,7 +564,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes2(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes2(DynamicBuffer memory buffer, bytes2 data) internal pure @@ -614,7 +574,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes3(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes3(DynamicBuffer memory buffer, bytes3 data) internal pure @@ -625,7 +584,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes4(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes4(DynamicBuffer memory buffer, bytes4 data) internal pure @@ -636,7 +594,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes5(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes5(DynamicBuffer memory buffer, bytes5 data) internal pure @@ -647,7 +604,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes6(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes6(DynamicBuffer memory buffer, bytes6 data) internal pure @@ -658,7 +614,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes7(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes7(DynamicBuffer memory buffer, bytes7 data) internal pure @@ -669,7 +624,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes8(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes8(DynamicBuffer memory buffer, bytes8 data) internal pure @@ -680,7 +634,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes9(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes9(DynamicBuffer memory buffer, bytes9 data) internal pure @@ -691,7 +644,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes10(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes10(DynamicBuffer memory buffer, bytes10 data) internal pure @@ -702,7 +654,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes11(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes11(DynamicBuffer memory buffer, bytes11 data) internal pure @@ -713,7 +664,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes12(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes12(DynamicBuffer memory buffer, bytes12 data) internal pure @@ -724,7 +674,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes13(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes13(DynamicBuffer memory buffer, bytes13 data) internal pure @@ -735,7 +684,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes14(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes14(DynamicBuffer memory buffer, bytes14 data) internal pure @@ -746,7 +694,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes15(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes15(DynamicBuffer memory buffer, bytes15 data) internal pure @@ -757,7 +704,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes16(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes16(DynamicBuffer memory buffer, bytes16 data) internal pure @@ -768,7 +714,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes17(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes17(DynamicBuffer memory buffer, bytes17 data) internal pure @@ -779,7 +724,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes18(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes18(DynamicBuffer memory buffer, bytes18 data) internal pure @@ -790,7 +734,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes19(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes19(DynamicBuffer memory buffer, bytes19 data) internal pure @@ -801,7 +744,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes20(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes20(DynamicBuffer memory buffer, bytes20 data) internal pure @@ -812,7 +754,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes21(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes21(DynamicBuffer memory buffer, bytes21 data) internal pure @@ -823,7 +764,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes22(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes22(DynamicBuffer memory buffer, bytes22 data) internal pure @@ -834,7 +774,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes23(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes23(DynamicBuffer memory buffer, bytes23 data) internal pure @@ -845,7 +784,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes24(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes24(DynamicBuffer memory buffer, bytes24 data) internal pure @@ -856,7 +794,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes25(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes25(DynamicBuffer memory buffer, bytes25 data) internal pure @@ -867,7 +804,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes26(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes26(DynamicBuffer memory buffer, bytes26 data) internal pure @@ -878,7 +814,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes27(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes27(DynamicBuffer memory buffer, bytes27 data) internal pure @@ -889,7 +824,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes28(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes28(DynamicBuffer memory buffer, bytes28 data) internal pure @@ -900,7 +834,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes29(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes29(DynamicBuffer memory buffer, bytes29 data) internal pure @@ -911,7 +844,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes30(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes30(DynamicBuffer memory buffer, bytes30 data) internal pure @@ -922,7 +854,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes31(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes31(DynamicBuffer memory buffer, bytes31 data) internal pure @@ -933,7 +864,6 @@ library DynamicBufferLib { } /// @dev Appends `abi.encodePacked(bytes32(data))` to buffer. - /// Returns the same buffer, so that it can be used for function chaining. function pBytes32(DynamicBuffer memory buffer, bytes32 data) internal pure From 5abf87851a960f6c0a3f7febf45cdcd654570fa9 Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 15:23:46 +0000 Subject: [PATCH 04/12] Add DynamicArrayLib --- .gas-snapshot | 28 +- src/utils/DynamicArrayLib.sol | 1350 +++++++++++--------------------- src/utils/DynamicBufferLib.sol | 148 ++-- test/DynamicArrayLib.t.sol | 94 +++ 4 files changed, 628 insertions(+), 992 deletions(-) create mode 100644 test/DynamicArrayLib.t.sol diff --git a/.gas-snapshot b/.gas-snapshot index 8589a5ee1..d45f6c4b9 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -82,18 +82,24 @@ DelegateCheckerLibTest:test__codesize() (gas: 32210) DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 324, μ: 264770, ~: 224774) DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) -DynamicBufferLibTest:testClear(uint256) (runs: 324, μ: 34630, ~: 34747) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 324, μ: 855990, ~: 790579) -DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 324, μ: 832953, ~: 677542) -DynamicBufferLibTest:testDynamicBufferChaining() (gas: 12661) -DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 324, μ: 217562, ~: 34389) -DynamicBufferLibTest:testDynamicBufferPushSinglesReinterpretCast() (gas: 21959) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2754) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2463) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 324, μ: 2773, ~: 2094) -DynamicBufferLibTest:testJoinWithConcat() (gas: 31429) +DynamicArrayLibTest:testDynamicArrayPush() (gas: 40722) +DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 82499, ~: 82822) +DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40125) +DynamicArrayLibTest:testDynamicArraySlice() (gas: 11019) +DynamicArrayLibTest:test__codesize() (gas: 3860) +DynamicBufferLibTest:testClear(uint256) (runs: 324, μ: 34670, ~: 34765) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 324, μ: 908968, ~: 796247) +DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 324, μ: 872070, ~: 681870) +DynamicBufferLibTest:testDynamicBufferChaining() (gas: 12667) +DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 324, μ: 190102, ~: 34414) +DynamicBufferLibTest:testDynamicBufferPushSinglesReinterpretCast() (gas: 22026) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2821) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2441) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 324, μ: 2834, ~: 2077) +DynamicBufferLibTest:testDynamicBufferShorthands() (gas: 27221) +DynamicBufferLibTest:testJoinWithConcat() (gas: 31407) DynamicBufferLibTest:testJoinWithDynamicBuffer() (gas: 10830) -DynamicBufferLibTest:test__codesize() (gas: 12735) +DynamicBufferLibTest:test__codesize() (gas: 14840) ECDSATest:testBytes32ToEthSignedMessageHash() (gas: 425) ECDSATest:testBytesToEthSignedMessageHash() (gas: 11582453) ECDSATest:testBytesToEthSignedMessageHashEmpty() (gas: 556) diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index ec5ba18c8..7dd2f9fe8 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -19,27 +19,61 @@ library DynamicArrayLib { /* OPERATIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ - // /// @dev Reserves at least `minimum` amount of contiguous memory. - // function reserve(DynamicArray memory buffer, uint256 minimum) - // internal - // pure - // returns (DynamicArray memory result) - // { - // _deallocate(result); - // result = buffer; - // uint256 n = buffer.data.length; - // if (minimum > n) { - // uint256 i = 0x40; - // do {} while ((i <<= 1) < minimum); - // bytes memory data; - // /// @solidity memory-safe-assembly - // assembly { - // data := 0x01 - // mstore(data, sub(i, n)) - // } - // result = p(result, data); - // } - // } + // Some of these functions returns the same array for function chaining. + // `e.g. `array.p("1").p("2")`. + + /// @dev Reserves at least `minimum` amount of contiguous memory. + function reserve(DynamicArray memory array, uint256 minimum) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(array) + for {} gt(minimum, mload(arrData)) {} { + let w := not(0x1f) + // Some random prime number to multiply `cap`, so that + // we know that the `cap` is for a dynamic array. + // Selected to be larger than any memory pointer realistically. + let prime := 8188386068317523 + let cap := mload(add(arrData, w)) // `mload(sub(arrData, w))`. + // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. + cap := mul(div(cap, prime), iszero(mod(cap, prime))) + let newCap := shl(5, add(1, minimum)) + // If we don't need to grow the memory. + if iszero(gt(newCap, cap)) { break } + // If the memory is contiguous, we can simply expand it. + if iszero(or(xor(mload(0x40), add(arrData, add(0x20, cap))), eq(arrData, 0x60))) { + // Store `cap * prime` in the word before the length. + mstore(add(arrData, w), mul(prime, newCap)) + mstore(0x40, add(arrData, add(0x20, newCap))) // Expand the memory allocation. + break + } + // Set the `newArrData` to point to the word after `cap`. + let newArrData := add(mload(0x40), 0x20) + mstore(0x40, add(newArrData, add(0x20, newCap))) // Reallocate the memory. + mstore(array, newArrData) // Store the `newArrData`. + // Copy `arrData` one word at a time, backwards. + for { let o := add(0x20, shl(5, mload(arrData))) } 1 {} { + mstore(add(newArrData, o), mload(add(arrData, o))) + o := add(o, w) // `sub(o, 0x20)`. + if iszero(o) { break } + } + // Store `cap * prime` in the word before the length. + mstore(add(newArrData, w), mul(prime, newCap)) + mstore(newArrData, mload(arrData)) // Store the length. + break + } + } + } + + /// @dev Shorthand for `array.data.length`. + function length(DynamicArray memory array) internal pure returns (uint256) { + return array.data.length; + } /// @dev Clears the array without deallocating the memory. function clear(DynamicArray memory array) internal pure returns (DynamicArray memory result) { @@ -51,892 +85,386 @@ library DynamicArrayLib { result = array; } - // /// @dev Returns a string pointing to the underlying bytes data. - // /// Note: The string WILL change if the buffer is updated. - // function s(DynamicBuffer memory buffer) internal pure returns (string memory) { - // return string(buffer.data); - // } - - // /// @dev Appends `data` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p(DynamicBuffer memory buffer, bytes memory data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = buffer; - // if (data.length == uint256(0)) return result; - // /// @solidity memory-safe-assembly - // assembly { - // let w := not(0x1f) - // let bufData := mload(buffer) - // let bufDataLen := mload(bufData) - // let newBufDataLen := add(mload(data), bufDataLen) - // // Some random prime number to multiply `cap`, so that - // // we know that the `cap` is for a dynamic buffer. - // // Selected to be larger than any memory pointer realistically. - // let prime := 1621250193422201 - // let cap := mload(add(bufData, w)) // `mload(sub(bufData, 0x20))`. - // // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. - // cap := mul(div(cap, prime), iszero(mod(cap, prime))) - - // // Expand / Reallocate memory if required. - // // Note that we need to allocate an extra word for the length, and - // // and another extra word as a safety word (giving a total of 0x40 bytes). - // // Without the safety word, the backwards copying can cause a buffer overflow. - // for {} iszero(lt(newBufDataLen, cap)) {} { - // // Approximately more than double the capacity to ensure more than enough space. - // let newCap := and(add(cap, add(or(cap, newBufDataLen), 0x20)), w) - // // If the memory is contiguous, we can simply expand it. - // if iszero(or(xor(mload(0x40), add(bufData, add(0x40, cap))), eq(bufData, 0x60))) { - // // Store `cap * prime` in the word before the length. - // mstore(add(bufData, w), mul(prime, newCap)) - // mstore(0x40, add(bufData, add(0x40, newCap))) // Expand the memory allocation. - // break - // } - // // Set the `newBufData` to point to the word after `cap`. - // let newBufData := add(mload(0x40), 0x20) - // mstore(0x40, add(newBufData, add(0x40, newCap))) // Reallocate the memory. - // mstore(buffer, newBufData) // Store the `newBufData`. - // // Copy `bufData` one word at a time, backwards. - // for { let o := and(add(bufDataLen, 0x20), w) } 1 {} { - // mstore(add(newBufData, o), mload(add(bufData, o))) - // o := add(o, w) // `sub(o, 0x20)`. - // if iszero(o) { break } - // } - // // Store `cap * prime` in the word before the length. - // mstore(add(newBufData, w), mul(prime, newCap)) - // bufData := newBufData // Assign `newBufData` to `bufData`. - // break - // } - // // If it's a reserve operation, set the variables to skip the appending. - // if eq(data, 0x01) { - // mstore(data, 0x00) - // newBufDataLen := bufDataLen - // } - // // Copy `data` one word at a time, backwards. - // for { let o := and(add(mload(data), 0x20), w) } 1 {} { - // mstore(add(add(bufData, bufDataLen), o), mload(add(data, o))) - // o := add(o, w) // `sub(o, 0x20)`. - // if iszero(o) { break } - // } - // mstore(add(add(bufData, 0x20), newBufDataLen), 0) // Zeroize the word after the buffer. - // mstore(bufData, newBufDataLen) // Store the length. - // } - // } - - // /// @dev Appends `data0`, `data1` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p(DynamicBuffer memory buffer, bytes memory data0, bytes memory data1) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(p(buffer, data0), data1); - // } - - // /// @dev Appends `data0` .. `data2` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p( - // DynamicBuffer memory buffer, - // bytes memory data0, - // bytes memory data1, - // bytes memory data2 - // ) internal pure returns (DynamicBuffer memory result) { - // _deallocate(result); - // result = p(p(p(buffer, data0), data1), data2); - // } - - // /// @dev Appends `data0` .. `data3` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p( - // DynamicBuffer memory buffer, - // bytes memory data0, - // bytes memory data1, - // bytes memory data2, - // bytes memory data3 - // ) internal pure returns (DynamicBuffer memory result) { - // _deallocate(result); - // result = p(p(p(p(buffer, data0), data1), data2), data3); - // } - - // /// @dev Appends `data0` .. `data4` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p( - // DynamicBuffer memory buffer, - // bytes memory data0, - // bytes memory data1, - // bytes memory data2, - // bytes memory data3, - // bytes memory data4 - // ) internal pure returns (DynamicBuffer memory result) { - // _deallocate(result); - // result = p(p(p(p(p(buffer, data0), data1), data2), data3), data4); - // } - - // /// @dev Appends `data0` .. `data5` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p( - // DynamicBuffer memory buffer, - // bytes memory data0, - // bytes memory data1, - // bytes memory data2, - // bytes memory data3, - // bytes memory data4, - // bytes memory data5 - // ) internal pure returns (DynamicBuffer memory result) { - // _deallocate(result); - // result = p(p(p(p(p(p(buffer, data0), data1), data2), data3), data4), data5); - // } - - // /// @dev Appends `data0` .. `data6` to `buffer`. - // /// Returns the same buffer, so that it can be used for function chaining. - // function p( - // DynamicBuffer memory buffer, - // bytes memory data0, - // bytes memory data1, - // bytes memory data2, - // bytes memory data3, - // bytes memory data4, - // bytes memory data5, - // bytes memory data6 - // ) internal pure returns (DynamicBuffer memory result) { - // _deallocate(result); - // result = p(p(p(p(p(p(p(buffer, data0), data1), data2), data3), data4), data5), data6); - // } - - // /// @dev Appends `abi.encodePacked(bool(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBool(DynamicBuffer memory buffer, bool data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // uint256 casted; - // /// @solidity memory-safe-assembly - // assembly { - // casted := iszero(iszero(data)) - // } - // result = p(buffer, _single(casted, 1)); - // } - - // /// @dev Appends `abi.encodePacked(address(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pAddress(DynamicBuffer memory buffer, address data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(uint256(uint160(data)), 20)); - // } - - // /// @dev Appends `abi.encodePacked(uint8(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint8(DynamicBuffer memory buffer, uint8 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 1)); - // } - - // /// @dev Appends `abi.encodePacked(uint16(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint16(DynamicBuffer memory buffer, uint16 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 2)); - // } - - // /// @dev Appends `abi.encodePacked(uint24(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint24(DynamicBuffer memory buffer, uint24 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 3)); - // } - - // /// @dev Appends `abi.encodePacked(uint32(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint32(DynamicBuffer memory buffer, uint32 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 4)); - // } - - // /// @dev Appends `abi.encodePacked(uint40(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint40(DynamicBuffer memory buffer, uint40 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 5)); - // } - - // /// @dev Appends `abi.encodePacked(uint48(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint48(DynamicBuffer memory buffer, uint48 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 6)); - // } - - // /// @dev Appends `abi.encodePacked(uint56(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint56(DynamicBuffer memory buffer, uint56 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 7)); - // } - - // /// @dev Appends `abi.encodePacked(uint64(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint64(DynamicBuffer memory buffer, uint64 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 8)); - // } - - // /// @dev Appends `abi.encodePacked(uint72(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint72(DynamicBuffer memory buffer, uint72 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 9)); - // } - - // /// @dev Appends `abi.encodePacked(uint80(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint80(DynamicBuffer memory buffer, uint80 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 10)); - // } - - // /// @dev Appends `abi.encodePacked(uint88(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint88(DynamicBuffer memory buffer, uint88 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 11)); - // } - - // /// @dev Appends `abi.encodePacked(uint96(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint96(DynamicBuffer memory buffer, uint96 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 12)); - // } - - // /// @dev Appends `abi.encodePacked(uint104(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint104(DynamicBuffer memory buffer, uint104 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 13)); - // } - - // /// @dev Appends `abi.encodePacked(uint112(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint112(DynamicBuffer memory buffer, uint112 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 14)); - // } - - // /// @dev Appends `abi.encodePacked(uint120(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint120(DynamicBuffer memory buffer, uint120 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 15)); - // } - - // /// @dev Appends `abi.encodePacked(uint128(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint128(DynamicBuffer memory buffer, uint128 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 16)); - // } - - // /// @dev Appends `abi.encodePacked(uint136(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint136(DynamicBuffer memory buffer, uint136 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 17)); - // } - - // /// @dev Appends `abi.encodePacked(uint144(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint144(DynamicBuffer memory buffer, uint144 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 18)); - // } - - // /// @dev Appends `abi.encodePacked(uint152(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint152(DynamicBuffer memory buffer, uint152 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 19)); - // } - - // /// @dev Appends `abi.encodePacked(uint160(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint160(DynamicBuffer memory buffer, uint160 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 20)); - // } - - // /// @dev Appends `abi.encodePacked(uint168(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint168(DynamicBuffer memory buffer, uint168 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 21)); - // } - - // /// @dev Appends `abi.encodePacked(uint176(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint176(DynamicBuffer memory buffer, uint176 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 22)); - // } - - // /// @dev Appends `abi.encodePacked(uint184(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint184(DynamicBuffer memory buffer, uint184 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 23)); - // } - - // /// @dev Appends `abi.encodePacked(uint192(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint192(DynamicBuffer memory buffer, uint192 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 24)); - // } - - // /// @dev Appends `abi.encodePacked(uint200(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint200(DynamicBuffer memory buffer, uint200 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 25)); - // } - - // /// @dev Appends `abi.encodePacked(uint208(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint208(DynamicBuffer memory buffer, uint208 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 26)); - // } - - // /// @dev Appends `abi.encodePacked(uint216(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint216(DynamicBuffer memory buffer, uint216 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 27)); - // } - - // /// @dev Appends `abi.encodePacked(uint224(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint224(DynamicBuffer memory buffer, uint224 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 28)); - // } - - // /// @dev Appends `abi.encodePacked(uint232(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint232(DynamicBuffer memory buffer, uint232 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 29)); - // } - - // /// @dev Appends `abi.encodePacked(uint240(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint240(DynamicBuffer memory buffer, uint240 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 30)); - // } - - // /// @dev Appends `abi.encodePacked(uint248(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint248(DynamicBuffer memory buffer, uint248 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 31)); - // } - - // /// @dev Appends `abi.encodePacked(uint256(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pUint256(DynamicBuffer memory buffer, uint256 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(data, 32)); - // } - - // /// @dev Appends `abi.encodePacked(bytes1(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes1(DynamicBuffer memory buffer, bytes1 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 1)); - // } - - // /// @dev Appends `abi.encodePacked(bytes2(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes2(DynamicBuffer memory buffer, bytes2 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 2)); - // } - - // /// @dev Appends `abi.encodePacked(bytes3(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes3(DynamicBuffer memory buffer, bytes3 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 3)); - // } - - // /// @dev Appends `abi.encodePacked(bytes4(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes4(DynamicBuffer memory buffer, bytes4 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 4)); - // } - - // /// @dev Appends `abi.encodePacked(bytes5(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes5(DynamicBuffer memory buffer, bytes5 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 5)); - // } - - // /// @dev Appends `abi.encodePacked(bytes6(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes6(DynamicBuffer memory buffer, bytes6 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 6)); - // } - - // /// @dev Appends `abi.encodePacked(bytes7(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes7(DynamicBuffer memory buffer, bytes7 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 7)); - // } - - // /// @dev Appends `abi.encodePacked(bytes8(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes8(DynamicBuffer memory buffer, bytes8 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 8)); - // } - - // /// @dev Appends `abi.encodePacked(bytes9(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes9(DynamicBuffer memory buffer, bytes9 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 9)); - // } - - // /// @dev Appends `abi.encodePacked(bytes10(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes10(DynamicBuffer memory buffer, bytes10 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 10)); - // } - - // /// @dev Appends `abi.encodePacked(bytes11(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes11(DynamicBuffer memory buffer, bytes11 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 11)); - // } - - // /// @dev Appends `abi.encodePacked(bytes12(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes12(DynamicBuffer memory buffer, bytes12 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 12)); - // } - - // /// @dev Appends `abi.encodePacked(bytes13(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes13(DynamicBuffer memory buffer, bytes13 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 13)); - // } - - // /// @dev Appends `abi.encodePacked(bytes14(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes14(DynamicBuffer memory buffer, bytes14 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 14)); - // } - - // /// @dev Appends `abi.encodePacked(bytes15(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes15(DynamicBuffer memory buffer, bytes15 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 15)); - // } - - // /// @dev Appends `abi.encodePacked(bytes16(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes16(DynamicBuffer memory buffer, bytes16 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 16)); - // } - - // /// @dev Appends `abi.encodePacked(bytes17(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes17(DynamicBuffer memory buffer, bytes17 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 17)); - // } - - // /// @dev Appends `abi.encodePacked(bytes18(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes18(DynamicBuffer memory buffer, bytes18 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 18)); - // } - - // /// @dev Appends `abi.encodePacked(bytes19(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes19(DynamicBuffer memory buffer, bytes19 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 19)); - // } - - // /// @dev Appends `abi.encodePacked(bytes20(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes20(DynamicBuffer memory buffer, bytes20 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 20)); - // } - - // /// @dev Appends `abi.encodePacked(bytes21(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes21(DynamicBuffer memory buffer, bytes21 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 21)); - // } - - // /// @dev Appends `abi.encodePacked(bytes22(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes22(DynamicBuffer memory buffer, bytes22 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 22)); - // } - - // /// @dev Appends `abi.encodePacked(bytes23(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes23(DynamicBuffer memory buffer, bytes23 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 23)); - // } - - // /// @dev Appends `abi.encodePacked(bytes24(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes24(DynamicBuffer memory buffer, bytes24 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 24)); - // } - - // /// @dev Appends `abi.encodePacked(bytes25(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes25(DynamicBuffer memory buffer, bytes25 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 25)); - // } - - // /// @dev Appends `abi.encodePacked(bytes26(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes26(DynamicBuffer memory buffer, bytes26 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 26)); - // } - - // /// @dev Appends `abi.encodePacked(bytes27(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes27(DynamicBuffer memory buffer, bytes27 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 27)); - // } - - // /// @dev Appends `abi.encodePacked(bytes28(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes28(DynamicBuffer memory buffer, bytes28 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 28)); - // } - - // /// @dev Appends `abi.encodePacked(bytes29(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes29(DynamicBuffer memory buffer, bytes29 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 29)); - // } - - // /// @dev Appends `abi.encodePacked(bytes30(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes30(DynamicBuffer memory buffer, bytes30 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 30)); - // } - - // /// @dev Appends `abi.encodePacked(bytes31(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes31(DynamicBuffer memory buffer, bytes31 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 31)); - // } - - // /// @dev Appends `abi.encodePacked(bytes32(data))` to buffer. - // /// Returns the same buffer, so that it can be used for function chaining. - // function pBytes32(DynamicBuffer memory buffer, bytes32 data) - // internal - // pure - // returns (DynamicBuffer memory result) - // { - // _deallocate(result); - // result = p(buffer, _single(bytes32(data), 32)); - // } + /// @dev Resizes the array to contain `n` elements. New elements will be zeroized. + function resize(DynamicArray memory array, uint256 n) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = reserve(array, n); + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(result) + let arrLen := mload(arrData) + if gt(n, arrLen) { + let o := add(add(0x20, arrData), shl(5, arrLen)) + codecopy(o, codesize(), shl(5, sub(n, arrLen))) + } + mstore(arrData, n) + } + } + + /// @dev Appends `data` to `array`. + function p(DynamicArray memory array, uint256 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(array) + let newArrLen := add(mload(arrData), 1) + let newArrBytesLen := shl(5, newArrLen) + // Some random prime number to multiply `cap`, so that + // we know that the `cap` is for a dynamic array. + // Selected to be larger than any memory pointer realistically. + let prime := 8188386068317523 + let cap := mload(sub(arrData, 0x20)) + // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. + cap := mul(div(cap, prime), iszero(mod(cap, prime))) + + // Expand / Reallocate memory if required. + // Note that we need to allocate an extra word for the length. + for {} iszero(lt(newArrBytesLen, cap)) {} { + // Approximately more than double the capacity to ensure more than enough space. + let newCap := add(cap, or(cap, newArrBytesLen)) + // If the memory is contiguous, we can simply expand it. + if iszero(or(xor(mload(0x40), add(arrData, add(0x20, cap))), eq(arrData, 0x60))) { + // Store `cap * prime` in the word before the length. + mstore(sub(arrData, 0x20), mul(prime, newCap)) + mstore(0x40, add(arrData, add(0x20, newCap))) // Expand the memory allocation. + break + } + // Set the `newArrData` to point to the word after `cap`. + let newArrData := add(mload(0x40), 0x20) + mstore(0x40, add(newArrData, add(0x20, newCap))) // Reallocate the memory. + mstore(array, newArrData) // Store the `newArrData`. + let w := not(0x1f) + // Copy `arrData` one word at a time, backwards. + for { let o := newArrBytesLen } 1 {} { + mstore(add(newArrData, o), mload(add(arrData, o))) + o := add(o, w) // `sub(o, 0x20)`. + if iszero(o) { break } + } + // Store `cap * prime` in the word before the length. + mstore(add(newArrData, w), mul(prime, newCap)) + arrData := newArrData // Assign `newArrData` to `arrData`. + break + } + mstore(add(arrData, newArrBytesLen), data) // Append `data`. + mstore(arrData, newArrLen) // Store the length. + } + } + + /// @dev Appends `data` to `array`. + function p(DynamicArray memory array, int256 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = p(array, uint256(data)); + } + + /// @dev Appends `data` to `array`. + function p(DynamicArray memory array, address data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = p(array, uint256(uint160(data))); + } + + /// @dev Appends `data` to `array`. + function p(DynamicArray memory array, bool data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = p(array, _toUint(data)); + } + + /// @dev Appends `data` to `array`. + function p(DynamicArray memory array, bytes32 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = p(array, uint256(data)); + } + + /// @dev Shorthand for returning an empty array. + function p() internal pure returns (DynamicArray memory result) {} + + /// @dev Shorthand for `p(p(), data)`. + function p(uint256 data) internal pure returns (DynamicArray memory result) { + p(result, uint256(data)); + } + + /// @dev Shorthand for `p(p(), data)`. + function p(int256 data) internal pure returns (DynamicArray memory result) { + p(result, uint256(data)); + } + + /// @dev Shorthand for `p(p(), data)`. + function p(address data) internal pure returns (DynamicArray memory result) { + p(result, uint256(uint160(data))); + } + + /// @dev Shorthand for `p(p(), data)`. + function p(bool data) internal pure returns (DynamicArray memory result) { + p(result, _toUint(data)); + } + + /// @dev Shorthand for `p(p(), data)`. + function p(bytes32 data) internal pure returns (DynamicArray memory result) { + p(result, uint256(data)); + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function get(DynamicArray memory array, uint256 i) internal pure returns (uint256 result) { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function getUint256(DynamicArray memory array, uint256 i) + internal + pure + returns (uint256 result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function getInt256(DynamicArray memory array, uint256 i) + internal + pure + returns (int256 result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function getAddress(DynamicArray memory array, uint256 i) + internal + pure + returns (address result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function getBool(DynamicArray memory array, uint256 i) internal pure returns (bool result) { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Returns the element at `array.data[i]`, without bounds checking. + function getBytes32(DynamicArray memory array, uint256 i) + internal + pure + returns (bytes32 result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(add(add(mload(array), 0x20), shl(5, i))) + } + } + + /// @dev Sets `array.data[i]` to `data`, without bounds checking. + function set(DynamicArray memory array, uint256 i, uint256 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + mstore(add(add(mload(array), 0x20), shl(5, i)), data) + } + } + + /// @dev Sets `array.data[i]` to `data`, without bounds checking. + function set(DynamicArray memory array, uint256 i, int256 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + mstore(add(add(mload(array), 0x20), shl(5, i)), data) + } + } + + /// @dev Sets `array.data[i]` to `data`, without bounds checking. + function set(DynamicArray memory array, uint256 i, address data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + mstore(add(add(mload(array), 0x20), shl(5, i)), shr(96, shl(96, data))) + } + } + + /// @dev Sets `array.data[i]` to `data`, without bounds checking. + function set(DynamicArray memory array, uint256 i, bool data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + mstore(add(add(mload(array), 0x20), shl(5, i)), iszero(iszero(data))) + } + } + + /// @dev Sets `array.data[i]` to `data`, without bounds checking. + function set(DynamicArray memory array, uint256 i, bytes32 data) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = array; + /// @solidity memory-safe-assembly + assembly { + mstore(add(add(mload(array), 0x20), shl(5, i)), data) + } + } + + /// @dev Returns the underlying array as a `uint256[]`. + function asUint256Array(DynamicArray memory array) + internal + pure + returns (uint256[] memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(array) + } + } + + /// @dev Returns the underlying array as a `int256[]`. + function asInt256Array(DynamicArray memory array) + internal + pure + returns (int256[] memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(array) + } + } + + /// @dev Returns the underlying array as a `address[]`. + function asAddressArray(DynamicArray memory array) + internal + pure + returns (address[] memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(array) + } + } + + /// @dev Returns the underlying array as a `bool[]`. + function asBoolArray(DynamicArray memory array) internal pure returns (bool[] memory result) { + /// @solidity memory-safe-assembly + assembly { + result := mload(array) + } + } + + /// @dev Returns the underlying array as a `bytes32[]`. + function asBytes32Array(DynamicArray memory array) + internal + pure + returns (bytes32[] memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(array) + } + } + + /// @dev Returns a copy of `array` sliced from `start` to `end` (exclusive). + function slice(DynamicArray memory array, uint256 start, uint256 end) + internal + pure + returns (DynamicArray memory result) + { + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(array) + let arrDataLen := mload(arrData) + if iszero(gt(arrDataLen, end)) { end := arrDataLen } + if iszero(gt(arrDataLen, start)) { start := arrDataLen } + if lt(start, end) { + let resultData := mload(0x40) + let resultDataLen := sub(end, start) + mstore(resultData, resultDataLen) + arrData := add(arrData, shl(5, start)) + let w := not(0x1f) + // Copy the `arrData` one word at a time, backwards. + let o := add(shl(5, resultDataLen), 0x20) + mstore(0x40, add(resultData, o)) // Allocate memory. + for {} 1 {} { + mstore(add(resultData, o), mload(add(arrData, o))) + o := add(o, w) // `sub(o, 0x20)`. + if iszero(o) { break } + } + mstore(result, resultData) + } + } + } + + /// @dev Returns a copy of `array` sliced from `start` to the end of the array. + function slice(DynamicArray memory array, uint256 start) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = slice(array, start, type(uint256).max); + } + + /// @dev Equivalent to `keccak256(abi.encodePacked(array.data))`. + function hash(DynamicArray memory array) internal pure returns (bytes32 result) { + /// @solidity memory-safe-assembly + assembly { + result := keccak256(add(mload(array), 0x20), shl(5, mload(mload(array)))) + } + } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PRIVATE HELPERS */ @@ -949,4 +477,12 @@ library DynamicArrayLib { mstore(0x40, result) // Deallocate, as we have already allocated. } } + + /// @dev Casts the bool into a uint256. + function _toUint(bool b) private pure returns (uint256 result) { + /// @solidity memory-safe-assembly + assembly { + result := iszero(iszero(b)) + } + } } diff --git a/src/utils/DynamicBufferLib.sol b/src/utils/DynamicBufferLib.sol index 167fa8e41..0b79d10ec 100644 --- a/src/utils/DynamicBufferLib.sol +++ b/src/utils/DynamicBufferLib.sol @@ -21,7 +21,7 @@ library DynamicBufferLib { /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ // Some of these functions returns the same buffer for function chaining. - // `e.g. buffer.p("1").p("2", "3")`. + // `e.g. `buffer.p("1").p("2")`. /// @dev Reserves at least `minimum` amount of contiguous memory. function reserve(DynamicBuffer memory buffer, uint256 minimum) @@ -876,12 +876,12 @@ library DynamicBufferLib { /// @dev Shorthand for returning a new buffer. function p() internal pure returns (DynamicBuffer memory result) {} - /// @dev Shorthand for `p(buffer, data)`. + /// @dev Shorthand for `p(p(), data)`. function p(bytes memory data) internal pure returns (DynamicBuffer memory result) { p(result, data); } - /// @dev Shorthand for `p(buffer, data0, data1)`. + /// @dev Shorthand for `p(p(), data0, data1)`. function p(bytes memory data0, bytes memory data1) internal pure @@ -890,7 +890,7 @@ library DynamicBufferLib { p(p(result, data0), data1); } - /// @dev Shorthand for `p(buffer, data0, .., data2)`. + /// @dev Shorthand for `p(p(), data0, .., data2)`. function p(bytes memory data0, bytes memory data1, bytes memory data2) internal pure @@ -899,7 +899,7 @@ library DynamicBufferLib { p(p(p(result, data0), data1), data2); } - /// @dev Shorthand for `p(buffer, data0, .., data3)`. + /// @dev Shorthand for `p(p(), data0, .., data3)`. function p(bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3) internal pure @@ -908,7 +908,7 @@ library DynamicBufferLib { p(p(p(p(result, data0), data1), data2), data3); } - /// @dev Shorthand for `p(buffer, data0, .., data4)`. + /// @dev Shorthand for `p(p(), data0, .., data4)`. function p( bytes memory data0, bytes memory data1, @@ -919,7 +919,7 @@ library DynamicBufferLib { p(p(p(p(p(result, data0), data1), data2), data3), data4); } - /// @dev Shorthand for `p(buffer, data0, .., data5)`. + /// @dev Shorthand for `p(p(), data0, .., data5)`. function p( bytes memory data0, bytes memory data1, @@ -931,7 +931,7 @@ library DynamicBufferLib { p(p(p(p(p(p(result, data0), data1), data2), data3), data4), data5); } - /// @dev Shorthand for `p(buffer, data0, .., data6)`. + /// @dev Shorthand for `p(p(), data0, .., data6)`. function p( bytes memory data0, bytes memory data1, @@ -944,332 +944,332 @@ library DynamicBufferLib { p(p(p(p(p(p(p(result, data0), data1), data2), data3), data4), data5), data6); } - /// @dev Shorthand for `pBool(buffer, data)`. + /// @dev Shorthand for `pBool(p(), data)`. function pBool(bool data) internal pure returns (DynamicBuffer memory result) { pBool(result, data); } - /// @dev Shorthand for `pAddress(buffer, data)`. + /// @dev Shorthand for `pAddress(p(), data)`. function pAddress(address data) internal pure returns (DynamicBuffer memory result) { pAddress(result, data); } - /// @dev Shorthand for `pUint8(buffer, data)`. + /// @dev Shorthand for `pUint8(p(), data)`. function pUint8(uint8 data) internal pure returns (DynamicBuffer memory result) { pUint8(result, data); } - /// @dev Shorthand for `pUint16(buffer, data)`. + /// @dev Shorthand for `pUint16(p(), data)`. function pUint16(uint16 data) internal pure returns (DynamicBuffer memory result) { pUint16(result, data); } - /// @dev Shorthand for `pUint24(buffer, data)`. + /// @dev Shorthand for `pUint24(p(), data)`. function pUint24(uint24 data) internal pure returns (DynamicBuffer memory result) { pUint24(result, data); } - /// @dev Shorthand for `pUint32(buffer, data)`. + /// @dev Shorthand for `pUint32(p(), data)`. function pUint32(uint32 data) internal pure returns (DynamicBuffer memory result) { pUint32(result, data); } - /// @dev Shorthand for `pUint40(buffer, data)`. + /// @dev Shorthand for `pUint40(p(), data)`. function pUint40(uint40 data) internal pure returns (DynamicBuffer memory result) { pUint40(result, data); } - /// @dev Shorthand for `pUint48(buffer, data)`. + /// @dev Shorthand for `pUint48(p(), data)`. function pUint48(uint48 data) internal pure returns (DynamicBuffer memory result) { pUint48(result, data); } - /// @dev Shorthand for `pUint56(buffer, data)`. + /// @dev Shorthand for `pUint56(p(), data)`. function pUint56(uint56 data) internal pure returns (DynamicBuffer memory result) { pUint56(result, data); } - /// @dev Shorthand for `pUint64(buffer, data)`. + /// @dev Shorthand for `pUint64(p(), data)`. function pUint64(uint64 data) internal pure returns (DynamicBuffer memory result) { pUint64(result, data); } - /// @dev Shorthand for `pUint72(buffer, data)`. + /// @dev Shorthand for `pUint72(p(), data)`. function pUint72(uint72 data) internal pure returns (DynamicBuffer memory result) { pUint72(result, data); } - /// @dev Shorthand for `pUint80(buffer, data)`. + /// @dev Shorthand for `pUint80(p(), data)`. function pUint80(uint80 data) internal pure returns (DynamicBuffer memory result) { pUint80(result, data); } - /// @dev Shorthand for `pUint88(buffer, data)`. + /// @dev Shorthand for `pUint88(p(), data)`. function pUint88(uint88 data) internal pure returns (DynamicBuffer memory result) { pUint88(result, data); } - /// @dev Shorthand for `pUint96(buffer, data)`. + /// @dev Shorthand for `pUint96(p(), data)`. function pUint96(uint96 data) internal pure returns (DynamicBuffer memory result) { pUint96(result, data); } - /// @dev Shorthand for `pUint104(buffer, data)`. + /// @dev Shorthand for `pUint104(p(), data)`. function pUint104(uint104 data) internal pure returns (DynamicBuffer memory result) { pUint104(result, data); } - /// @dev Shorthand for `pUint112(buffer, data)`. + /// @dev Shorthand for `pUint112(p(), data)`. function pUint112(uint112 data) internal pure returns (DynamicBuffer memory result) { pUint112(result, data); } - /// @dev Shorthand for `pUint120(buffer, data)`. + /// @dev Shorthand for `pUint120(p(), data)`. function pUint120(uint120 data) internal pure returns (DynamicBuffer memory result) { pUint120(result, data); } - /// @dev Shorthand for `pUint128(buffer, data)`. + /// @dev Shorthand for `pUint128(p(), data)`. function pUint128(uint128 data) internal pure returns (DynamicBuffer memory result) { pUint128(result, data); } - /// @dev Shorthand for `pUint136(buffer, data)`. + /// @dev Shorthand for `pUint136(p(), data)`. function pUint136(uint136 data) internal pure returns (DynamicBuffer memory result) { pUint136(result, data); } - /// @dev Shorthand for `pUint144(buffer, data)`. + /// @dev Shorthand for `pUint144(p(), data)`. function pUint144(uint144 data) internal pure returns (DynamicBuffer memory result) { pUint144(result, data); } - /// @dev Shorthand for `pUint152(buffer, data)`. + /// @dev Shorthand for `pUint152(p(), data)`. function pUint152(uint152 data) internal pure returns (DynamicBuffer memory result) { pUint152(result, data); } - /// @dev Shorthand for `pUint160(buffer, data)`. + /// @dev Shorthand for `pUint160(p(), data)`. function pUint160(uint160 data) internal pure returns (DynamicBuffer memory result) { pUint160(result, data); } - /// @dev Shorthand for `pUint168(buffer, data)`. + /// @dev Shorthand for `pUint168(p(), data)`. function pUint168(uint168 data) internal pure returns (DynamicBuffer memory result) { pUint168(result, data); } - /// @dev Shorthand for `pUint176(buffer, data)`. + /// @dev Shorthand for `pUint176(p(), data)`. function pUint176(uint176 data) internal pure returns (DynamicBuffer memory result) { pUint176(result, data); } - /// @dev Shorthand for `pUint184(buffer, data)`. + /// @dev Shorthand for `pUint184(p(), data)`. function pUint184(uint184 data) internal pure returns (DynamicBuffer memory result) { pUint184(result, data); } - /// @dev Shorthand for `pUint192(buffer, data)`. + /// @dev Shorthand for `pUint192(p(), data)`. function pUint192(uint192 data) internal pure returns (DynamicBuffer memory result) { pUint192(result, data); } - /// @dev Shorthand for `pUint200(buffer, data)`. + /// @dev Shorthand for `pUint200(p(), data)`. function pUint200(uint200 data) internal pure returns (DynamicBuffer memory result) { pUint200(result, data); } - /// @dev Shorthand for `pUint208(buffer, data)`. + /// @dev Shorthand for `pUint208(p(), data)`. function pUint208(uint208 data) internal pure returns (DynamicBuffer memory result) { pUint208(result, data); } - /// @dev Shorthand for `pUint216(buffer, data)`. + /// @dev Shorthand for `pUint216(p(), data)`. function pUint216(uint216 data) internal pure returns (DynamicBuffer memory result) { pUint216(result, data); } - /// @dev Shorthand for `pUint224(buffer, data)`. + /// @dev Shorthand for `pUint224(p(), data)`. function pUint224(uint224 data) internal pure returns (DynamicBuffer memory result) { pUint224(result, data); } - /// @dev Shorthand for `pUint232(buffer, data)`. + /// @dev Shorthand for `pUint232(p(), data)`. function pUint232(uint232 data) internal pure returns (DynamicBuffer memory result) { pUint232(result, data); } - /// @dev Shorthand for `pUint240(buffer, data)`. + /// @dev Shorthand for `pUint240(p(), data)`. function pUint240(uint240 data) internal pure returns (DynamicBuffer memory result) { pUint240(result, data); } - /// @dev Shorthand for `pUint248(buffer, data)`. + /// @dev Shorthand for `pUint248(p(), data)`. function pUint248(uint248 data) internal pure returns (DynamicBuffer memory result) { pUint248(result, data); } - /// @dev Shorthand for `pUint256(buffer, data)`. + /// @dev Shorthand for `pUint256(p(), data)`. function pUint256(uint256 data) internal pure returns (DynamicBuffer memory result) { pUint256(result, data); } - /// @dev Shorthand for `pBytes1(buffer, data)`. + /// @dev Shorthand for `pBytes1(p(), data)`. function pBytes1(bytes1 data) internal pure returns (DynamicBuffer memory result) { pBytes1(result, data); } - /// @dev Shorthand for `pBytes2(buffer, data)`. + /// @dev Shorthand for `pBytes2(p(), data)`. function pBytes2(bytes2 data) internal pure returns (DynamicBuffer memory result) { pBytes2(result, data); } - /// @dev Shorthand for `pBytes3(buffer, data)`. + /// @dev Shorthand for `pBytes3(p(), data)`. function pBytes3(bytes3 data) internal pure returns (DynamicBuffer memory result) { pBytes3(result, data); } - /// @dev Shorthand for `pBytes4(buffer, data)`. + /// @dev Shorthand for `pBytes4(p(), data)`. function pBytes4(bytes4 data) internal pure returns (DynamicBuffer memory result) { pBytes4(result, data); } - /// @dev Shorthand for `pBytes5(buffer, data)`. + /// @dev Shorthand for `pBytes5(p(), data)`. function pBytes5(bytes5 data) internal pure returns (DynamicBuffer memory result) { pBytes5(result, data); } - /// @dev Shorthand for `pBytes6(buffer, data)`. + /// @dev Shorthand for `pBytes6(p(), data)`. function pBytes6(bytes6 data) internal pure returns (DynamicBuffer memory result) { pBytes6(result, data); } - /// @dev Shorthand for `pBytes7(buffer, data)`. + /// @dev Shorthand for `pBytes7(p(), data)`. function pBytes7(bytes7 data) internal pure returns (DynamicBuffer memory result) { pBytes7(result, data); } - /// @dev Shorthand for `pBytes8(buffer, data)`. + /// @dev Shorthand for `pBytes8(p(), data)`. function pBytes8(bytes8 data) internal pure returns (DynamicBuffer memory result) { pBytes8(result, data); } - /// @dev Shorthand for `pBytes9(buffer, data)`. + /// @dev Shorthand for `pBytes9(p(), data)`. function pBytes9(bytes9 data) internal pure returns (DynamicBuffer memory result) { pBytes9(result, data); } - /// @dev Shorthand for `pBytes10(buffer, data)`. + /// @dev Shorthand for `pBytes10(p(), data)`. function pBytes10(bytes10 data) internal pure returns (DynamicBuffer memory result) { pBytes10(result, data); } - /// @dev Shorthand for `pBytes11(buffer, data)`. + /// @dev Shorthand for `pBytes11(p(), data)`. function pBytes11(bytes11 data) internal pure returns (DynamicBuffer memory result) { pBytes11(result, data); } - /// @dev Shorthand for `pBytes12(buffer, data)`. + /// @dev Shorthand for `pBytes12(p(), data)`. function pBytes12(bytes12 data) internal pure returns (DynamicBuffer memory result) { pBytes12(result, data); } - /// @dev Shorthand for `pBytes13(buffer, data)`. + /// @dev Shorthand for `pBytes13(p(), data)`. function pBytes13(bytes13 data) internal pure returns (DynamicBuffer memory result) { pBytes13(result, data); } - /// @dev Shorthand for `pBytes14(buffer, data)`. + /// @dev Shorthand for `pBytes14(p(), data)`. function pBytes14(bytes14 data) internal pure returns (DynamicBuffer memory result) { pBytes14(result, data); } - /// @dev Shorthand for `pBytes15(buffer, data)`. + /// @dev Shorthand for `pBytes15(p(), data)`. function pBytes15(bytes15 data) internal pure returns (DynamicBuffer memory result) { pBytes15(result, data); } - /// @dev Shorthand for `pBytes16(buffer, data)`. + /// @dev Shorthand for `pBytes16(p(), data)`. function pBytes16(bytes16 data) internal pure returns (DynamicBuffer memory result) { pBytes16(result, data); } - /// @dev Shorthand for `pBytes17(buffer, data)`. + /// @dev Shorthand for `pBytes17(p(), data)`. function pBytes17(bytes17 data) internal pure returns (DynamicBuffer memory result) { pBytes17(result, data); } - /// @dev Shorthand for `pBytes18(buffer, data)`. + /// @dev Shorthand for `pBytes18(p(), data)`. function pBytes18(bytes18 data) internal pure returns (DynamicBuffer memory result) { pBytes18(result, data); } - /// @dev Shorthand for `pBytes19(buffer, data)`. + /// @dev Shorthand for `pBytes19(p(), data)`. function pBytes19(bytes19 data) internal pure returns (DynamicBuffer memory result) { pBytes19(result, data); } - /// @dev Shorthand for `pBytes20(buffer, data)`. + /// @dev Shorthand for `pBytes20(p(), data)`. function pBytes20(bytes20 data) internal pure returns (DynamicBuffer memory result) { pBytes20(result, data); } - /// @dev Shorthand for `pBytes21(buffer, data)`. + /// @dev Shorthand for `pBytes21(p(), data)`. function pBytes21(bytes21 data) internal pure returns (DynamicBuffer memory result) { pBytes21(result, data); } - /// @dev Shorthand for `pBytes22(buffer, data)`. + /// @dev Shorthand for `pBytes22(p(), data)`. function pBytes22(bytes22 data) internal pure returns (DynamicBuffer memory result) { pBytes22(result, data); } - /// @dev Shorthand for `pBytes23(buffer, data)`. + /// @dev Shorthand for `pBytes23(p(), data)`. function pBytes23(bytes23 data) internal pure returns (DynamicBuffer memory result) { pBytes23(result, data); } - /// @dev Shorthand for `pBytes24(buffer, data)`. + /// @dev Shorthand for `pBytes24(p(), data)`. function pBytes24(bytes24 data) internal pure returns (DynamicBuffer memory result) { pBytes24(result, data); } - /// @dev Shorthand for `pBytes25(buffer, data)`. + /// @dev Shorthand for `pBytes25(p(), data)`. function pBytes25(bytes25 data) internal pure returns (DynamicBuffer memory result) { pBytes25(result, data); } - /// @dev Shorthand for `pBytes26(buffer, data)`. + /// @dev Shorthand for `pBytes26(p(), data)`. function pBytes26(bytes26 data) internal pure returns (DynamicBuffer memory result) { pBytes26(result, data); } - /// @dev Shorthand for `pBytes27(buffer, data)`. + /// @dev Shorthand for `pBytes27(p(), data)`. function pBytes27(bytes27 data) internal pure returns (DynamicBuffer memory result) { pBytes27(result, data); } - /// @dev Shorthand for `pBytes28(buffer, data)`. + /// @dev Shorthand for `pBytes28(p(), data)`. function pBytes28(bytes28 data) internal pure returns (DynamicBuffer memory result) { pBytes28(result, data); } - /// @dev Shorthand for `pBytes29(buffer, data)`. + /// @dev Shorthand for `pBytes29(p(), data)`. function pBytes29(bytes29 data) internal pure returns (DynamicBuffer memory result) { pBytes29(result, data); } - /// @dev Shorthand for `pBytes30(buffer, data)`. + /// @dev Shorthand for `pBytes30(p(), data)`. function pBytes30(bytes30 data) internal pure returns (DynamicBuffer memory result) { pBytes30(result, data); } - /// @dev Shorthand for `pBytes31(buffer, data)`. + /// @dev Shorthand for `pBytes31(p(), data)`. function pBytes31(bytes31 data) internal pure returns (DynamicBuffer memory result) { pBytes31(result, data); } - /// @dev Shorthand for `pBytes32(buffer, data)`. + /// @dev Shorthand for `pBytes32(p(), data)`. function pBytes32(bytes32 data) internal pure returns (DynamicBuffer memory result) { pBytes32(result, data); } diff --git a/test/DynamicArrayLib.t.sol b/test/DynamicArrayLib.t.sol new file mode 100644 index 000000000..e746eacd6 --- /dev/null +++ b/test/DynamicArrayLib.t.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import "./utils/SoladyTest.sol"; +import {DynamicArrayLib} from "../src/utils/DynamicArrayLib.sol"; + +contract DynamicArrayLibTest is SoladyTest { + using DynamicArrayLib for DynamicArrayLib.DynamicArray; + + function testDynamicArrayPush() public { + uint256 n = 100; + DynamicArrayLib.DynamicArray memory a; + unchecked { + for (uint256 i; i != n; ++i) { + a.p(i); + } + for (uint256 i; i != n; ++i) { + assertEq(a.get(i), i); + } + } + } + + function testDynamicArrayPushAfterReserve() public { + uint256 n = 100; + DynamicArrayLib.DynamicArray memory a; + a.reserve(n); + unchecked { + for (uint256 i; i != n; ++i) { + a.p(i); + } + for (uint256 i; i != n; ++i) { + assertEq(a.get(i), i); + } + } + } + + function testDynamicArrayPush(uint256 n, uint256 r) public { + n = _bound(n, 0, 50); + DynamicArrayLib.DynamicArray memory a; + assertEq(a.data.length, 0); + + unchecked { + for (uint256 i; i != n; ++i) { + a.p(i ^ r); + assertEq(a.length(), i + 1); + _checkMemory(); + if (_randomChance(2)) { + a.reserve(_bound(_random(), 0, 50)); + assertEq(a.length(), i + 1); + } + if (_randomChance(16)) { + for (uint256 j; j != i; ++j) { + assertEq(a.get(j), j ^ r); + } + } + } + for (uint256 i; i != n; ++i) { + assertEq(a.get(i), i ^ r); + } + + assertEq(keccak256(abi.encodePacked(a.data)), a.hash()); + + if (_randomChance(2)) { + a.clear(); + assertEq(a.length(), 0); + } else { + uint256 newLength = _bound(_random(), 0, 50); + a.resize(newLength); + assertEq(a.length(), newLength); + _checkMemory(); + for (uint256 i; i != newLength; ++i) { + if (i < n) { + assertEq(a.get(i), i ^ r); + } else { + assertEq(a.getBytes32(i), bytes32(0)); + } + } + } + } + } + + function testDynamicArraySlice() public { + DynamicArrayLib.DynamicArray memory a = DynamicArrayLib.p("a").p("b").p("c"); + assertEq(a.slice(0, 3).hash(), DynamicArrayLib.p("a").p("b").p("c").hash()); + assertEq(a.slice(1, 3).hash(), DynamicArrayLib.p("b").p("c").hash()); + assertEq(a.slice(2, 3).hash(), DynamicArrayLib.p("c").hash()); + assertEq(a.slice(3, 3).hash(), DynamicArrayLib.p().hash()); + assertEq(a.slice(0, 2).hash(), DynamicArrayLib.p("a").p("b").hash()); + assertEq(a.slice(0, 1).hash(), DynamicArrayLib.p("a").hash()); + assertEq(a.slice(0, 0).hash(), DynamicArrayLib.p().hash()); + assertEq(a.slice(1, 2).hash(), DynamicArrayLib.p("b").hash()); + assertEq(a.slice(1, 1).hash(), DynamicArrayLib.p().hash()); + } +} From 76fd6d4bc117c289d981f595ed25eb4211d52987 Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 23:02:12 +0000 Subject: [PATCH 05/12] Remove int256, cuz conciseness --- .gas-snapshot | 20 +++--- src/utils/DynamicArrayLib.sol | 111 +++++++++++---------------------- src/utils/DynamicBufferLib.sol | 5 ++ 3 files changed, 50 insertions(+), 86 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index d45f6c4b9..622663487 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -83,15 +83,15 @@ DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 324, μ: 264 DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) DynamicArrayLibTest:testDynamicArrayPush() (gas: 40722) -DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 82499, ~: 82822) +DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 83126, ~: 80942) DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40125) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11019) DynamicArrayLibTest:test__codesize() (gas: 3860) DynamicBufferLibTest:testClear(uint256) (runs: 324, μ: 34670, ~: 34765) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 324, μ: 908968, ~: 796247) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 324, μ: 903671, ~: 796247) DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 324, μ: 872070, ~: 681870) DynamicBufferLibTest:testDynamicBufferChaining() (gas: 12667) -DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 324, μ: 190102, ~: 34414) +DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 324, μ: 190088, ~: 34386) DynamicBufferLibTest:testDynamicBufferPushSinglesReinterpretCast() (gas: 22026) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2821) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2441) @@ -973,17 +973,17 @@ LibStringTest:testToStringZeroBrutalized() (gas: 602785) LibStringTest:testToStringZeroRightPadded(uint256) (runs: 324, μ: 735768, ~: 603756) LibStringTest:test__codesize() (gas: 43124) LibZipTest:testCdCompress() (gas: 126842) -LibZipTest:testCdCompressDecompress(bytes) (runs: 324, μ: 775077, ~: 658206) -LibZipTest:testCdCompressDecompress(uint256) (runs: 324, μ: 804098, ~: 677456) +LibZipTest:testCdCompressDecompress(bytes) (runs: 324, μ: 773079, ~: 657775) +LibZipTest:testCdCompressDecompress(uint256) (runs: 324, μ: 795884, ~: 677714) LibZipTest:testCdDecompressOnInvalidInput() (gas: 1397) LibZipTest:testCdFallback() (gas: 5622174) -LibZipTest:testCdFallback(bytes,uint256) (runs: 324, μ: 1172807, ~: 1062568) -LibZipTest:testCdFallbackDecompressor(bytes) (runs: 324, μ: 121448, ~: 118392) -LibZipTest:testCdFallbackDecompressor(uint256) (runs: 324, μ: 170993, ~: 159237) +LibZipTest:testCdFallback(bytes,uint256) (runs: 324, μ: 1159884, ~: 1062748) +LibZipTest:testCdFallbackDecompressor(bytes) (runs: 324, μ: 121417, ~: 117962) +LibZipTest:testCdFallbackDecompressor(uint256) (runs: 324, μ: 173623, ~: 157893) LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 324, μ: 592, ~: 585) -LibZipTest:testDecompressWontRevert(bytes) (runs: 324, μ: 746139, ~: 637547) +LibZipTest:testDecompressWontRevert(bytes) (runs: 324, μ: 759898, ~: 637282) LibZipTest:testFlzCompressDecompress() (gas: 1254342) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 324, μ: 768973, ~: 675583) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 324, μ: 734687, ~: 669875) LibZipTest:testFlzCompressDecompress2() (gas: 763987) LibZipTest:test__codesize() (gas: 20417) LifebuoyTest:testLifebuoyCreateDeployment(address,address,uint256) (runs: 324, μ: 3057128, ~: 3342222) diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index 7dd2f9fe8..43a590745 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -22,6 +22,41 @@ library DynamicArrayLib { // Some of these functions returns the same array for function chaining. // `e.g. `array.p("1").p("2")`. + /// @dev Shorthand for `array.data.length`. + function length(DynamicArray memory array) internal pure returns (uint256) { + return array.data.length; + } + + /// @dev Clears the array without deallocating the memory. + function clear(DynamicArray memory array) internal pure returns (DynamicArray memory result) { + _deallocate(result); + /// @solidity memory-safe-assembly + assembly { + mstore(mload(array), 0) + } + result = array; + } + + /// @dev Resizes the array to contain `n` elements. New elements will be zeroized. + function resize(DynamicArray memory array, uint256 n) + internal + pure + returns (DynamicArray memory result) + { + _deallocate(result); + result = reserve(array, n); + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(result) + let arrLen := mload(arrData) + if gt(n, arrLen) { + let o := add(add(0x20, arrData), shl(5, arrLen)) + codecopy(o, codesize(), shl(5, sub(n, arrLen))) + } + mstore(arrData, n) + } + } + /// @dev Reserves at least `minimum` amount of contiguous memory. function reserve(DynamicArray memory array, uint256 minimum) internal @@ -70,41 +105,6 @@ library DynamicArrayLib { } } - /// @dev Shorthand for `array.data.length`. - function length(DynamicArray memory array) internal pure returns (uint256) { - return array.data.length; - } - - /// @dev Clears the array without deallocating the memory. - function clear(DynamicArray memory array) internal pure returns (DynamicArray memory result) { - _deallocate(result); - /// @solidity memory-safe-assembly - assembly { - mstore(mload(array), 0) - } - result = array; - } - - /// @dev Resizes the array to contain `n` elements. New elements will be zeroized. - function resize(DynamicArray memory array, uint256 n) - internal - pure - returns (DynamicArray memory result) - { - _deallocate(result); - result = reserve(array, n); - /// @solidity memory-safe-assembly - assembly { - let arrData := mload(result) - let arrLen := mload(arrData) - if gt(n, arrLen) { - let o := add(add(0x20, arrData), shl(5, arrLen)) - codecopy(o, codesize(), shl(5, sub(n, arrLen))) - } - mstore(arrData, n) - } - } - /// @dev Appends `data` to `array`. function p(DynamicArray memory array, uint256 data) internal @@ -159,16 +159,6 @@ library DynamicArrayLib { } } - /// @dev Appends `data` to `array`. - function p(DynamicArray memory array, int256 data) - internal - pure - returns (DynamicArray memory result) - { - _deallocate(result); - result = p(array, uint256(data)); - } - /// @dev Appends `data` to `array`. function p(DynamicArray memory array, address data) internal @@ -207,11 +197,6 @@ library DynamicArrayLib { p(result, uint256(data)); } - /// @dev Shorthand for `p(p(), data)`. - function p(int256 data) internal pure returns (DynamicArray memory result) { - p(result, uint256(data)); - } - /// @dev Shorthand for `p(p(), data)`. function p(address data) internal pure returns (DynamicArray memory result) { p(result, uint256(uint160(data))); @@ -247,18 +232,6 @@ library DynamicArrayLib { } } - /// @dev Returns the element at `array.data[i]`, without bounds checking. - function getInt256(DynamicArray memory array, uint256 i) - internal - pure - returns (int256 result) - { - /// @solidity memory-safe-assembly - assembly { - result := mload(add(add(mload(array), 0x20), shl(5, i))) - } - } - /// @dev Returns the element at `array.data[i]`, without bounds checking. function getAddress(DynamicArray memory array, uint256 i) internal @@ -305,20 +278,6 @@ library DynamicArrayLib { } } - /// @dev Sets `array.data[i]` to `data`, without bounds checking. - function set(DynamicArray memory array, uint256 i, int256 data) - internal - pure - returns (DynamicArray memory result) - { - _deallocate(result); - result = array; - /// @solidity memory-safe-assembly - assembly { - mstore(add(add(mload(array), 0x20), shl(5, i)), data) - } - } - /// @dev Sets `array.data[i]` to `data`, without bounds checking. function set(DynamicArray memory array, uint256 i, address data) internal diff --git a/src/utils/DynamicBufferLib.sol b/src/utils/DynamicBufferLib.sol index 0b79d10ec..36750b885 100644 --- a/src/utils/DynamicBufferLib.sol +++ b/src/utils/DynamicBufferLib.sol @@ -23,6 +23,11 @@ library DynamicBufferLib { // Some of these functions returns the same buffer for function chaining. // `e.g. `buffer.p("1").p("2")`. + /// @dev Shorthand for `buffer.data.length`. + function length(DynamicBuffer memory buffer) internal pure returns (uint256) { + return buffer.data.length; + } + /// @dev Reserves at least `minimum` amount of contiguous memory. function reserve(DynamicBuffer memory buffer, uint256 minimum) internal From 2fb60749e343fcb79605de712a5bcb470e205e16 Mon Sep 17 00:00:00 2001 From: Vectorized Date: Fri, 13 Sep 2024 23:13:54 +0000 Subject: [PATCH 06/12] T --- .gas-snapshot | 2 +- src/utils/DynamicArrayLib.sol | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 622663487..9ac35d73e 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -83,7 +83,7 @@ DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 324, μ: 264 DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) DynamicArrayLibTest:testDynamicArrayPush() (gas: 40722) -DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 83126, ~: 80942) +DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 83163, ~: 80942) DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40125) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11019) DynamicArrayLibTest:test__codesize() (gas: 3860) diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index 43a590745..bda89cc32 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -37,6 +37,25 @@ library DynamicArrayLib { result = array; } + /// @dev Clears the array and attempts to free the memory if possible. + function free(DynamicArray memory array) internal pure returns (DynamicArray memory result) { + _deallocate(result); + /// @solidity memory-safe-assembly + assembly { + let arrData := mload(array) + let prime := 8188386068317523 + let cap := mload(sub(arrData, 0x20)) + // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. + cap := mul(div(cap, prime), iszero(mod(cap, prime))) + // If the memory is contiguous, we can free it. + if iszero(or(xor(mload(0x40), add(arrData, add(0x20, cap))), eq(arrData, 0x60))) { + mstore(0x40, sub(arrData, 0x20)) + } + mstore(array, 0x60) + } + result = array; + } + /// @dev Resizes the array to contain `n` elements. New elements will be zeroized. function resize(DynamicArray memory array, uint256 n) internal @@ -67,8 +86,7 @@ library DynamicArrayLib { result = array; /// @solidity memory-safe-assembly assembly { - let arrData := mload(array) - for {} gt(minimum, mload(arrData)) {} { + for { let arrData := mload(array) } gt(minimum, mload(arrData)) {} { let w := not(0x1f) // Some random prime number to multiply `cap`, so that // we know that the `cap` is for a dynamic array. @@ -332,18 +350,6 @@ library DynamicArrayLib { } } - /// @dev Returns the underlying array as a `int256[]`. - function asInt256Array(DynamicArray memory array) - internal - pure - returns (int256[] memory result) - { - /// @solidity memory-safe-assembly - assembly { - result := mload(array) - } - } - /// @dev Returns the underlying array as a `address[]`. function asAddressArray(DynamicArray memory array) internal From 24d007240f29462d3919f81dc56291dafb4e6618 Mon Sep 17 00:00:00 2001 From: atarpara Date: Sat, 14 Sep 2024 17:31:04 +0530 Subject: [PATCH 07/12] Added pop() Method --- .gas-snapshot | 1148 ++++++++++++++++----------------- src/utils/DynamicArrayLib.sol | 11 + test/DynamicArrayLib.t.sol | 34 +- 3 files changed, 608 insertions(+), 585 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 9ac35d73e..496ceef03 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,9 +1,9 @@ Base64Test:testBase64DecodeSentenceGas() (gas: 3663) Base64Test:testBase64DecodeShortStringGas() (gas: 896) -Base64Test:testBase64EncodeDecode(bytes) (runs: 324, μ: 6064, ~: 4968) -Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 324, μ: 883743, ~: 735717) +Base64Test:testBase64EncodeDecode(bytes) (runs: 270, μ: 5968, ~: 4968) +Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 270, μ: 890077, ~: 735418) Base64Test:testBase64EncodeEmptyString() (gas: 902) -Base64Test:testBase64EncodeFileSafeAndNoPadding(bytes,bool,bool) (runs: 324, μ: 15718, ~: 14264) +Base64Test:testBase64EncodeFileSafeAndNoPadding(bytes,bool,bool) (runs: 270, μ: 15309, ~: 14264) Base64Test:testBase64EncodeSentence() (gas: 4333) Base64Test:testBase64EncodeShortStrings() (gas: 7610) Base64Test:testBase64EncodeToStringWithDoublePadding() (gas: 1553) @@ -11,91 +11,91 @@ Base64Test:testBase64EncodeToStringWithNoPadding() (gas: 1531) Base64Test:testBase64EncodeToStringWithSinglePadding() (gas: 1487) Base64Test:testBase64WordBoundary() (gas: 11624) Base64Test:test__codesize() (gas: 6841) -BrutalizerTest:testBrutalizedAddress(bytes32,address) (runs: 324, μ: 1389, ~: 1330) -BrutalizerTest:testBrutalizedBool(bytes32,bool) (runs: 324, μ: 1097, ~: 741) -BrutalizerTest:testBrutalizedBytes1(bytes32,bytes1) (runs: 324, μ: 1471, ~: 1397) -BrutalizerTest:testBrutalizedBytes31(bytes32,bytes31) (runs: 324, μ: 1395, ~: 1336) -BrutalizerTest:testBrutalizedUint248(bytes32,uint248) (runs: 324, μ: 1355, ~: 1287) -BrutalizerTest:testBrutalizedUint8(bytes32,uint8) (runs: 324, μ: 1288, ~: 1203) +BrutalizerTest:testBrutalizedAddress(bytes32,address) (runs: 270, μ: 1391, ~: 1330) +BrutalizerTest:testBrutalizedBool(bytes32,bool) (runs: 270, μ: 1119, ~: 1147) +BrutalizerTest:testBrutalizedBytes1(bytes32,bytes1) (runs: 270, μ: 1478, ~: 1397) +BrutalizerTest:testBrutalizedBytes31(bytes32,bytes31) (runs: 270, μ: 1400, ~: 1336) +BrutalizerTest:testBrutalizedUint248(bytes32,uint248) (runs: 270, μ: 1359, ~: 1287) +BrutalizerTest:testBrutalizedUint8(bytes32,uint8) (runs: 270, μ: 1285, ~: 1203) BrutalizerTest:test__codesize() (gas: 2592) CREATE3Test:testDeployERC20() (gas: 781627) -CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 324, μ: 828053, ~: 827713) +CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 270, μ: 828201, ~: 827713) CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 613) CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96898738) -CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 324, μ: 96880314, ~: 96880284) +CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 270, μ: 96880364, ~: 96880375) CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889196) -CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 324, μ: 96881060, ~: 96881001) +CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 270, μ: 96881073, ~: 96881007) CREATE3Test:test__codesize() (gas: 13862) -DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 324, μ: 4202, ~: 4209) -DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 324, μ: 4142, ~: 4155) -DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 324, μ: 4137, ~: 4129) -DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 324, μ: 7249, ~: 7257) -DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 324, μ: 3753, ~: 3721) -DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 324, μ: 6814, ~: 6822) +DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 270, μ: 4200, ~: 4209) +DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 270, μ: 4143, ~: 4155) +DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 270, μ: 4139, ~: 4129) +DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 270, μ: 7247, ~: 7257) +DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 270, μ: 3756, ~: 3721) +DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 270, μ: 6811, ~: 6822) DateTimeLibTest:testDateTimeArithmeticReverts() (gas: 4495) DateTimeLibTest:testDateTimeMaxSupported() (gas: 2823) -DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 324, μ: 4136, ~: 4089) -DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 324, μ: 2561, ~: 2569) +DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 4141, ~: 4089) +DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2562, ~: 2552) DateTimeLibTest:testDateToAndFroEpochDay() (gas: 877945) DateTimeLibTest:testDateToAndFroTimestamp() (gas: 926776) DateTimeLibTest:testDateToEpochDay() (gas: 1559) -DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 324, μ: 2301, ~: 2304) -DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 324, μ: 2222, ~: 2230) +DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2301, ~: 2299) +DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2223, ~: 2213) DateTimeLibTest:testDateToEpochDayGas() (gas: 764427) DateTimeLibTest:testDateToEpochDayGas2() (gas: 770404) DateTimeLibTest:testDayOfWeek() (gas: 175255) DateTimeLibTest:testDaysInMonth() (gas: 1226) -DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 324, μ: 1069, ~: 1084) +DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 270, μ: 1071, ~: 1084) DateTimeLibTest:testDaysToDate() (gas: 8377) -DateTimeLibTest:testEpochDayToDate(uint256) (runs: 324, μ: 1045, ~: 1045) -DateTimeLibTest:testEpochDayToDateDifferential(uint256) (runs: 324, μ: 1779, ~: 1721) -DateTimeLibTest:testEpochDayToDateDifferential2(uint256) (runs: 324, μ: 1786, ~: 1709) +DateTimeLibTest:testEpochDayToDate(uint256) (runs: 270, μ: 1045, ~: 1045) +DateTimeLibTest:testEpochDayToDateDifferential(uint256) (runs: 270, μ: 1778, ~: 1721) +DateTimeLibTest:testEpochDayToDateDifferential2(uint256) (runs: 270, μ: 1785, ~: 1709) DateTimeLibTest:testEpochDayToDateGas() (gas: 348457) DateTimeLibTest:testEpochDayToDateGas2() (gas: 360513) DateTimeLibTest:testIsLeapYear() (gas: 741) -DateTimeLibTest:testIsLeapYear(uint256) (runs: 324, μ: 539, ~: 517) +DateTimeLibTest:testIsLeapYear(uint256) (runs: 270, μ: 538, ~: 517) DateTimeLibTest:testIsSupportedDateFalse() (gas: 1180) -DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 324, μ: 2951, ~: 2949) +DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2965, ~: 2949) DateTimeLibTest:testIsSupportedDateTrue() (gas: 626) DateTimeLibTest:testIsSupportedEpochDayFalse() (gas: 494) DateTimeLibTest:testIsSupportedEpochDayTrue() (gas: 305) DateTimeLibTest:testIsSupportedTimestampFalse() (gas: 541) DateTimeLibTest:testIsSupportedTimestampTrue() (gas: 326) -DateTimeLibTest:testIsWeekEnd(uint256) (runs: 324, μ: 692, ~: 617) +DateTimeLibTest:testIsWeekEnd(uint256) (runs: 270, μ: 692, ~: 617) DateTimeLibTest:testMondayTimestamp() (gas: 1106) -DateTimeLibTest:testMondayTimestamp(uint256) (runs: 324, μ: 769, ~: 836) +DateTimeLibTest:testMondayTimestamp(uint256) (runs: 270, μ: 771, ~: 836) DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp() (gas: 12053) -DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 324, μ: 3543, ~: 3576) +DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 270, μ: 3554, ~: 3576) DateTimeLibTest:testWeekday() (gas: 682) DateTimeLibTest:test__codesize() (gas: 19163) DelegateCheckerLibTest:testCheckDelegateForAll() (gas: 36319) -DelegateCheckerLibTest:testCheckDelegateForAll(address,address,bytes32) (runs: 324, μ: 232464, ~: 244844) +DelegateCheckerLibTest:testCheckDelegateForAll(address,address,bytes32) (runs: 270, μ: 231489, ~: 242286) DelegateCheckerLibTest:testCheckDelegateForContract() (gas: 55887) -DelegateCheckerLibTest:testCheckDelegateForContract(address,address,address,bytes32) (runs: 324, μ: 357072, ~: 311985) +DelegateCheckerLibTest:testCheckDelegateForContract(address,address,address,bytes32) (runs: 270, μ: 361198, ~: 311985) DelegateCheckerLibTest:testCheckDelegateForERC1155() (gas: 64282) -DelegateCheckerLibTest:testCheckDelegateForERC1155(address,address,address,uint256,bytes32) (runs: 324, μ: 301044, ~: 304815) +DelegateCheckerLibTest:testCheckDelegateForERC1155(address,address,address,uint256,bytes32) (runs: 270, μ: 286404, ~: 301708) DelegateCheckerLibTest:testCheckDelegateForERC20() (gas: 63763) -DelegateCheckerLibTest:testCheckDelegateForERC20(address,address,address,bytes32) (runs: 324, μ: 305777, ~: 282608) +DelegateCheckerLibTest:testCheckDelegateForERC20(address,address,address,bytes32) (runs: 270, μ: 297724, ~: 282189) DelegateCheckerLibTest:testCheckDelegateForERC721() (gas: 71988) -DelegateCheckerLibTest:testCheckDelegateForERC721(address,address,address,uint256,bytes32) (runs: 324, μ: 428473, ~: 384006) +DelegateCheckerLibTest:testCheckDelegateForERC721(address,address,address,uint256,bytes32) (runs: 270, μ: 435880, ~: 406088) DelegateCheckerLibTest:test__codesize() (gas: 32210) -DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 324, μ: 264770, ~: 224774) +DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 270, μ: 258615, ~: 224506) DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) -DynamicArrayLibTest:testDynamicArrayPush() (gas: 40722) -DynamicArrayLibTest:testDynamicArrayPush(uint256,uint256) (runs: 324, μ: 83163, ~: 80942) -DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40125) -DynamicArrayLibTest:testDynamicArraySlice() (gas: 11019) -DynamicArrayLibTest:test__codesize() (gas: 3860) -DynamicBufferLibTest:testClear(uint256) (runs: 324, μ: 34670, ~: 34765) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 324, μ: 903671, ~: 796247) -DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 324, μ: 872070, ~: 681870) +DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40103) +DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65229) +DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 270, μ: 80838, ~: 78143) +DynamicArrayLibTest:testDynamicArraySlice() (gas: 11086) +DynamicArrayLibTest:test__codesize() (gas: 4024) +DynamicBufferLibTest:testClear(uint256) (runs: 270, μ: 34669, ~: 34768) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 270, μ: 915414, ~: 797126) +DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 270, μ: 868665, ~: 682018) DynamicBufferLibTest:testDynamicBufferChaining() (gas: 12667) -DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 324, μ: 190088, ~: 34386) +DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 270, μ: 197803, ~: 34428) DynamicBufferLibTest:testDynamicBufferPushSinglesReinterpretCast() (gas: 22026) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2821) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2441) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 324, μ: 2834, ~: 2077) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 270, μ: 2796, ~: 2047) DynamicBufferLibTest:testDynamicBufferShorthands() (gas: 27221) DynamicBufferLibTest:testJoinWithConcat() (gas: 31407) DynamicBufferLibTest:testJoinWithDynamicBuffer() (gas: 10830) @@ -106,15 +106,15 @@ ECDSATest:testBytesToEthSignedMessageHashEmpty() (gas: 556) ECDSATest:testBytesToEthSignedMessageHashExceedsMaxLengthReverts() (gas: 615885) ECDSATest:testBytesToEthSignedMessageHashLong() (gas: 725) ECDSATest:testBytesToEthSignedMessageHashShort() (gas: 576) -ECDSATest:testCanonicalHash(bytes32) (runs: 324, μ: 140657, ~: 39115) +ECDSATest:testCanonicalHash(bytes32) (runs: 270, μ: 127698, ~: 38971) ECDSATest:testCanonicalHashCalldataWith64bytesSignature() (gas: 1232939) ECDSATest:testCanonicalHashCalldataWithRegularSignature() (gas: 1232433) ECDSATest:testCanonicalHashWith64bytesSignature() (gas: 614272) ECDSATest:testCanonicalHashWithRegularSignature() (gas: 612711) ECDSATest:testEmptyCalldataHelpers() (gas: 3268) ECDSATest:testMalleabilityTrick() (gas: 2564) -ECDSATest:testMalleabilityTrick(uint256) (runs: 324, μ: 450, ~: 449) -ECDSATest:testRecoverAndTryRecover(bytes32) (runs: 324, μ: 2930448, ~: 2534890) +ECDSATest:testMalleabilityTrick(uint256) (runs: 270, μ: 450, ~: 449) +ECDSATest:testRecoverAndTryRecover(bytes32) (runs: 270, μ: 2884609, ~: 2534840) ECDSATest:testRecoverWithInvalidLongSignatureReverts() (gas: 7395) ECDSATest:testRecoverWithInvalidShortSignatureReturnsZero() (gas: 7231) ECDSATest:testRecoverWithInvalidSignatureReverts() (gas: 8018) @@ -164,60 +164,60 @@ EIP712Test:testHashTypedDataWithChaindIdChange() (gas: 45554) EIP712Test:test__codesize() (gas: 11394) ERC1155HooksTest:testERC1155Hooks() (gas: 4543936) ERC1155HooksTest:test__codesize() (gas: 11851) -ERC1155Test:testApproveAll(address,bool) (runs: 324, μ: 49277, ~: 58445) -ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 324, μ: 715, ~: 715) -ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 324, μ: 31915, ~: 34878) -ERC1155Test:testBatchBalanceOf(uint256) (runs: 324, μ: 171641, ~: 173592) -ERC1155Test:testBatchBurn(uint256) (runs: 324, μ: 221497, ~: 196720) -ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 324, μ: 234836, ~: 211493) -ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 324, μ: 55703, ~: 55194) -ERC1155Test:testBatchMintToEOA(uint256) (runs: 324, μ: 173975, ~: 173267) -ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 324, μ: 1174876, ~: 825479) -ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 324, μ: 192330, ~: 186321) -ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 324, μ: 370088, ~: 367206) -ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 324, μ: 320324, ~: 288276) -ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 324, μ: 103435, ~: 90516) -ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 324, μ: 48108, ~: 36001) -ERC1155Test:testBurn(uint256) (runs: 324, μ: 142388, ~: 126935) -ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 324, μ: 144130, ~: 129555) -ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 324, μ: 25514, ~: 16060) -ERC1155Test:testMintToEOA(uint256) (runs: 324, μ: 119238, ~: 104303) -ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 324, μ: 982085, ~: 683266) -ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 324, μ: 118069, ~: 103768) -ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 324, μ: 303726, ~: 284222) -ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 324, μ: 252186, ~: 238863) -ERC1155Test:testMintToZeroReverts(uint256) (runs: 324, μ: 52122, ~: 33637) +ERC1155Test:testApproveAll(address,bool) (runs: 270, μ: 49361, ~: 58445) +ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 270, μ: 715, ~: 715) +ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 270, μ: 32133, ~: 34895) +ERC1155Test:testBatchBalanceOf(uint256) (runs: 270, μ: 167142, ~: 172999) +ERC1155Test:testBatchBurn(uint256) (runs: 270, μ: 227033, ~: 208633) +ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 270, μ: 230912, ~: 210514) +ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 270, μ: 55569, ~: 55063) +ERC1155Test:testBatchMintToEOA(uint256) (runs: 270, μ: 171705, ~: 173057) +ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 270, μ: 1037386, ~: 770381) +ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 270, μ: 194500, ~: 186389) +ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 367175, ~: 367061) +ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 322165, ~: 287957) +ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 270, μ: 96427, ~: 83761) +ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 270, μ: 46614, ~: 35998) +ERC1155Test:testBurn(uint256) (runs: 270, μ: 145359, ~: 126893) +ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 270, μ: 144910, ~: 129715) +ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 270, μ: 25637, ~: 16060) +ERC1155Test:testMintToEOA(uint256) (runs: 270, μ: 115610, ~: 103632) +ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 270, μ: 984383, ~: 683266) +ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 270, μ: 118375, ~: 103741) +ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 270, μ: 308287, ~: 284250) +ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 270, μ: 252182, ~: 238810) +ERC1155Test:testMintToZeroReverts(uint256) (runs: 270, μ: 51610, ~: 33639) ERC1155Test:testSafeBatchTransfer() (gas: 8332973) -ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 324, μ: 283165, ~: 284799) -ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 324, μ: 2455108, ~: 1009646) -ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 324, μ: 303064, ~: 293329) -ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 324, μ: 476753, ~: 471916) -ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 324, μ: 447586, ~: 429562) -ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 324, μ: 218940, ~: 197817) -ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 324, μ: 75264, ~: 68211) -ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 324, μ: 247975, ~: 215922) -ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 324, μ: 158817, ~: 132850) -ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 324, μ: 175575, ~: 140899) -ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 324, μ: 152775, ~: 104115) -ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 324, μ: 184972, ~: 155215) -ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 324, μ: 1447941, ~: 763876) -ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 324, μ: 203471, ~: 173683) -ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 324, μ: 385721, ~: 354738) -ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 324, μ: 342518, ~: 310083) -ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 324, μ: 132299, ~: 103593) +ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 270, μ: 274991, ~: 235495) +ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 270, μ: 2299702, ~: 1010463) +ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 270, μ: 299883, ~: 293514) +ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 475680, ~: 471769) +ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 443795, ~: 429355) +ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 270, μ: 224067, ~: 197730) +ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 270, μ: 73916, ~: 68197) +ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 270, μ: 249306, ~: 214357) +ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 270, μ: 155546, ~: 132140) +ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 270, μ: 175693, ~: 140778) +ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 270, μ: 156773, ~: 104365) +ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 270, μ: 184733, ~: 154433) +ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 270, μ: 1502732, ~: 764430) +ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 270, μ: 205375, ~: 173840) +ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 379501, ~: 354738) +ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 344899, ~: 309688) +ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 270, μ: 136674, ~: 103723) ERC1155Test:test__codesize() (gas: 42015) ERC1271Test:testBasefeeBytecodeContract() (gas: 45430) ERC1271Test:testIsValidSignature() (gas: 2390984) -ERC1271Test:testIsValidSignature(uint256) (runs: 324, μ: 248839, ~: 211102) +ERC1271Test:testIsValidSignature(uint256) (runs: 270, μ: 249744, ~: 211135) ERC1271Test:testSupportsNestedTypedDataSign() (gas: 165249) ERC1271Test:test__codesize() (gas: 29885) ERC1967FactoryTest:testChangeAdmin() (gas: 266261) ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257261) ERC1967FactoryTest:testDeploy() (gas: 257129) -ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 324, μ: 340294, ~: 340857) +ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 270, μ: 340356, ~: 340860) ERC1967FactoryTest:testDeployAndCallWithRevert() (gas: 211629) -ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 324, μ: 96836, ~: 43744) -ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 324, μ: 319833, ~: 349808) +ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 270, μ: 95173, ~: 43744) +ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 270, μ: 319940, ~: 349807) ERC1967FactoryTest:testFactoryDeployment() (gas: 494423) ERC1967FactoryTest:testProxyFails() (gas: 258426) ERC1967FactoryTest:testProxySucceeds() (gas: 255451) @@ -230,45 +230,45 @@ ERC1967FactoryTest:test__codesize() (gas: 32273) ERC20Invariants:invariantBalanceSum() (runs: 10, calls: 150, reverts: 84) ERC20Invariants:test__codesize() (gas: 7280) ERC20Test:testApprove() (gas: 35730) -ERC20Test:testApprove(address,uint256) (runs: 324, μ: 31058, ~: 31181) +ERC20Test:testApprove(address,uint256) (runs: 270, μ: 31107, ~: 31181) ERC20Test:testBurn() (gas: 62424) -ERC20Test:testBurn(address,uint256,uint256) (runs: 324, μ: 62436, ~: 63044) -ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 324, μ: 56603, ~: 56956) -ERC20Test:testDirectSpendAllowance(uint256) (runs: 324, μ: 61817, ~: 61596) -ERC20Test:testDirectTransfer(uint256) (runs: 324, μ: 99724, ~: 112559) +ERC20Test:testBurn(address,uint256,uint256) (runs: 270, μ: 62576, ~: 63044) +ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 56674, ~: 56954) +ERC20Test:testDirectSpendAllowance(uint256) (runs: 270, μ: 61820, ~: 61604) +ERC20Test:testDirectTransfer(uint256) (runs: 270, μ: 99055, ~: 86728) ERC20Test:testInfiniteApproveTransferFrom() (gas: 90855) ERC20Test:testMetadata() (gas: 16516) ERC20Test:testMint() (gas: 58888) -ERC20Test:testMint(address,uint256) (runs: 324, μ: 58885, ~: 59131) +ERC20Test:testMint(address,uint256) (runs: 270, μ: 58984, ~: 59131) ERC20Test:testMintOverMaxUintReverts() (gas: 56350) ERC20Test:testPermit() (gas: 89369) -ERC20Test:testPermit(uint256) (runs: 324, μ: 89464, ~: 89465) -ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 324, μ: 41227, ~: 41226) -ERC20Test:testPermitBadNonceReverts(uint256) (runs: 324, μ: 41652, ~: 41626) -ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 324, μ: 35763, ~: 35756) -ERC20Test:testPermitReplayReverts(uint256) (runs: 324, μ: 92110, ~: 92166) +ERC20Test:testPermit(uint256) (runs: 270, μ: 89458, ~: 89460) +ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 270, μ: 41230, ~: 41229) +ERC20Test:testPermitBadNonceReverts(uint256) (runs: 270, μ: 41652, ~: 41626) +ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 270, μ: 35767, ~: 35757) +ERC20Test:testPermitReplayReverts(uint256) (runs: 270, μ: 92098, ~: 92166) ERC20Test:testTransfer() (gas: 65884) -ERC20Test:testTransfer(address,uint256) (runs: 324, μ: 65845, ~: 66100) +ERC20Test:testTransfer(address,uint256) (runs: 270, μ: 65942, ~: 66100) ERC20Test:testTransferFrom() (gas: 86323) -ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 324, μ: 93258, ~: 95625) +ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 270, μ: 93486, ~: 95625) ERC20Test:testTransferFromInsufficientAllowanceReverts() (gas: 82333) -ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 324, μ: 82681, ~: 82848) +ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 270, μ: 82715, ~: 82848) ERC20Test:testTransferFromInsufficientBalanceReverts() (gas: 62681) -ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 324, μ: 63362, ~: 63288) +ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 63420, ~: 63283) ERC20Test:testTransferInsufficientBalanceReverts() (gas: 56494) -ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 324, μ: 56662, ~: 57015) +ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 56732, ~: 57013) ERC20Test:test__codesize() (gas: 22610) -ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 324, μ: 479, ~: 480) -ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 324, μ: 108885, ~: 105317) +ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 270, μ: 480, ~: 480) +ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 270, μ: 108726, ~: 105308) ERC2981Test:test__codesize() (gas: 7229) ERC4337FactoryTest:testCreateAccountRepeatedDeployment() (gas: 149753) -ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 324, μ: 171337, ~: 171396) -ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 324, μ: 132197, ~: 139605) +ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 270, μ: 171340, ~: 171396) +ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 270, μ: 130710, ~: 139605) ERC4337FactoryTest:test__codesize() (gas: 13117) ERC4337Test:testCdFallback() (gas: 438041) ERC4337Test:testCdFallback2() (gas: 1135303) ERC4337Test:testDelegateExecute() (gas: 366407) -ERC4337Test:testDelegateExecute(uint256) (runs: 324, μ: 355067, ~: 345250) +ERC4337Test:testDelegateExecute(uint256) (runs: 270, μ: 355115, ~: 345250) ERC4337Test:testDelegateExecuteRevertsIfOwnerSlotValueChanged() (gas: 320067) ERC4337Test:testDepositFunctions() (gas: 497221) ERC4337Test:testDirectStorage() (gas: 70503) @@ -276,10 +276,10 @@ ERC4337Test:testDisableInitializerForImplementation() (gas: 1348481) ERC4337Test:testETHReceived() (gas: 16584) ERC4337Test:testExecute() (gas: 383460) ERC4337Test:testExecuteBatch() (gas: 694187) -ERC4337Test:testExecuteBatch(uint256) (runs: 324, μ: 543161, ~: 670275) +ERC4337Test:testExecuteBatch(uint256) (runs: 270, μ: 519742, ~: 369238) ERC4337Test:testInitializer() (gas: 285469) ERC4337Test:testIsValidSignature() (gas: 120476) -ERC4337Test:testIsValidSignaturePersonalSign(bytes32) (runs: 324, μ: 103736, ~: 103599) +ERC4337Test:testIsValidSignaturePersonalSign(bytes32) (runs: 270, μ: 103730, ~: 103599) ERC4337Test:testIsValidSignatureViaRPC() (gas: 96881551) ERC4337Test:testIsValidSignatureWrapped() (gas: 446377) ERC4337Test:testOnERC1155BatchReceived() (gas: 1467437) @@ -290,15 +290,15 @@ ERC4337Test:testValidateUserOp() (gas: 484693) ERC4337Test:test__codesize() (gas: 55947) ERC4626Test:testDepositWithNoApprovalReverts() (gas: 16954) ERC4626Test:testDepositWithNotEnoughApprovalReverts() (gas: 90752) -ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 324, μ: 3322, ~: 3319) +ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 270, μ: 3315, ~: 3319) ERC4626Test:testMetadata() (gas: 14354) ERC4626Test:testMintWithNoApprovalReverts() (gas: 16928) ERC4626Test:testMintZero() (gas: 53930) ERC4626Test:testMultipleMintDepositRedeemWithdraw() (gas: 412871) ERC4626Test:testRedeemWithNoShareAmountReverts() (gas: 10918) ERC4626Test:testRedeemWithNotEnoughShareAmountReverts() (gas: 143777) -ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 324, μ: 202556, ~: 202561) -ERC4626Test:testSingleMintRedeem(uint128) (runs: 324, μ: 201522, ~: 201527) +ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 270, μ: 202557, ~: 202561) +ERC4626Test:testSingleMintRedeem(uint128) (runs: 270, μ: 201522, ~: 201527) ERC4626Test:testTryGetAssetDecimals() (gas: 30700474) ERC4626Test:testUseVirtualShares() (gas: 2428448) ERC4626Test:testVaultInteractionsForSomeoneElse() (gas: 297836) @@ -309,156 +309,156 @@ ERC4626Test:testWithdrawZero() (gas: 52056) ERC4626Test:test__codesize() (gas: 36907) ERC6551Test:testBaseFeeMini() (gas: 39514) ERC6551Test:testCdFallback() (gas: 895614) -ERC6551Test:testDeployERC6551(uint256) (runs: 324, μ: 170260, ~: 168569) +ERC6551Test:testDeployERC6551(uint256) (runs: 270, μ: 170383, ~: 168569) ERC6551Test:testDeployERC6551Proxy() (gas: 80395) ERC6551Test:testExecute() (gas: 507328) ERC6551Test:testExecuteBatch() (gas: 817415) -ERC6551Test:testExecuteBatch(uint256) (runs: 324, μ: 663398, ~: 768876) +ERC6551Test:testExecuteBatch(uint256) (runs: 270, μ: 652920, ~: 768710) ERC6551Test:testInitializeERC6551ProxyImplementation() (gas: 189976) -ERC6551Test:testIsValidSigner(address) (runs: 324, μ: 167328, ~: 167320) +ERC6551Test:testIsValidSigner(address) (runs: 270, μ: 167327, ~: 167320) ERC6551Test:testOnERC1155BatchReceived() (gas: 1602799) ERC6551Test:testOnERC1155Received() (gas: 1600016) ERC6551Test:testOnERC721Received() (gas: 1523963) ERC6551Test:testOnERC721ReceivedCycles() (gas: 2975498) -ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 324, μ: 453287, ~: 457672) -ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 324, μ: 1386671, ~: 1386684) +ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 270, μ: 452828, ~: 457602) +ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 270, μ: 1386667, ~: 1386683) ERC6551Test:testSupportsInterface() (gas: 168994) -ERC6551Test:testUpdateState(uint256) (runs: 324, μ: 234721, ~: 234657) +ERC6551Test:testUpdateState(uint256) (runs: 270, μ: 234749, ~: 234661) ERC6551Test:testUpgrade() (gas: 248410) ERC6551Test:test__codesize() (gas: 50997) ERC6909Test:testApprove() (gas: 37066) -ERC6909Test:testApprove(address,uint256,uint256) (runs: 324, μ: 37585, ~: 37708) +ERC6909Test:testApprove(address,uint256,uint256) (runs: 270, μ: 37634, ~: 37708) ERC6909Test:testBurn() (gas: 41275) -ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 324, μ: 41121, ~: 41786) -ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 324, μ: 35457, ~: 35627) +ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 270, μ: 41089, ~: 41786) +ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35494, ~: 35627) ERC6909Test:testDecimals() (gas: 5676) ERC6909Test:testDirectApprove() (gas: 36737) -ERC6909Test:testDirectFunctions(uint256) (runs: 324, μ: 200088, ~: 202156) +ERC6909Test:testDirectFunctions(uint256) (runs: 270, μ: 200110, ~: 202195) ERC6909Test:testDirectSetOperator() (gas: 35937) ERC6909Test:testDirectTransfer() (gas: 67044) ERC6909Test:testInfiniteApproveTransferFrom() (gas: 79389) -ERC6909Test:testMetadata(uint256) (runs: 324, μ: 8257, ~: 8257) +ERC6909Test:testMetadata(uint256) (runs: 270, μ: 8257, ~: 8257) ERC6909Test:testMint() (gas: 37240) -ERC6909Test:testMint(address,uint256,uint256) (runs: 324, μ: 37348, ~: 37471) +ERC6909Test:testMint(address,uint256,uint256) (runs: 270, μ: 37397, ~: 37471) ERC6909Test:testMintOverMaxUintReverts() (gas: 35009) -ERC6909Test:testMintOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 324, μ: 35915, ~: 35928) +ERC6909Test:testMintOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35914, ~: 35928) ERC6909Test:testOperatorTransferFrom() (gas: 74717) ERC6909Test:testSetOperator() (gas: 37321) -ERC6909Test:testSetOperator(address,address,bool) (runs: 324, μ: 26225, ~: 16767) +ERC6909Test:testSetOperator(address,address,bool) (runs: 270, μ: 26348, ~: 16767) ERC6909Test:testTokenURI() (gas: 32876) ERC6909Test:testTransfer() (gas: 48585) -ERC6909Test:testTransfer(address,uint256,uint256) (runs: 324, μ: 47580, ~: 47707) +ERC6909Test:testTransfer(address,uint256,uint256) (runs: 270, μ: 47639, ~: 47713) ERC6909Test:testTransferFrom() (gas: 75316) -ERC6909Test:testTransferFrom(address,address,address,uint256,uint256,uint256) (runs: 324, μ: 80653, ~: 81972) -ERC6909Test:testTransferFromCallerIsNotOperator(address,uint256,uint256) (runs: 324, μ: 40214, ~: 40212) -ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 324, μ: 68030, ~: 68581) +ERC6909Test:testTransferFrom(address,address,address,uint256,uint256,uint256) (runs: 270, μ: 80855, ~: 81977) +ERC6909Test:testTransferFromCallerIsNotOperator(address,uint256,uint256) (runs: 270, μ: 40214, ~: 40212) +ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 68058, ~: 68609) ERC6909Test:testTransferFromInsufficientBalanceReverts() (gas: 50505) -ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 324, μ: 51169, ~: 50734) +ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 51253, ~: 50737) ERC6909Test:testTransferFromInsufficientPermission() (gas: 68051) ERC6909Test:testTransferFromOverMaxUintReverts() (gas: 91617) -ERC6909Test:testTransferFromOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 324, μ: 114637, ~: 114872) +ERC6909Test:testTransferFromOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 114588, ~: 114873) ERC6909Test:testTransferInsufficientBalanceReverts() (gas: 35133) -ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 324, μ: 35313, ~: 35675) +ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35303, ~: 35731) ERC6909Test:testTransferOverMaxUintReverts() (gas: 64388) -ERC6909Test:testTransferOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 324, μ: 64942, ~: 64930) +ERC6909Test:testTransferOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 64943, ~: 64932) ERC6909Test:test__codesize() (gas: 25622) ERC721HooksTest:testERC721Hooks() (gas: 3012871) ERC721HooksTest:test__codesize() (gas: 9998) -ERC721Test:testApprove(uint256) (runs: 324, μ: 108331, ~: 108048) -ERC721Test:testApproveAll(uint256) (runs: 324, μ: 50064, ~: 40395) -ERC721Test:testApproveBurn(uint256) (runs: 324, μ: 86732, ~: 86518) -ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 324, μ: 33663, ~: 33671) -ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 324, μ: 83400, ~: 82395) -ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 324, μ: 684, ~: 678) -ERC721Test:testAux(uint256) (runs: 324, μ: 194478, ~: 193020) -ERC721Test:testBurn(uint256) (runs: 324, μ: 80828, ~: 69037) -ERC721Test:testBurnNonExistentReverts(uint256) (runs: 324, μ: 10805, ~: 10805) +ERC721Test:testApprove(uint256) (runs: 270, μ: 108330, ~: 108049) +ERC721Test:testApproveAll(uint256) (runs: 270, μ: 50041, ~: 40395) +ERC721Test:testApproveBurn(uint256) (runs: 270, μ: 86754, ~: 86534) +ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 270, μ: 33663, ~: 33671) +ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 270, μ: 83370, ~: 82391) +ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 270, μ: 684, ~: 678) +ERC721Test:testAux(uint256) (runs: 270, μ: 194563, ~: 193252) +ERC721Test:testBurn(uint256) (runs: 270, μ: 81205, ~: 69038) +ERC721Test:testBurnNonExistentReverts(uint256) (runs: 270, μ: 10805, ~: 10805) ERC721Test:testCannotExceedMaxBalance() (gas: 172230) -ERC721Test:testDoubleBurnReverts(uint256) (runs: 324, μ: 63632, ~: 63642) -ERC721Test:testDoubleMintReverts(uint256) (runs: 324, μ: 79489, ~: 79501) -ERC721Test:testEverything(uint256) (runs: 324, μ: 295170, ~: 305031) -ERC721Test:testExtraData(uint256) (runs: 324, μ: 99345, ~: 99376) -ERC721Test:testExtraData2(uint256,uint256) (runs: 324, μ: 53958, ~: 53889) -ERC721Test:testIsApprovedOrOwner(uint256) (runs: 324, μ: 137660, ~: 137711) -ERC721Test:testMint(uint256) (runs: 324, μ: 82800, ~: 82762) -ERC721Test:testMintAndSetExtraDataUnchecked(uint256) (runs: 324, μ: 84625, ~: 84652) -ERC721Test:testMintAndSetExtraDataUncheckedWithOverwrite(uint256,uint96) (runs: 324, μ: 84081, ~: 84075) -ERC721Test:testMintToZeroReverts(uint256) (runs: 324, μ: 40108, ~: 40107) -ERC721Test:testOwnerOfNonExistent(uint256) (runs: 324, μ: 33174, ~: 33185) -ERC721Test:testSafeMintToEOA(uint256) (runs: 324, μ: 83313, ~: 83398) -ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 324, μ: 409523, ~: 409920) -ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 324, μ: 459592, ~: 453884) -ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 324, μ: 170595, ~: 170595) -ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 324, μ: 171833, ~: 171784) -ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 324, μ: 100695, ~: 100695) -ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 324, μ: 101965, ~: 101916) -ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 324, μ: 203531, ~: 203531) -ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 324, μ: 204790, ~: 204741) -ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 324, μ: 122711, ~: 122723) -ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 324, μ: 471979, ~: 472465) -ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 324, μ: 522146, ~: 516371) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 324, μ: 202270, ~: 202152) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 324, μ: 203686, ~: 203695) -ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 324, μ: 132391, ~: 132511) -ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 324, μ: 133806, ~: 133895) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 324, μ: 235228, ~: 235106) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 324, μ: 236571, ~: 236581) -ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 324, μ: 782, ~: 713) +ERC721Test:testDoubleBurnReverts(uint256) (runs: 270, μ: 63632, ~: 63642) +ERC721Test:testDoubleMintReverts(uint256) (runs: 270, μ: 79490, ~: 79501) +ERC721Test:testEverything(uint256) (runs: 270, μ: 289843, ~: 304199) +ERC721Test:testExtraData(uint256) (runs: 270, μ: 99376, ~: 99396) +ERC721Test:testExtraData2(uint256,uint256) (runs: 270, μ: 53889, ~: 53889) +ERC721Test:testIsApprovedOrOwner(uint256) (runs: 270, μ: 137688, ~: 137729) +ERC721Test:testMint(uint256) (runs: 270, μ: 82798, ~: 82758) +ERC721Test:testMintAndSetExtraDataUnchecked(uint256) (runs: 270, μ: 84626, ~: 84652) +ERC721Test:testMintAndSetExtraDataUncheckedWithOverwrite(uint256,uint96) (runs: 270, μ: 84081, ~: 84075) +ERC721Test:testMintToZeroReverts(uint256) (runs: 270, μ: 40108, ~: 40107) +ERC721Test:testOwnerOfNonExistent(uint256) (runs: 270, μ: 33174, ~: 33185) +ERC721Test:testSafeMintToEOA(uint256) (runs: 270, μ: 83313, ~: 83398) +ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 270, μ: 409719, ~: 409920) +ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 270, μ: 460683, ~: 453884) +ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 270, μ: 170595, ~: 170595) +ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 270, μ: 171833, ~: 171784) +ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 270, μ: 100695, ~: 100695) +ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 101966, ~: 101916) +ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 270, μ: 203531, ~: 203531) +ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 204790, ~: 204741) +ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 270, μ: 122695, ~: 122723) +ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 270, μ: 472182, ~: 472478) +ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 270, μ: 523247, ~: 516475) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 270, μ: 202268, ~: 202152) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 270, μ: 203691, ~: 203695) +ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 270, μ: 132381, ~: 132383) +ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 133815, ~: 133898) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 270, μ: 235231, ~: 235110) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 236568, ~: 236581) +ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 270, μ: 713, ~: 713) ERC721Test:testTransferFrom() (gas: 86352) -ERC721Test:testTransferFrom(uint256) (runs: 324, μ: 114089, ~: 113170) -ERC721Test:testTransferFromApproveAll(uint256) (runs: 324, μ: 119777, ~: 119766) -ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 324, μ: 34547, ~: 34353) -ERC721Test:testTransferFromNotOwner(uint256) (runs: 324, μ: 85246, ~: 85091) -ERC721Test:testTransferFromSelf(uint256) (runs: 324, μ: 93020, ~: 93066) -ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 324, μ: 63449, ~: 63319) -ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 324, μ: 80997, ~: 81161) +ERC721Test:testTransferFrom(uint256) (runs: 270, μ: 114280, ~: 113177) +ERC721Test:testTransferFromApproveAll(uint256) (runs: 270, μ: 119769, ~: 119766) +ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 270, μ: 34545, ~: 34353) +ERC721Test:testTransferFromNotOwner(uint256) (runs: 270, μ: 85251, ~: 85295) +ERC721Test:testTransferFromSelf(uint256) (runs: 270, μ: 93026, ~: 93066) +ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 270, μ: 63445, ~: 63319) +ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 270, μ: 80998, ~: 81161) ERC721Test:test__codesize() (gas: 42126) EfficientHashLibTest:testEfficientHash() (gas: 8084) -EfficientHashLibTest:testEfficientHash(uint256) (runs: 324, μ: 8133, ~: 8133) +EfficientHashLibTest:testEfficientHash(uint256) (runs: 270, μ: 8133, ~: 8133) EfficientHashLibTest:testEfficientHashBytesSlice() (gas: 26774) -EfficientHashLibTest:testEfficientHashBytesSlice(bytes32,bytes) (runs: 324, μ: 26315, ~: 26262) +EfficientHashLibTest:testEfficientHashBytesSlice(bytes32,bytes) (runs: 270, μ: 26301, ~: 26250) EfficientHashLibTest:testEfficientHashFree() (gas: 350) -EfficientHashLibTest:testEfficientHashFree(uint8,bool,uint8) (runs: 324, μ: 1020, ~: 952) +EfficientHashLibTest:testEfficientHashFree(uint8,bool,uint8) (runs: 270, μ: 1018, ~: 866) EfficientHashLibTest:testEfficientHashSet() (gas: 2283) EfficientHashLibTest:testEfficientHashUints() (gas: 6636) EfficientHashLibTest:test__codesize() (gas: 6357) EnumerableSetLibTest:testEnumerableAddressSetBasic() (gas: 248436) EnumerableSetLibTest:testEnumerableAddressSetBasic2() (gas: 175344) EnumerableSetLibTest:testEnumerableAddressSetNoStorageCollision() (gas: 98950) -EnumerableSetLibTest:testEnumerableAddressSetRevertsOnSentinel(uint256) (runs: 324, μ: 49026, ~: 38865) +EnumerableSetLibTest:testEnumerableAddressSetRevertsOnSentinel(uint256) (runs: 270, μ: 47406, ~: 38278) EnumerableSetLibTest:testEnumerableBytes32SetBasic() (gas: 271282) EnumerableSetLibTest:testEnumerableBytes32SetBasic2() (gas: 178471) EnumerableSetLibTest:testEnumerableBytes32SetNoStorageCollision() (gas: 103477) -EnumerableSetLibTest:testEnumerableBytes32SetRevertsOnSentinel(uint256) (runs: 324, μ: 50587, ~: 49215) -EnumerableSetLibTest:testEnumerableSetFuzz(uint256) (runs: 324, μ: 648926, ~: 512561) +EnumerableSetLibTest:testEnumerableBytes32SetRevertsOnSentinel(uint256) (runs: 270, μ: 51256, ~: 49299) +EnumerableSetLibTest:testEnumerableSetFuzz(uint256) (runs: 270, μ: 658586, ~: 515840) EnumerableSetLibTest:test__codesize() (gas: 14232) FixedPointMathLibTest:testAbs() (gas: 723) -FixedPointMathLibTest:testAbs(int256) (runs: 324, μ: 510, ~: 479) +FixedPointMathLibTest:testAbs(int256) (runs: 270, μ: 511, ~: 479) FixedPointMathLibTest:testAbsEdgeCases() (gas: 513) FixedPointMathLibTest:testAvg() (gas: 442) FixedPointMathLibTest:testAvgEdgeCase() (gas: 492) FixedPointMathLibTest:testAvgSigned() (gas: 923) FixedPointMathLibTest:testCbrt() (gas: 10283) -FixedPointMathLibTest:testCbrt(uint256) (runs: 324, μ: 1523, ~: 1535) -FixedPointMathLibTest:testCbrtBack(uint256) (runs: 324, μ: 34399, ~: 42315) +FixedPointMathLibTest:testCbrt(uint256) (runs: 270, μ: 1522, ~: 1535) +FixedPointMathLibTest:testCbrtBack(uint256) (runs: 270, μ: 34067, ~: 42315) FixedPointMathLibTest:testCbrtWad() (gas: 12050) -FixedPointMathLibTest:testCbrtWad(uint256) (runs: 324, μ: 2153, ~: 1973) +FixedPointMathLibTest:testCbrtWad(uint256) (runs: 270, μ: 2157, ~: 1973) FixedPointMathLibTest:testCbrtWadConverged() (gas: 2682) -FixedPointMathLibTest:testCbrtWadConverged(uint256) (runs: 324, μ: 2179, ~: 2232) +FixedPointMathLibTest:testCbrtWadConverged(uint256) (runs: 270, μ: 2179, ~: 2232) FixedPointMathLibTest:testCbrtWadDebug() (gas: 7360) FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing() (gas: 4227) -FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 324, μ: 3131, ~: 2977) -FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 324, μ: 547, ~: 546) -FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 324, μ: 611, ~: 611) +FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 270, μ: 3087, ~: 2977) +FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 270, μ: 547, ~: 546) +FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 270, μ: 611, ~: 611) FixedPointMathLibTest:testDist() (gas: 615) -FixedPointMathLibTest:testDist(int256,int256) (runs: 324, μ: 512, ~: 512) -FixedPointMathLibTest:testDist(uint256,uint256) (runs: 324, μ: 510, ~: 506) +FixedPointMathLibTest:testDist(int256,int256) (runs: 270, μ: 512, ~: 517) +FixedPointMathLibTest:testDist(uint256,uint256) (runs: 270, μ: 511, ~: 516) FixedPointMathLibTest:testDistEdgeCases() (gas: 505) FixedPointMathLibTest:testDivWad() (gas: 692) -FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 324, μ: 25647, ~: 24703) +FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 270, μ: 25643, ~: 24703) FixedPointMathLibTest:testDivWadEdgeCases() (gas: 447) FixedPointMathLibTest:testDivWadUp() (gas: 2942) -FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 324, μ: 25602, ~: 24799) +FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 270, μ: 25647, ~: 24799) FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 428) FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts() (gas: 3196) FixedPointMathLibTest:testDivWadZeroDenominatorReverts() (gas: 3218) @@ -466,124 +466,124 @@ FixedPointMathLibTest:testExpWad() (gas: 8047) FixedPointMathLibTest:testFactorial() (gas: 98436) FixedPointMathLibTest:testFactorialOriginal() (gas: 94187) FixedPointMathLibTest:testFullMulDiv() (gas: 1127) -FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 324, μ: 1360, ~: 946) -FixedPointMathLibTest:testFullMulDivAlwaysRevertsIfDivisorIsZero(uint256,uint256) (runs: 324, μ: 3422, ~: 3422) +FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 270, μ: 1342, ~: 946) +FixedPointMathLibTest:testFullMulDivAlwaysRevertsIfDivisorIsZero(uint256,uint256) (runs: 270, μ: 3422, ~: 3422) FixedPointMathLibTest:testFullMulDivUnchecked() (gas: 1591) -FixedPointMathLibTest:testFullMulDivUnchecked(uint256,uint256,uint256) (runs: 324, μ: 1656, ~: 1554) -FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 324, μ: 1751, ~: 1423) +FixedPointMathLibTest:testFullMulDivUnchecked(uint256,uint256,uint256) (runs: 270, μ: 1655, ~: 1554) +FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 270, μ: 1744, ~: 1423) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3683) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase2() (gas: 3716) FixedPointMathLibTest:testGcd() (gas: 4206) -FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 324, μ: 6619, ~: 2985) -FixedPointMathLibTest:testIsEven(uint256) (runs: 324, μ: 497, ~: 497) +FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 270, μ: 6878, ~: 2800) +FixedPointMathLibTest:testIsEven(uint256) (runs: 270, μ: 497, ~: 497) FixedPointMathLibTest:testLambertW0WadAccuracy() (gas: 7160) -FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 324, μ: 2346, ~: 431) +FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 270, μ: 2340, ~: 431) FixedPointMathLibTest:testLambertW0WadKnownValues() (gas: 1685626) FixedPointMathLibTest:testLambertW0WadMonoDebug() (gas: 770667) FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing() (gas: 18416509) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 324, μ: 7266, ~: 6978) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 270, μ: 7214, ~: 6955) FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing2() (gas: 4035368) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 324, μ: 28900, ~: 35493) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 324, μ: 37006, ~: 17618) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 270, μ: 28818, ~: 35493) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 270, μ: 24944, ~: 17618) FixedPointMathLibTest:testLambertW0WadRevertsForOutOfDomain() (gas: 16530) FixedPointMathLibTest:testLambertW0WadWithinBounds() (gas: 122039) -FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 324, μ: 3654, ~: 4985) +FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 270, μ: 3610, ~: 4985) FixedPointMathLibTest:testLerpInt() (gas: 6439) -FixedPointMathLibTest:testLerpInt(int256,int256,int256,int256,int256) (runs: 324, μ: 1632, ~: 1176) +FixedPointMathLibTest:testLerpInt(int256,int256,int256,int256,int256) (runs: 270, μ: 1613, ~: 1176) FixedPointMathLibTest:testLerpUint() (gas: 6398) -FixedPointMathLibTest:testLerpUint(uint256,uint256,uint256,uint256,uint256) (runs: 324, μ: 1156, ~: 841) +FixedPointMathLibTest:testLerpUint(uint256,uint256,uint256,uint256,uint256) (runs: 270, μ: 1127, ~: 841) FixedPointMathLibTest:testLnWad() (gas: 2054) FixedPointMathLibTest:testLnWadBig() (gas: 2065) FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3285) FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3260) FixedPointMathLibTest:testLnWadSmall() (gas: 2666) FixedPointMathLibTest:testLog10() (gas: 76189) -FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 324, μ: 2204, ~: 2234) +FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 270, μ: 2211, ~: 2228) FixedPointMathLibTest:testLog10Up() (gas: 4435) FixedPointMathLibTest:testLog2() (gas: 243231) FixedPointMathLibTest:testLog256() (gas: 22831) -FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 324, μ: 2077, ~: 2146) +FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 270, μ: 2084, ~: 2146) FixedPointMathLibTest:testLog256Up() (gas: 1271) -FixedPointMathLibTest:testLog2Differential(uint256) (runs: 324, μ: 891, ~: 887) +FixedPointMathLibTest:testLog2Differential(uint256) (runs: 270, μ: 892, ~: 887) FixedPointMathLibTest:testLog2Up() (gas: 297368) -FixedPointMathLibTest:testMax(uint256,uint256) (runs: 324, μ: 499, ~: 504) -FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 324, μ: 869, ~: 874) -FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 324, μ: 520, ~: 520) -FixedPointMathLibTest:testMin(uint256,uint256) (runs: 324, μ: 476, ~: 472) -FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 324, μ: 828, ~: 819) -FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 324, μ: 541, ~: 541) +FixedPointMathLibTest:testMax(uint256,uint256) (runs: 270, μ: 498, ~: 494) +FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 270, μ: 869, ~: 869) +FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 270, μ: 519, ~: 515) +FixedPointMathLibTest:testMin(uint256,uint256) (runs: 270, μ: 477, ~: 482) +FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 270, μ: 828, ~: 819) +FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 270, μ: 541, ~: 546) FixedPointMathLibTest:testMulDiv() (gas: 1845) -FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 324, μ: 25944, ~: 24690) +FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 270, μ: 25968, ~: 24693) FixedPointMathLibTest:testMulDivEdgeCases() (gas: 762) FixedPointMathLibTest:testMulDivUp() (gas: 2103) -FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 324, μ: 26014, ~: 24998) +FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 270, μ: 26042, ~: 24998) FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 861) FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3179) FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3201) FixedPointMathLibTest:testMulWad() (gas: 712) -FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 324, μ: 25806, ~: 24681) +FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 270, μ: 25768, ~: 24681) FixedPointMathLibTest:testMulWadEdgeCases() (gas: 731) FixedPointMathLibTest:testMulWadUp() (gas: 779) -FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 324, μ: 25862, ~: 24794) +FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 270, μ: 25846, ~: 24794) FixedPointMathLibTest:testMulWadUpEdgeCases() (gas: 776) FixedPointMathLibTest:testPackUnpackSci() (gas: 129317) -FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 324, μ: 30423, ~: 30421) +FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 270, μ: 30411, ~: 30409) FixedPointMathLibTest:testRPow() (gas: 3298) FixedPointMathLibTest:testRPowOverflowReverts() (gas: 4940) -FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 324, μ: 440, ~: 440) -FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 324, μ: 485, ~: 485) -FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 324, μ: 533, ~: 533) -FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 324, μ: 487, ~: 487) -FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 324, μ: 486, ~: 486) -FixedPointMathLibTest:testRawMul(int256,int256) (runs: 324, μ: 434, ~: 434) -FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 324, μ: 463, ~: 463) -FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 324, μ: 557, ~: 557) -FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 324, μ: 487, ~: 487) -FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 324, μ: 422, ~: 422) -FixedPointMathLibTest:testRawSub(int256,int256) (runs: 324, μ: 463, ~: 463) -FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 324, μ: 463, ~: 463) +FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 270, μ: 440, ~: 440) +FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 270, μ: 485, ~: 485) +FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 270, μ: 533, ~: 533) +FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 270, μ: 487, ~: 487) +FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 270, μ: 486, ~: 486) +FixedPointMathLibTest:testRawMul(int256,int256) (runs: 270, μ: 434, ~: 434) +FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 270, μ: 463, ~: 463) +FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 270, μ: 557, ~: 557) +FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 270, μ: 487, ~: 487) +FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 270, μ: 422, ~: 422) +FixedPointMathLibTest:testRawSub(int256,int256) (runs: 270, μ: 463, ~: 463) +FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 270, μ: 463, ~: 463) FixedPointMathLibTest:testSDivWad() (gas: 840) -FixedPointMathLibTest:testSDivWad(int256,int256) (runs: 324, μ: 25580, ~: 24829) +FixedPointMathLibTest:testSDivWad(int256,int256) (runs: 270, μ: 25624, ~: 24829) FixedPointMathLibTest:testSDivWadEdgeCases() (gas: 404) FixedPointMathLibTest:testSMulWad() (gas: 1032) -FixedPointMathLibTest:testSMulWad(int256,int256) (runs: 324, μ: 25786, ~: 24903) +FixedPointMathLibTest:testSMulWad(int256,int256) (runs: 270, μ: 25726, ~: 24903) FixedPointMathLibTest:testSMulWadEdgeCases() (gas: 1287) -FixedPointMathLibTest:testSMulWadOverflowTrickDifferential(int256,int256) (runs: 324, μ: 643, ~: 654) +FixedPointMathLibTest:testSMulWadOverflowTrickDifferential(int256,int256) (runs: 270, μ: 644, ~: 654) FixedPointMathLibTest:testSci() (gas: 1838636) -FixedPointMathLibTest:testSci(uint256) (runs: 324, μ: 33663, ~: 36864) -FixedPointMathLibTest:testSci2(uint256) (runs: 324, μ: 912, ~: 911) +FixedPointMathLibTest:testSci(uint256) (runs: 270, μ: 33532, ~: 36190) +FixedPointMathLibTest:testSci2(uint256) (runs: 270, μ: 915, ~: 911) FixedPointMathLibTest:testSqrt() (gas: 43819) -FixedPointMathLibTest:testSqrt(uint256) (runs: 324, μ: 1091, ~: 1098) -FixedPointMathLibTest:testSqrtBack(uint256) (runs: 324, μ: 10114, ~: 363) -FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 324, μ: 54677, ~: 54681) +FixedPointMathLibTest:testSqrt(uint256) (runs: 270, μ: 1091, ~: 1098) +FixedPointMathLibTest:testSqrtBack(uint256) (runs: 270, μ: 10812, ~: 363) +FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 270, μ: 54687, ~: 54894) FixedPointMathLibTest:testSqrtHashedSingle() (gas: 54632) FixedPointMathLibTest:testSqrtWad() (gas: 7959) -FixedPointMathLibTest:testSqrtWad(uint256) (runs: 324, μ: 1589, ~: 1513) -FixedPointMathLibTest:testSqrtWadConverged(uint256) (runs: 324, μ: 1891, ~: 1922) -FixedPointMathLibTest:testSqrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 324, μ: 2210, ~: 1802) -FixedPointMathLibTest:testTernary(bool,uint256,uint256) (runs: 324, μ: 518, ~: 514) -FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 324, μ: 547, ~: 518) -FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 324, μ: 926, ~: 890) +FixedPointMathLibTest:testSqrtWad(uint256) (runs: 270, μ: 1596, ~: 1513) +FixedPointMathLibTest:testSqrtWadConverged(uint256) (runs: 270, μ: 1890, ~: 1922) +FixedPointMathLibTest:testSqrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 270, μ: 2167, ~: 1802) +FixedPointMathLibTest:testTernary(bool,uint256,uint256) (runs: 270, μ: 518, ~: 514) +FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 270, μ: 548, ~: 579) +FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 270, μ: 928, ~: 928) FixedPointMathLibTest:test__codesize() (gas: 44557) GasBurnerLibTest:testBurn() (gas: 105035) -GasBurnerLibTest:testBurn(uint256) (runs: 324, μ: 42995, ~: 31914) +GasBurnerLibTest:testBurn(uint256) (runs: 270, μ: 42526, ~: 31726) GasBurnerLibTest:testBurnPure() (gas: 1700850) -GasBurnerLibTest:testBurnPure(uint256) (runs: 324, μ: 24954, ~: 24446) +GasBurnerLibTest:testBurnPure(uint256) (runs: 270, μ: 24909, ~: 24361) GasBurnerLibTest:testBurnPureTiming() (gas: 300223) GasBurnerLibTest:testBurnTiming() (gas: 293139) GasBurnerLibTest:testBurnView() (gas: 66700) -GasBurnerLibTest:testBurnView(uint256) (runs: 324, μ: 26892, ~: 24738) +GasBurnerLibTest:testBurnView(uint256) (runs: 270, μ: 26996, ~: 24738) GasBurnerLibTest:testBurnViewTiming() (gas: 294223) GasBurnerLibTest:test__codesize() (gas: 2389) InitializableTest:testDisableInitializers() (gas: 42010) InitializableTest:testInitializableConstructor() (gas: 691882) InitializableTest:testInitialize() (gas: 54688) -InitializableTest:testInitializeInititalizerTrick(bool,uint64,uint16) (runs: 324, μ: 790, ~: 791) -InitializableTest:testInitializeReinititalize(uint256) (runs: 324, μ: 96389, ~: 95851) -InitializableTest:testInitializeReinititalizerTrick(bool,uint64,uint64) (runs: 324, μ: 674, ~: 687) +InitializableTest:testInitializeInititalizerTrick(bool,uint64,uint16) (runs: 270, μ: 791, ~: 791) +InitializableTest:testInitializeReinititalize(uint256) (runs: 270, μ: 96452, ~: 95851) +InitializableTest:testInitializeReinititalizerTrick(bool,uint64,uint64) (runs: 270, μ: 675, ~: 687) InitializableTest:testOnlyInitializing() (gas: 10420) InitializableTest:test__codesize() (gas: 10480) -JSONParserLibTest:testDecodeEncodedStringDoesNotRevert(string) (runs: 324, μ: 57525, ~: 56403) +JSONParserLibTest:testDecodeEncodedStringDoesNotRevert(string) (runs: 270, μ: 57328, ~: 56403) JSONParserLibTest:testDecodeInvalidStringReverts() (gas: 172924) JSONParserLibTest:testDecodeString() (gas: 193269) JSONParserLibTest:testEmptyItem() (gas: 2913) @@ -591,9 +591,9 @@ JSONParserLibTest:testParseEmptyArrays() (gas: 499245) JSONParserLibTest:testParseEmptyObjects() (gas: 500206) JSONParserLibTest:testParseGas() (gas: 151909) JSONParserLibTest:testParseInt() (gas: 204229) -JSONParserLibTest:testParseInt(int256) (runs: 324, μ: 18672, ~: 17321) -JSONParserLibTest:testParseIntReverts(uint256) (runs: 324, μ: 55937, ~: 55929) -JSONParserLibTest:testParseIntTrick(uint256,bool) (runs: 324, μ: 528, ~: 532) +JSONParserLibTest:testParseInt(int256) (runs: 270, μ: 18780, ~: 17408) +JSONParserLibTest:testParseIntReverts(uint256) (runs: 270, μ: 55940, ~: 55929) +JSONParserLibTest:testParseIntTrick(uint256,bool) (runs: 270, μ: 528, ~: 532) JSONParserLibTest:testParseInvalidIntReverts() (gas: 210681) JSONParserLibTest:testParseInvalidNumberReverts() (gas: 4068682) JSONParserLibTest:testParseInvalidReverts() (gas: 8589165) @@ -609,174 +609,174 @@ JSONParserLibTest:testParseSimpleUintArray() (gas: 1175003) JSONParserLibTest:testParseSpecials() (gas: 260199) JSONParserLibTest:testParseString() (gas: 1237483) JSONParserLibTest:testParseUint() (gas: 95659) -JSONParserLibTest:testParseUint(uint256) (runs: 324, μ: 35282, ~: 31924) +JSONParserLibTest:testParseUint(uint256) (runs: 270, μ: 35506, ~: 31644) JSONParserLibTest:testParseUintFromHex() (gas: 1382724) -JSONParserLibTest:testParseValidObjectDoesNotRevert(string,string) (runs: 324, μ: 50166, ~: 48853) +JSONParserLibTest:testParseValidObjectDoesNotRevert(string,string) (runs: 270, μ: 50032, ~: 48779) JSONParserLibTest:test__codesize() (gas: 38087) LibBitTest:testAnd() (gas: 192789) -LibBitTest:testAnd(bool,bool) (runs: 324, μ: 632, ~: 634) -LibBitTest:testAutoClean(uint256,uint256) (runs: 324, μ: 468, ~: 468) -LibBitTest:testBoolToUint(bool) (runs: 324, μ: 485, ~: 485) +LibBitTest:testAnd(bool,bool) (runs: 270, μ: 632, ~: 634) +LibBitTest:testAutoClean(uint256,uint256) (runs: 270, μ: 468, ~: 468) +LibBitTest:testBoolToUint(bool) (runs: 270, μ: 485, ~: 485) LibBitTest:testCLZ() (gas: 297260) LibBitTest:testFFS() (gas: 152877) LibBitTest:testFLS() (gas: 245237) LibBitTest:testIsPo2() (gas: 57663) -LibBitTest:testIsPo2(uint256) (runs: 324, μ: 3471, ~: 2034) -LibBitTest:testIsPo2(uint8,uint8) (runs: 324, μ: 623, ~: 624) +LibBitTest:testIsPo2(uint256) (runs: 270, μ: 3599, ~: 1906) +LibBitTest:testIsPo2(uint8,uint8) (runs: 270, μ: 623, ~: 624) LibBitTest:testOr() (gas: 194336) -LibBitTest:testOr(bool,bool) (runs: 324, μ: 649, ~: 648) +LibBitTest:testOr(bool,bool) (runs: 270, μ: 649, ~: 648) LibBitTest:testPassInBool() (gas: 830) LibBitTest:testPopCount() (gas: 63738) -LibBitTest:testPopCount(uint256) (runs: 324, μ: 3613, ~: 2176) +LibBitTest:testPopCount(uint256) (runs: 270, μ: 3741, ~: 2048) LibBitTest:testReturnsBool() (gas: 779) LibBitTest:testReverseBits() (gas: 131521) -LibBitTest:testReverseBitsDifferential(uint256) (runs: 324, μ: 18724, ~: 18724) +LibBitTest:testReverseBitsDifferential(uint256) (runs: 270, μ: 18724, ~: 18724) LibBitTest:testReverseBytes() (gas: 12492) -LibBitTest:testReverseBytesDifferential(uint256) (runs: 324, μ: 2675, ~: 2675) +LibBitTest:testReverseBytesDifferential(uint256) (runs: 270, μ: 2675, ~: 2675) LibBitTest:test__codesize() (gas: 5842) LibBitmapTest:testBitmapClaimWithGetSet() (gas: 27156) LibBitmapTest:testBitmapClaimWithToggle() (gas: 17480) LibBitmapTest:testBitmapFindFirstUnset() (gas: 54669) -LibBitmapTest:testBitmapFindFirstUnset(uint256,uint256,bytes32) (runs: 324, μ: 140978, ~: 140153) +LibBitmapTest:testBitmapFindFirstUnset(uint256,uint256,bytes32) (runs: 270, μ: 140893, ~: 140143) LibBitmapTest:testBitmapFindLastSet() (gas: 1300541) -LibBitmapTest:testBitmapFindLastSet(uint256,bytes32) (runs: 324, μ: 75887, ~: 76217) +LibBitmapTest:testBitmapFindLastSet(uint256,bytes32) (runs: 270, μ: 75837, ~: 76225) LibBitmapTest:testBitmapFindLastSet2() (gas: 23882) LibBitmapTest:testBitmapGet() (gas: 2549) -LibBitmapTest:testBitmapGet(uint256) (runs: 324, μ: 2599, ~: 2599) +LibBitmapTest:testBitmapGet(uint256) (runs: 270, μ: 2599, ~: 2599) LibBitmapTest:testBitmapPopCount() (gas: 751877) -LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 324, μ: 208150, ~: 173269) +LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 270, μ: 205538, ~: 172426) LibBitmapTest:testBitmapPopCountAcrossMultipleBuckets() (gas: 73634) LibBitmapTest:testBitmapPopCountWithinSingleBucket() (gas: 34032) LibBitmapTest:testBitmapSet() (gas: 22771) -LibBitmapTest:testBitmapSet(uint256) (runs: 324, μ: 22843, ~: 22843) -LibBitmapTest:testBitmapSetAndGet(uint256) (runs: 324, μ: 22864, ~: 22864) +LibBitmapTest:testBitmapSet(uint256) (runs: 270, μ: 22843, ~: 22843) +LibBitmapTest:testBitmapSetAndGet(uint256) (runs: 270, μ: 22864, ~: 22864) LibBitmapTest:testBitmapSetBatch() (gas: 2918603) LibBitmapTest:testBitmapSetBatchAcrossMultipleBuckets() (gas: 438393) LibBitmapTest:testBitmapSetBatchWithinSingleBucket() (gas: 389011) LibBitmapTest:testBitmapSetTo() (gas: 14652) -LibBitmapTest:testBitmapSetTo(uint256,bool,uint256) (runs: 324, μ: 12824, ~: 3113) -LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 324, μ: 46761, ~: 51381) +LibBitmapTest:testBitmapSetTo(uint256,bool,uint256) (runs: 270, μ: 13143, ~: 23027) +LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 270, μ: 47095, ~: 51389) LibBitmapTest:testBitmapToggle() (gas: 31525) -LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 324, μ: 19318, ~: 23572) +LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 270, μ: 19201, ~: 23572) LibBitmapTest:testBitmapUnset() (gas: 22794) -LibBitmapTest:testBitmapUnset(uint256) (runs: 324, μ: 14511, ~: 14525) +LibBitmapTest:testBitmapUnset(uint256) (runs: 270, μ: 14510, ~: 14528) LibBitmapTest:testBitmapUnsetBatch() (gas: 2981123) LibBitmapTest:testBitmapUnsetBatchAcrossMultipleBuckets() (gas: 438470) LibBitmapTest:testBitmapUnsetBatchWithinSingleBucket() (gas: 445869) LibBitmapTest:test__codesize() (gas: 8720) LibCWIATest:testCloneDeteministicWithImmutableArgs() (gas: 191965) -LibCWIATest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 324, μ: 1091545, ~: 1046677) +LibCWIATest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 270, μ: 1113042, ~: 1061431) LibCWIATest:testCloneWithImmutableArgs() (gas: 120548) -LibCWIATest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 324, μ: 988876, ~: 964806) +LibCWIATest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 270, μ: 993576, ~: 982338) LibCWIATest:testCloneWithImmutableArgsRevertsIfDataTooBig() (gas: 97306657) LibCWIATest:test__codesize() (gas: 12335) LibCloneTest:testClone() (gas: 97598) -LibCloneTest:testClone(uint256) (runs: 324, μ: 97692, ~: 97692) +LibCloneTest:testClone(uint256) (runs: 270, μ: 97692, ~: 97692) LibCloneTest:testCloneDeterministic() (gas: 98533) -LibCloneTest:testCloneDeterministic(bytes32) (runs: 324, μ: 2491920, ~: 98783) +LibCloneTest:testCloneDeterministic(bytes32) (runs: 270, μ: 2254206, ~: 98783) LibCloneTest:testCloneDeterministicWithImmutableArgs() (gas: 128890) -LibCloneTest:testCloneDeterministicWithImmutableArgs(bytes32) (runs: 324, μ: 7887903, ~: 121967) +LibCloneTest:testCloneDeterministicWithImmutableArgs(bytes32) (runs: 270, μ: 7562090, ~: 120923) LibCloneTest:testCloneWithImmutableArgs() (gas: 129436) -LibCloneTest:testCloneWithImmutableArgs(uint256) (runs: 324, μ: 3135683, ~: 119249) +LibCloneTest:testCloneWithImmutableArgs(uint256) (runs: 270, μ: 3628746, ~: 119420) LibCloneTest:testCloneWithImmutableArgsSlicing() (gas: 57948) -LibCloneTest:testCreateDeterministicERC1967(bytes32) (runs: 324, μ: 181623, ~: 128213) -LibCloneTest:testCreateDeterministicERC1967BeaconProxy(bytes32) (runs: 324, μ: 356513, ~: 360735) -LibCloneTest:testCreateDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 324, μ: 536543, ~: 362902) -LibCloneTest:testCreateDeterministicERC1967I(bytes32) (runs: 324, μ: 205978, ~: 132664) -LibCloneTest:testCreateDeterministicERC1967IBeaconProxy(bytes32) (runs: 324, μ: 370950, ~: 361773) -LibCloneTest:testCreateDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 324, μ: 643735, ~: 365038) -LibCloneTest:testCreateDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 324, μ: 734274, ~: 154333) -LibCloneTest:testCreateDeterministicERC1967WithImmutableArgs(bytes32) (runs: 324, μ: 495818, ~: 150165) +LibCloneTest:testCreateDeterministicERC1967(bytes32) (runs: 270, μ: 175384, ~: 128213) +LibCloneTest:testCreateDeterministicERC1967BeaconProxy(bytes32) (runs: 270, μ: 360561, ~: 360735) +LibCloneTest:testCreateDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 505103, ~: 362607) +LibCloneTest:testCreateDeterministicERC1967I(bytes32) (runs: 270, μ: 212047, ~: 132664) +LibCloneTest:testCreateDeterministicERC1967IBeaconProxy(bytes32) (runs: 270, μ: 358987, ~: 299794) +LibCloneTest:testCreateDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 617560, ~: 364768) +LibCloneTest:testCreateDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 762355, ~: 155163) +LibCloneTest:testCreateDeterministicERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 536881, ~: 150130) LibCloneTest:testDeployDeterministicERC1967() (gas: 133653) -LibCloneTest:testDeployDeterministicERC1967(bytes32) (runs: 324, μ: 2340179, ~: 133494) -LibCloneTest:testDeployDeterministicERC1967BeaconProxy(bytes32) (runs: 324, μ: 5068812, ~: 357720) -LibCloneTest:testDeployDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 324, μ: 6163878, ~: 368525) +LibCloneTest:testDeployDeterministicERC1967(bytes32) (runs: 270, μ: 1699334, ~: 133508) +LibCloneTest:testDeployDeterministicERC1967BeaconProxy(bytes32) (runs: 270, μ: 4951742, ~: 357720) +LibCloneTest:testDeployDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 5737990, ~: 368472) LibCloneTest:testDeployDeterministicERC1967I() (gas: 129746) -LibCloneTest:testDeployDeterministicERC1967I(bytes32) (runs: 324, μ: 2830542, ~: 129708) -LibCloneTest:testDeployDeterministicERC1967IBeaconProxy(bytes32) (runs: 324, μ: 3307491, ~: 359955) -LibCloneTest:testDeployDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 324, μ: 5542252, ~: 370974) +LibCloneTest:testDeployDeterministicERC1967I(bytes32) (runs: 270, μ: 4071985, ~: 129705) +LibCloneTest:testDeployDeterministicERC1967IBeaconProxy(bytes32) (runs: 270, μ: 2837683, ~: 359955) +LibCloneTest:testDeployDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 4332589, ~: 370683) LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs() (gas: 129746) -LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 324, μ: 5874624, ~: 151452) +LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 6954378, ~: 151350) LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs() (gas: 170813) -LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs(bytes32) (runs: 324, μ: 4923326, ~: 146378) +LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 5465394, ~: 146925) LibCloneTest:testDeployERC1967() (gas: 130817) -LibCloneTest:testDeployERC1967(bytes32) (runs: 324, μ: 228864, ~: 130898) -LibCloneTest:testDeployERC1967BeaconProxy(bytes32) (runs: 324, μ: 357971, ~: 294993) +LibCloneTest:testDeployERC1967(bytes32) (runs: 270, μ: 233435, ~: 130898) +LibCloneTest:testDeployERC1967BeaconProxy(bytes32) (runs: 270, μ: 356502, ~: 294993) LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs() (gas: 879000) -LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs(address,bytes32) (runs: 324, μ: 26790342, ~: 267361) +LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs(address,bytes32) (runs: 270, μ: 27048127, ~: 265044) LibCloneTest:testDeployERC1967I() (gas: 129964) -LibCloneTest:testDeployERC1967I(bytes32) (runs: 324, μ: 130034, ~: 130034) +LibCloneTest:testDeployERC1967I(bytes32) (runs: 270, μ: 130034, ~: 130034) LibCloneTest:testDeployERC1967IBeaconProxy() (gas: 359439) -LibCloneTest:testDeployERC1967IBeaconProxy(bytes32) (runs: 324, μ: 359414, ~: 359197) +LibCloneTest:testDeployERC1967IBeaconProxy(bytes32) (runs: 270, μ: 363769, ~: 359197) LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs() (gas: 940290) -LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs(address,bytes32) (runs: 324, μ: 25520900, ~: 260261) +LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs(address,bytes32) (runs: 270, μ: 25500690, ~: 260261) LibCloneTest:testDeployERC1967IWithImmutableArgs() (gas: 168734) -LibCloneTest:testDeployERC1967IWithImmutableArgs(bytes32) (runs: 324, μ: 3455081, ~: 151260) +LibCloneTest:testDeployERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 3327535, ~: 151018) LibCloneTest:testDeployERC1967WithImmutableArgs() (gas: 145438) -LibCloneTest:testDeployERC1967WithImmutableArgs(bytes32) (runs: 324, μ: 5015306, ~: 145293) -LibCloneTest:testERC1967BeaconProxyGasBehavior(uint256,uint256) (runs: 324, μ: 352648, ~: 346811) -LibCloneTest:testERC1967ConstantBootstrap(address,bytes32) (runs: 324, μ: 185575, ~: 169765) -LibCloneTest:testERC1967IBeaconProxyGasBehavior(uint256,uint256) (runs: 324, μ: 367854, ~: 347576) -LibCloneTest:testImplemenationOf(address) (runs: 324, μ: 552335, ~: 80558) +LibCloneTest:testDeployERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 4821584, ~: 144316) +LibCloneTest:testERC1967BeaconProxyGasBehavior(uint256,uint256) (runs: 270, μ: 349628, ~: 347446) +LibCloneTest:testERC1967ConstantBootstrap(address,bytes32) (runs: 270, μ: 188980, ~: 169772) +LibCloneTest:testERC1967IBeaconProxyGasBehavior(uint256,uint256) (runs: 270, μ: 360781, ~: 347856) +LibCloneTest:testImplemenationOf(address) (runs: 270, μ: 395600, ~: 82342) LibCloneTest:testImplemenationOfGas() (gas: 631777) -LibCloneTest:testInitCode(address) (runs: 324, μ: 233183, ~: 43969) +LibCloneTest:testInitCode(address) (runs: 270, μ: 253220, ~: 45749) LibCloneTest:testInitialDeposit() (gas: 872449) -LibCloneTest:testSlicingRevertsOnZeroCodeAddress(address) (runs: 324, μ: 70459, ~: 31181) -LibCloneTest:testStartsWith(uint256) (runs: 324, μ: 30019, ~: 29987) +LibCloneTest:testSlicingRevertsOnZeroCodeAddress(address) (runs: 270, μ: 72447, ~: 31276) +LibCloneTest:testStartsWith(uint256) (runs: 270, μ: 30024, ~: 29991) LibCloneTest:test__codesize() (gas: 42104) -LibERC6551Test:testComputeAccountAddress(address,bytes32,uint256,address,uint256) (runs: 324, μ: 205453, ~: 29507) -LibERC6551Test:testContext(address,bytes32,uint256,address,uint256) (runs: 324, μ: 103036, ~: 102943) -LibERC6551Test:testInitCodeHash(address,bytes32,uint256,address,uint256) (runs: 324, μ: 254428, ~: 23818) -LibERC6551Test:testIsERC6551Account(address,bytes32,uint256,address,uint256) (runs: 324, μ: 114211, ~: 114208) +LibERC6551Test:testComputeAccountAddress(address,bytes32,uint256,address,uint256) (runs: 270, μ: 198827, ~: 29507) +LibERC6551Test:testContext(address,bytes32,uint256,address,uint256) (runs: 270, μ: 103032, ~: 102943) +LibERC6551Test:testInitCodeHash(address,bytes32,uint256,address,uint256) (runs: 270, μ: 252386, ~: 23818) +LibERC6551Test:testIsERC6551Account(address,bytes32,uint256,address,uint256) (runs: 270, μ: 114214, ~: 114208) LibERC6551Test:test__codesize() (gas: 5280) -LibMapTest:testFoundStatementDifferential(uint256,uint256,uint256) (runs: 324, μ: 499, ~: 499) +LibMapTest:testFoundStatementDifferential(uint256,uint256,uint256) (runs: 270, μ: 499, ~: 499) LibMapTest:testGeneralMapFunctionsGas() (gas: 3304775) -LibMapTest:testGeneralMapFunctionsWithSmallBitWidths(uint256) (runs: 324, μ: 84263, ~: 85691) +LibMapTest:testGeneralMapFunctionsWithSmallBitWidths(uint256) (runs: 270, μ: 84356, ~: 85701) LibMapTest:testGeneralMapFunctionsWithZeroBitWidth() (gas: 12260) -LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 324, μ: 207920, ~: 152635) +LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 270, μ: 205707, ~: 151431) LibMapTest:testMapGetFromBigArray() (gas: 3330) LibMapTest:testMapGetUint8() (gas: 3313) LibMapTest:testMapSetUint8() (gas: 23276) LibMapTest:testMapSetUint8FromBigArray() (gas: 23263) -LibMapTest:testUint128MapSearchSorted(uint256) (runs: 324, μ: 195393, ~: 130540) +LibMapTest:testUint128MapSearchSorted(uint256) (runs: 270, μ: 187157, ~: 131073) LibMapTest:testUint128MapSetAndGet() (gas: 1607264) -LibMapTest:testUint128MapSetAndGet(uint256) (runs: 324, μ: 180234, ~: 170727) -LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 324, μ: 68927, ~: 69334) -LibMapTest:testUint16MapSearchSorted(uint256) (runs: 324, μ: 96037, ~: 86334) +LibMapTest:testUint128MapSetAndGet(uint256) (runs: 270, μ: 180782, ~: 171340) +LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 270, μ: 69051, ~: 69481) +LibMapTest:testUint16MapSearchSorted(uint256) (runs: 270, μ: 97085, ~: 86486) LibMapTest:testUint16MapSetAndGet() (gas: 958101) -LibMapTest:testUint16MapSetAndGet(uint256) (runs: 324, μ: 81515, ~: 81715) -LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 324, μ: 68511, ~: 69242) -LibMapTest:testUint32MapSearchSorted(uint256) (runs: 324, μ: 107800, ~: 87389) +LibMapTest:testUint16MapSetAndGet(uint256) (runs: 270, μ: 81492, ~: 81716) +LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 270, μ: 68437, ~: 69243) +LibMapTest:testUint32MapSearchSorted(uint256) (runs: 270, μ: 108269, ~: 86897) LibMapTest:testUint32MapSetAndGet() (gas: 1067796) -LibMapTest:testUint32MapSetAndGet(uint256) (runs: 324, μ: 114356, ~: 124787) -LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 324, μ: 68714, ~: 69197) -LibMapTest:testUint32Maps(uint256) (runs: 324, μ: 68530, ~: 72252) -LibMapTest:testUint40MapSearchSorted(uint256) (runs: 324, μ: 124654, ~: 107991) +LibMapTest:testUint32MapSetAndGet(uint256) (runs: 270, μ: 114388, ~: 124762) +LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 270, μ: 68454, ~: 69197) +LibMapTest:testUint32Maps(uint256) (runs: 270, μ: 68660, ~: 72252) +LibMapTest:testUint40MapSearchSorted(uint256) (runs: 270, μ: 123526, ~: 108512) LibMapTest:testUint40MapSetAndGet() (gas: 1127509) -LibMapTest:testUint40MapSetAndGet(uint256) (runs: 324, μ: 136758, ~: 146781) -LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 324, μ: 68556, ~: 69272) -LibMapTest:testUint64MapSearchSorted(uint256) (runs: 324, μ: 133393, ~: 108890) +LibMapTest:testUint40MapSetAndGet(uint256) (runs: 270, μ: 137184, ~: 146770) +LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 270, μ: 68319, ~: 69272) +LibMapTest:testUint64MapSearchSorted(uint256) (runs: 270, μ: 132983, ~: 108680) LibMapTest:testUint64MapSetAndGet() (gas: 1220444) -LibMapTest:testUint64MapSetAndGet(uint256) (runs: 324, μ: 149211, ~: 147408) -LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 324, μ: 68420, ~: 69261) -LibMapTest:testUint8MapSearchSorted(uint256) (runs: 324, μ: 100907, ~: 86285) +LibMapTest:testUint64MapSetAndGet(uint256) (runs: 270, μ: 147961, ~: 147374) +LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 270, μ: 68527, ~: 69261) +LibMapTest:testUint8MapSearchSorted(uint256) (runs: 270, μ: 98633, ~: 86157) LibMapTest:testUint8MapSetAndGet() (gas: 884299) -LibMapTest:testUint8MapSetAndGet(uint256) (runs: 324, μ: 59499, ~: 59566) -LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 324, μ: 68205, ~: 69180) +LibMapTest:testUint8MapSetAndGet(uint256) (runs: 270, μ: 59499, ~: 59571) +LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 270, μ: 68363, ~: 69180) LibMapTest:test__codesize() (gas: 12065) LibPRNGTest:testExponentialWad() (gas: 4394348) LibPRNGTest:testLCGGas() (gas: 20803) LibPRNGTest:testLazyShufflerGet() (gas: 298845) -LibPRNGTest:testLazyShufflerGetOutOfBoundsReverts(uint256,uint256) (runs: 324, μ: 26619, ~: 26667) +LibPRNGTest:testLazyShufflerGetOutOfBoundsReverts(uint256,uint256) (runs: 270, μ: 26610, ~: 26667) LibPRNGTest:testLazyShufflerNoStorageCollisions() (gas: 265353) -LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 324, μ: 202575, ~: 91089) +LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 270, μ: 204908, ~: 91132) LibPRNGTest:testLazyShufflerProducesShuffledRange2() (gas: 9059432) -LibPRNGTest:testLazyShufflerProducesShuffledRangeWithGrow(uint256,uint256) (runs: 324, μ: 184962, ~: 176386) +LibPRNGTest:testLazyShufflerProducesShuffledRangeWithGrow(uint256,uint256) (runs: 270, μ: 185581, ~: 175676) LibPRNGTest:testLazyShufflerRestart() (gas: 275425) LibPRNGTest:testLazyShufflerRevertsOnDoubleInit() (gas: 26824) -LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 324, μ: 64044, ~: 56705) -LibPRNGTest:testLazyShufflerRevertsOnGrowWithInvalidLength(uint256,uint256) (runs: 324, μ: 24689, ~: 24708) -LibPRNGTest:testLazyShufflerRevertsOnInitWithInvalidLength(uint256) (runs: 324, μ: 22812, ~: 23673) +LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 270, μ: 64987, ~: 74386) +LibPRNGTest:testLazyShufflerRevertsOnGrowWithInvalidLength(uint256,uint256) (runs: 270, μ: 24684, ~: 24600) +LibPRNGTest:testLazyShufflerRevertsOnInitWithInvalidLength(uint256) (runs: 270, μ: 23012, ~: 23605) LibPRNGTest:testLazyShufflerRevertsOnZeroLengthNext() (gas: 27623) LibPRNGTest:testPRNGGas() (gas: 25667) LibPRNGTest:testPRNGNext() (gas: 16162) @@ -790,259 +790,259 @@ LibPRNGTest:testPRNGShuffleGas() (gas: 1610927) LibPRNGTest:testPRNGUniform() (gas: 559430) LibPRNGTest:testStandardNormalWad() (gas: 4425913) LibPRNGTest:test__codesize() (gas: 14420) -LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 324, μ: 4473, ~: 4291) +LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 270, μ: 4433, ~: 4245) LibRLPTest:testComputeAddressForLargeNonces() (gas: 1760) LibRLPTest:testComputeAddressForSmallNonces() (gas: 1007) LibRLPTest:testComputeAddressOriginalForLargeNonces() (gas: 3766) LibRLPTest:testComputeAddressOriginalForSmallNonces() (gas: 2185) -LibRLPTest:testRLPEncodeAddressDifferential(address) (runs: 324, μ: 235151, ~: 26224) -LibRLPTest:testRLPEncodeAddressViaList(address,address) (runs: 324, μ: 193514, ~: 28079) -LibRLPTest:testRLPEncodeBool(bool) (runs: 324, μ: 27680, ~: 27818) +LibRLPTest:testRLPEncodeAddressDifferential(address) (runs: 270, μ: 256123, ~: 26225) +LibRLPTest:testRLPEncodeAddressViaList(address,address) (runs: 270, μ: 190917, ~: 28079) +LibRLPTest:testRLPEncodeBool(bool) (runs: 270, μ: 27686, ~: 27818) LibRLPTest:testRLPEncodeBytes() (gas: 382181) LibRLPTest:testRLPEncodeBytes2() (gas: 156293) -LibRLPTest:testRLPEncodeBytesDifferential(bytes32) (runs: 324, μ: 274140, ~: 29789) +LibRLPTest:testRLPEncodeBytesDifferential(bytes32) (runs: 270, μ: 269422, ~: 29649) LibRLPTest:testRLPEncodeList() (gas: 2738950) LibRLPTest:testRLPEncodeList2() (gas: 803256) -LibRLPTest:testRLPEncodeListDifferential(bytes,uint256) (runs: 324, μ: 432376, ~: 342356) +LibRLPTest:testRLPEncodeListDifferential(bytes,uint256) (runs: 270, μ: 422286, ~: 342356) LibRLPTest:testRLPEncodeUint() (gas: 1291481) -LibRLPTest:testRLPEncodeUint(uint256) (runs: 324, μ: 99642, ~: 24995) -LibRLPTest:testRLPEncodeUintDifferential(uint256) (runs: 324, μ: 259250, ~: 27100) -LibRLPTest:testRLPMemory(bytes32) (runs: 324, μ: 296309, ~: 33296) +LibRLPTest:testRLPEncodeUint(uint256) (runs: 270, μ: 98802, ~: 25049) +LibRLPTest:testRLPEncodeUintDifferential(uint256) (runs: 270, μ: 256803, ~: 27125) +LibRLPTest:testRLPMemory(bytes32) (runs: 270, μ: 289847, ~: 32849) LibRLPTest:testRLPPUint256() (gas: 364901) -LibRLPTest:testSmallLog256Equivalence(uint256) (runs: 324, μ: 23678, ~: 23700) +LibRLPTest:testSmallLog256Equivalence(uint256) (runs: 270, μ: 23676, ~: 23700) LibRLPTest:test__codesize() (gas: 15520) -LibSortTest:testClean(uint256) (runs: 324, μ: 3225, ~: 3428) -LibSortTest:testCopy(uint256) (runs: 324, μ: 73976, ~: 25742) -LibSortTest:testInsertionSortAddressesDifferential(uint256) (runs: 324, μ: 39852, ~: 24893) +LibSortTest:testClean(uint256) (runs: 270, μ: 3203, ~: 3428) +LibSortTest:testCopy(uint256) (runs: 270, μ: 79040, ~: 25742) +LibSortTest:testInsertionSortAddressesDifferential(uint256) (runs: 270, μ: 26172, ~: 24893) LibSortTest:testInsertionSortInts() (gas: 80617) LibSortTest:testInsertionSortPsuedorandom() (gas: 63580) -LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 324, μ: 62351, ~: 62383) -LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 324, μ: 35999, ~: 28883) -LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 324, μ: 36827, ~: 28805) -LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 324, μ: 32340, ~: 28050) -LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 324, μ: 41829, ~: 29814) -LibSortTest:testIsSortedDifferential(uint256) (runs: 324, μ: 39327, ~: 28325) -LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 324, μ: 51765, ~: 29744) +LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 270, μ: 62321, ~: 62319) +LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 270, μ: 34899, ~: 28018) +LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 270, μ: 36692, ~: 28763) +LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 270, μ: 31246, ~: 27511) +LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 270, μ: 42552, ~: 30007) +LibSortTest:testIsSortedDifferential(uint256) (runs: 270, μ: 40922, ~: 28544) +LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 270, μ: 51143, ~: 29939) LibSortTest:testReverse() (gas: 117043) LibSortTest:testSearchSorted() (gas: 118994) LibSortTest:testSearchSortedAddresses() (gas: 251972) LibSortTest:testSearchSortedBasicCases() (gas: 2200) -LibSortTest:testSearchSortedDifferential(uint256) (runs: 324, μ: 44374, ~: 30892) +LibSortTest:testSearchSortedDifferential(uint256) (runs: 270, μ: 45313, ~: 30330) LibSortTest:testSearchSortedEdgeCases() (gas: 1551) -LibSortTest:testSearchSortedElementInArray(uint256) (runs: 324, μ: 54303, ~: 31316) +LibSortTest:testSearchSortedElementInArray(uint256) (runs: 270, μ: 57374, ~: 31463) LibSortTest:testSearchSortedElementNotInArray() (gas: 6180) -LibSortTest:testSearchSortedElementNotInArray(uint256) (runs: 324, μ: 46489, ~: 33787) +LibSortTest:testSearchSortedElementNotInArray(uint256) (runs: 270, μ: 47942, ~: 33175) LibSortTest:testSearchSortedInts() (gas: 120728) -LibSortTest:testSearchSortedInts(int256[],int256) (runs: 324, μ: 12239, ~: 11975) +LibSortTest:testSearchSortedInts(int256[],int256) (runs: 270, μ: 12073, ~: 11691) LibSortTest:testSearchSortedWithEmptyArray() (gas: 731) -LibSortTest:testSort(uint256) (runs: 324, μ: 38579, ~: 28838) -LibSortTest:testSortAddressesDifferential(uint256) (runs: 324, μ: 67970, ~: 31287) +LibSortTest:testSort(uint256) (runs: 270, μ: 39157, ~: 28889) +LibSortTest:testSortAddressesDifferential(uint256) (runs: 270, μ: 69284, ~: 31181) LibSortTest:testSortAddressesPsuedorandom() (gas: 146943) -LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 324, μ: 147263, ~: 147289) +LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 270, μ: 147218, ~: 147157) LibSortTest:testSortAddressesPsuedorandomBrutalizeUpperBits() (gas: 198938) LibSortTest:testSortAddressesReversed() (gas: 45501) LibSortTest:testSortAddressesSorted() (gas: 41136) LibSortTest:testSortBasicCase() (gas: 1164) -LibSortTest:testSortChecksumed(uint256) (runs: 324, μ: 45500, ~: 30234) -LibSortTest:testSortDifferential(uint256) (runs: 324, μ: 59247, ~: 28273) +LibSortTest:testSortChecksumed(uint256) (runs: 270, μ: 43475, ~: 30370) +LibSortTest:testSortDifferential(uint256) (runs: 270, μ: 58117, ~: 28548) LibSortTest:testSortInts() (gas: 894005) LibSortTest:testSortMostlySame() (gas: 66080) LibSortTest:testSortOriginalMostlySame() (gas: 208007) LibSortTest:testSortOriginalPsuedorandom() (gas: 283682) -LibSortTest:testSortOriginalPsuedorandom(uint256) (runs: 324, μ: 287574, ~: 286884) +LibSortTest:testSortOriginalPsuedorandom(uint256) (runs: 270, μ: 287309, ~: 286482) LibSortTest:testSortOriginalReversed() (gas: 156304) LibSortTest:testSortOriginalSorted() (gas: 142285) LibSortTest:testSortPsuedorandom() (gas: 140146) -LibSortTest:testSortPsuedorandom(uint256) (runs: 324, μ: 140551, ~: 140586) +LibSortTest:testSortPsuedorandom(uint256) (runs: 270, μ: 140474, ~: 140499) LibSortTest:testSortPsuedorandomNonuniform() (gas: 145957) -LibSortTest:testSortPsuedorandomNonuniform(uint256) (runs: 324, μ: 146265, ~: 146195) +LibSortTest:testSortPsuedorandomNonuniform(uint256) (runs: 270, μ: 146208, ~: 146134) LibSortTest:testSortReversed() (gas: 38906) LibSortTest:testSortSorted() (gas: 34523) LibSortTest:testSortTestOverhead() (gas: 103364) LibSortTest:testSortedDifferenceDifferential() (gas: 183328) -LibSortTest:testSortedDifferenceDifferential(uint256) (runs: 324, μ: 35083, ~: 35112) -LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 324, μ: 36951, ~: 36411) -LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 324, μ: 58996, ~: 53190) +LibSortTest:testSortedDifferenceDifferential(uint256) (runs: 270, μ: 34557, ~: 34030) +LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 270, μ: 36906, ~: 36481) +LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 270, μ: 59381, ~: 55353) LibSortTest:testSortedIntersectionDifferential() (gas: 209315) -LibSortTest:testSortedIntersectionDifferential(uint256) (runs: 324, μ: 32635, ~: 32024) -LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 324, μ: 35022, ~: 34490) +LibSortTest:testSortedIntersectionDifferential(uint256) (runs: 270, μ: 32750, ~: 32024) +LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 270, μ: 34779, ~: 34190) LibSortTest:testSortedUnionDifferential() (gas: 217115) -LibSortTest:testSortedUnionDifferential(uint256) (runs: 324, μ: 35616, ~: 34971) -LibSortTest:testSortedUnionDifferentialInt(uint256) (runs: 324, μ: 38106, ~: 37691) -LibSortTest:testTwoComplementConversionSort(int256,int256) (runs: 324, μ: 450, ~: 450) +LibSortTest:testSortedUnionDifferential(uint256) (runs: 270, μ: 35516, ~: 34850) +LibSortTest:testSortedUnionDifferentialInt(uint256) (runs: 270, μ: 37962, ~: 37668) +LibSortTest:testTwoComplementConversionSort(int256,int256) (runs: 270, μ: 450, ~: 452) LibSortTest:testUniquifySorted() (gas: 1710) -LibSortTest:testUniquifySorted(uint256) (runs: 324, μ: 53244, ~: 28864) +LibSortTest:testUniquifySorted(uint256) (runs: 270, μ: 49219, ~: 28462) LibSortTest:testUniquifySortedAddress() (gas: 4039) -LibSortTest:testUniquifySortedAddress(uint256) (runs: 324, μ: 49206, ~: 28917) -LibSortTest:testUniquifySortedDifferential(uint256) (runs: 324, μ: 48497, ~: 32349) +LibSortTest:testUniquifySortedAddress(uint256) (runs: 270, μ: 51480, ~: 28747) +LibSortTest:testUniquifySortedDifferential(uint256) (runs: 270, μ: 48608, ~: 32349) LibSortTest:testUniquifySortedWithEmptyArray() (gas: 528) LibSortTest:test__codesize() (gas: 21949) -LibStringTest:testAddressToHexStringZeroRightPadded(address) (runs: 324, μ: 3414, ~: 3414) +LibStringTest:testAddressToHexStringZeroRightPadded(address) (runs: 270, μ: 3414, ~: 3414) LibStringTest:testBytesToHexString() (gas: 4801) -LibStringTest:testBytesToHexString(bytes) (runs: 324, μ: 752267, ~: 624248) +LibStringTest:testBytesToHexString(bytes) (runs: 270, μ: 724730, ~: 624194) LibStringTest:testBytesToHexStringNoPrefix() (gas: 4489) -LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 324, μ: 733973, ~: 623964) +LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 270, μ: 719540, ~: 623898) LibStringTest:testContains() (gas: 43988) LibStringTest:testFromAddressToHexString() (gas: 3137) LibStringTest:testFromAddressToHexStringChecksummed() (gas: 35217) -LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 324, μ: 694839, ~: 612919) +LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 270, μ: 704449, ~: 612898) LibStringTest:testFromAddressToHexStringWithLeadingZeros() (gas: 3113) -LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 324, μ: 767802, ~: 622683) +LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 270, μ: 735075, ~: 622575) LibStringTest:testNormalizeSmallString() (gas: 1387) -LibStringTest:testNormalizeSmallString(bytes32) (runs: 324, μ: 3008, ~: 4213) +LibStringTest:testNormalizeSmallString(bytes32) (runs: 270, μ: 2921, ~: 3912) LibStringTest:testStringConcat() (gas: 4003) -LibStringTest:testStringConcat(string,string) (runs: 324, μ: 698988, ~: 604396) +LibStringTest:testStringConcat(string,string) (runs: 270, μ: 692304, ~: 604392) LibStringTest:testStringConcatOriginal() (gas: 4654) LibStringTest:testStringDirectReturn() (gas: 6741) -LibStringTest:testStringDirectReturn(string) (runs: 324, μ: 3002, ~: 2916) +LibStringTest:testStringDirectReturn(string) (runs: 270, μ: 3001, ~: 2916) LibStringTest:testStringEndsWith() (gas: 2829) -LibStringTest:testStringEndsWith(uint256) (runs: 324, μ: 698824, ~: 637082) -LibStringTest:testStringEq(string,string) (runs: 324, μ: 1567, ~: 1567) +LibStringTest:testStringEndsWith(uint256) (runs: 270, μ: 707832, ~: 636483) +LibStringTest:testStringEq(string,string) (runs: 270, μ: 1566, ~: 1567) LibStringTest:testStringEqs() (gas: 2013) LibStringTest:testStringEscapeHTML() (gas: 8427) -LibStringTest:testStringEscapeHTML(uint256) (runs: 324, μ: 733761, ~: 641593) +LibStringTest:testStringEscapeHTML(uint256) (runs: 270, μ: 722532, ~: 641188) LibStringTest:testStringEscapeJSON() (gas: 39797) LibStringTest:testStringEscapeJSONHexEncode() (gas: 727636) LibStringTest:testStringIndexOf() (gas: 17375) -LibStringTest:testStringIndexOf(uint256) (runs: 324, μ: 761889, ~: 644909) +LibStringTest:testStringIndexOf(uint256) (runs: 270, μ: 761039, ~: 644450) LibStringTest:testStringIndicesOf() (gas: 11700) -LibStringTest:testStringIndicesOf(uint256) (runs: 324, μ: 812138, ~: 648525) +LibStringTest:testStringIndicesOf(uint256) (runs: 270, μ: 791996, ~: 649014) LibStringTest:testStringIs7BitASCII() (gas: 205346) -LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 324, μ: 727299, ~: 604261) +LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 270, μ: 705057, ~: 604340) LibStringTest:testStringIs7BitASCIIWithAllowedLookup() (gas: 4939) -LibStringTest:testStringIs7BitASCIIWithAllowedLookupDifferential(bytes,uint128) (runs: 324, μ: 679819, ~: 603919) +LibStringTest:testStringIs7BitASCIIWithAllowedLookupDifferential(bytes,uint128) (runs: 270, μ: 701316, ~: 603924) LibStringTest:testStringLastIndexOf() (gas: 24042) -LibStringTest:testStringLastIndexOf(uint256) (runs: 324, μ: 719107, ~: 646300) +LibStringTest:testStringLastIndexOf(uint256) (runs: 270, μ: 713928, ~: 646037) LibStringTest:testStringLowerDifferential() (gas: 3405674) -LibStringTest:testStringLowerDifferential(string) (runs: 324, μ: 8348, ~: 7991) +LibStringTest:testStringLowerDifferential(string) (runs: 270, μ: 8262, ~: 7991) LibStringTest:testStringLowerOriginal() (gas: 1219) LibStringTest:testStringPackAndUnpackOne() (gas: 756426) -LibStringTest:testStringPackAndUnpackOne(string) (runs: 324, μ: 681354, ~: 603176) -LibStringTest:testStringPackAndUnpackOneDifferential(string) (runs: 324, μ: 692897, ~: 603035) +LibStringTest:testStringPackAndUnpackOne(string) (runs: 270, μ: 700207, ~: 603174) +LibStringTest:testStringPackAndUnpackOneDifferential(string) (runs: 270, μ: 699203, ~: 603035) LibStringTest:testStringPackAndUnpackTwo() (gas: 916242) -LibStringTest:testStringPackAndUnpackTwo(string,string) (runs: 324, μ: 771137, ~: 604566) -LibStringTest:testStringPackAndUnpackTwoDifferential(string,string) (runs: 324, μ: 719680, ~: 603976) +LibStringTest:testStringPackAndUnpackTwo(string,string) (runs: 270, μ: 787970, ~: 604554) +LibStringTest:testStringPackAndUnpackTwoDifferential(string,string) (runs: 270, μ: 714566, ~: 603986) LibStringTest:testStringRepeat() (gas: 4986) -LibStringTest:testStringRepeat(string,uint256) (runs: 324, μ: 689266, ~: 606476) +LibStringTest:testStringRepeat(string,uint256) (runs: 270, μ: 672513, ~: 606501) LibStringTest:testStringRepeatOriginal() (gas: 9620) -LibStringTest:testStringReplace(uint256) (runs: 324, μ: 816668, ~: 651142) +LibStringTest:testStringReplace(uint256) (runs: 270, μ: 817286, ~: 649935) LibStringTest:testStringReplaceLong() (gas: 8573) LibStringTest:testStringReplaceMedium() (gas: 7581) LibStringTest:testStringReplaceShort() (gas: 12329) LibStringTest:testStringRuneCount() (gas: 3035897) -LibStringTest:testStringRuneCountDifferential(string) (runs: 324, μ: 6158, ~: 5918) +LibStringTest:testStringRuneCountDifferential(string) (runs: 270, μ: 6093, ~: 5878) LibStringTest:testStringSlice() (gas: 9257) -LibStringTest:testStringSlice(bytes,uint256,uint256) (runs: 324, μ: 737778, ~: 628281) -LibStringTest:testStringSlice(uint256) (runs: 324, μ: 847316, ~: 645035) +LibStringTest:testStringSlice(bytes,uint256,uint256) (runs: 270, μ: 734073, ~: 628188) +LibStringTest:testStringSlice(uint256) (runs: 270, μ: 842409, ~: 644852) LibStringTest:testStringSplit() (gas: 20309) -LibStringTest:testStringSplit(uint256) (runs: 324, μ: 762523, ~: 648065) +LibStringTest:testStringSplit(uint256) (runs: 270, μ: 773354, ~: 648041) LibStringTest:testStringStartsWith() (gas: 2544) -LibStringTest:testStringStartsWith(uint256) (runs: 324, μ: 801766, ~: 636656) +LibStringTest:testStringStartsWith(uint256) (runs: 270, μ: 793474, ~: 636861) LibStringTest:testStringUpperDifferential() (gas: 3084191) -LibStringTest:testStringUpperDifferential(string) (runs: 324, μ: 8347, ~: 7990) +LibStringTest:testStringUpperDifferential(string) (runs: 270, μ: 8261, ~: 7990) LibStringTest:testStringUpperOriginal() (gas: 1218) LibStringTest:testTo7BitASCIIAllowedLookup() (gas: 3113) LibStringTest:testToHexStringFixedLengthInsufficientLength() (gas: 3395) LibStringTest:testToHexStringFixedLengthPositiveNumberLong() (gas: 3699) LibStringTest:testToHexStringFixedLengthPositiveNumberShort() (gas: 940) LibStringTest:testToHexStringFixedLengthUint256Max() (gas: 3656) -LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 324, μ: 8270, ~: 6491) +LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 270, μ: 8350, ~: 6009) LibStringTest:testToHexStringPositiveNumber() (gas: 865) LibStringTest:testToHexStringUint256Max() (gas: 3398) LibStringTest:testToHexStringZero() (gas: 805) -LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 324, μ: 1933, ~: 1548) +LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 270, μ: 1947, ~: 1465) LibStringTest:testToMinimalHexStringNoPrefixPositiveNumber() (gas: 3426) LibStringTest:testToMinimalHexStringNoPrefixUint256Max() (gas: 3424) LibStringTest:testToMinimalHexStringNoPrefixZero() (gas: 831) -LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 324, μ: 1953, ~: 1570) +LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 270, μ: 1968, ~: 1487) LibStringTest:testToMinimalHexStringPositiveNumber() (gas: 3556) LibStringTest:testToMinimalHexStringUint256Max() (gas: 3470) LibStringTest:testToMinimalHexStringZero() (gas: 829) -LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 324, μ: 1980, ~: 1595) +LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 270, μ: 1995, ~: 1512) LibStringTest:testToSmallString() (gas: 4448) LibStringTest:testToStringPositiveNumber() (gas: 910) LibStringTest:testToStringPositiveNumberBrutalized() (gas: 603313) -LibStringTest:testToStringSignedDifferential(int256) (runs: 324, μ: 740703, ~: 606149) +LibStringTest:testToStringSignedDifferential(int256) (runs: 270, μ: 726986, ~: 606034) LibStringTest:testToStringSignedGas() (gas: 7305) -LibStringTest:testToStringSignedMemory(int256) (runs: 324, μ: 693871, ~: 604275) +LibStringTest:testToStringSignedMemory(int256) (runs: 270, μ: 705079, ~: 604269) LibStringTest:testToStringSignedOriginalGas() (gas: 9839) LibStringTest:testToStringUint256Max() (gas: 6687) LibStringTest:testToStringUint256MaxBrutalized() (gas: 614604) LibStringTest:testToStringZero() (gas: 699) LibStringTest:testToStringZeroBrutalized() (gas: 602785) -LibStringTest:testToStringZeroRightPadded(uint256) (runs: 324, μ: 735768, ~: 603756) +LibStringTest:testToStringZeroRightPadded(uint256) (runs: 270, μ: 737882, ~: 603642) LibStringTest:test__codesize() (gas: 43124) LibZipTest:testCdCompress() (gas: 126842) -LibZipTest:testCdCompressDecompress(bytes) (runs: 324, μ: 773079, ~: 657775) -LibZipTest:testCdCompressDecompress(uint256) (runs: 324, μ: 795884, ~: 677714) +LibZipTest:testCdCompressDecompress(bytes) (runs: 270, μ: 787305, ~: 657795) +LibZipTest:testCdCompressDecompress(uint256) (runs: 270, μ: 792219, ~: 676599) LibZipTest:testCdDecompressOnInvalidInput() (gas: 1397) LibZipTest:testCdFallback() (gas: 5622174) -LibZipTest:testCdFallback(bytes,uint256) (runs: 324, μ: 1159884, ~: 1062748) -LibZipTest:testCdFallbackDecompressor(bytes) (runs: 324, μ: 121417, ~: 117962) -LibZipTest:testCdFallbackDecompressor(uint256) (runs: 324, μ: 173623, ~: 157893) -LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 324, μ: 592, ~: 585) -LibZipTest:testDecompressWontRevert(bytes) (runs: 324, μ: 759898, ~: 637282) +LibZipTest:testCdFallback(bytes,uint256) (runs: 270, μ: 1170265, ~: 1061186) +LibZipTest:testCdFallbackDecompressor(bytes) (runs: 270, μ: 121089, ~: 117618) +LibZipTest:testCdFallbackDecompressor(uint256) (runs: 270, μ: 173157, ~: 159528) +LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 270, μ: 592, ~: 585) +LibZipTest:testDecompressWontRevert(bytes) (runs: 270, μ: 757506, ~: 637424) LibZipTest:testFlzCompressDecompress() (gas: 1254342) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 324, μ: 734687, ~: 669875) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 270, μ: 760839, ~: 677273) LibZipTest:testFlzCompressDecompress2() (gas: 763987) LibZipTest:test__codesize() (gas: 20417) -LifebuoyTest:testLifebuoyCreateDeployment(address,address,uint256) (runs: 324, μ: 3057128, ~: 3342222) -LifebuoyTest:testLifebuoyOwnedCloneRescuePermissions(bytes32) (runs: 324, μ: 1367559, ~: 1367483) -LifebuoyTest:testLifebuoyOwnedRescuePermissions(bytes32) (runs: 324, μ: 1370810, ~: 1362948) -LifebuoyTest:testLifebuoyRescuePermissions(bytes32) (runs: 324, μ: 1350510, ~: 1330756) +LifebuoyTest:testLifebuoyCreateDeployment(address,address,uint256) (runs: 270, μ: 3084014, ~: 3367280) +LifebuoyTest:testLifebuoyOwnedCloneRescuePermissions(bytes32) (runs: 270, μ: 1367578, ~: 1367483) +LifebuoyTest:testLifebuoyOwnedRescuePermissions(bytes32) (runs: 270, μ: 1370750, ~: 1362885) +LifebuoyTest:testLifebuoyRescuePermissions(bytes32) (runs: 270, μ: 1351326, ~: 1331144) LifebuoyTest:testLockEverything() (gas: 960877) LifebuoyTest:testLockRescue() (gas: 978964) LifebuoyTest:testLockRescueETH() (gas: 991228) -LifebuoyTest:testRescueAll(bytes32) (runs: 324, μ: 1589122, ~: 992914) +LifebuoyTest:testRescueAll(bytes32) (runs: 270, μ: 1707168, ~: 992836) LifebuoyTest:test__codesize() (gas: 45955) MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 985) -MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 324, μ: 712725, ~: 640736) -MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 324, μ: 37709, ~: 37943) -MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 324, μ: 6499, ~: 6484) -MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 324, μ: 892503, ~: 809941) +MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 270, μ: 719251, ~: 640693) +MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 270, μ: 38033, ~: 38470) +MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 270, μ: 6499, ~: 6467) +MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 270, μ: 895732, ~: 810894) MerkleProofLibTest:testVerifyMultiProofIsInvalid() (gas: 638379) MerkleProofLibTest:testVerifyMultiProofIsValid() (gas: 640255) MerkleProofLibTest:testVerifyMultiProofMalicious() (gas: 7918) -MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 324, μ: 895588, ~: 794705) -MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 324, μ: 4046, ~: 3906) +MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 270, μ: 859550, ~: 794526) +MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 270, μ: 4039, ~: 3906) MerkleProofLibTest:testVerifyProofBasicCaseIsInvalid() (gas: 3626) MerkleProofLibTest:testVerifyProofBasicCaseIsValid() (gas: 3590) -MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 324, μ: 2697, ~: 2968) +MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 270, μ: 2690, ~: 2968) MerkleProofLibTest:test__codesize() (gas: 11742) -MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 324, μ: 25470, ~: 25477) +MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 270, μ: 25473, ~: 25479) MetadataReaderLibTest:testReadBytes32String() (gas: 664725) MetadataReaderLibTest:testReadBytes32StringTruncated() (gas: 775178) -MetadataReaderLibTest:testReadString(uint256) (runs: 324, μ: 841461, ~: 719679) +MetadataReaderLibTest:testReadString(uint256) (runs: 270, μ: 851919, ~: 719731) MetadataReaderLibTest:testReadStringChopped() (gas: 272350) -MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 324, μ: 816270, ~: 707264) +MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 270, μ: 825173, ~: 707264) MetadataReaderLibTest:testReadUint() (gas: 921729) -MetadataReaderLibTest:testReadUint(uint256) (runs: 324, μ: 46652, ~: 47136) +MetadataReaderLibTest:testReadUint(uint256) (runs: 270, μ: 46846, ~: 47136) MetadataReaderLibTest:test__codesize() (gas: 8122) -MinHeapLibTest:testHeapEnqueue(uint256) (runs: 324, μ: 181268, ~: 181221) -MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 324, μ: 587053, ~: 454518) +MinHeapLibTest:testHeapEnqueue(uint256) (runs: 270, μ: 181420, ~: 181221) +MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 270, μ: 606986, ~: 496113) MinHeapLibTest:testHeapEnqueueGas() (gas: 841356) -MinHeapLibTest:testHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 324, μ: 47263, ~: 28359) -MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 324, μ: 686, ~: 517) -MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 324, μ: 117303, ~: 124988) -MinHeapLibTest:testHeapPushPop(uint256) (runs: 324, μ: 248555, ~: 235239) -MinHeapLibTest:testHeapPushPopLength(uint256) (runs: 324, μ: 927102, ~: 851653) -MinHeapLibTest:testHeapReplace(uint256) (runs: 324, μ: 292692, ~: 288527) -MinHeapLibTest:testHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 324, μ: 45521, ~: 50627) -MinHeapLibTest:testHeapRoot(uint256) (runs: 324, μ: 48320, ~: 67348) -MinHeapLibTest:testHeapSmallest(uint256) (runs: 324, μ: 1325214, ~: 1112509) +MinHeapLibTest:testHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 270, μ: 47258, ~: 28359) +MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 270, μ: 684, ~: 517) +MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 270, μ: 116962, ~: 124988) +MinHeapLibTest:testHeapPushPop(uint256) (runs: 270, μ: 258770, ~: 269956) +MinHeapLibTest:testHeapPushPopLength(uint256) (runs: 270, μ: 922639, ~: 838139) +MinHeapLibTest:testHeapReplace(uint256) (runs: 270, μ: 294983, ~: 293883) +MinHeapLibTest:testHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 270, μ: 44685, ~: 28717) +MinHeapLibTest:testHeapRoot(uint256) (runs: 270, μ: 48492, ~: 67348) +MinHeapLibTest:testHeapSmallest(uint256) (runs: 270, μ: 1317938, ~: 1116824) MinHeapLibTest:testHeapSmallestGas() (gas: 50069382) -MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 324, μ: 1663203, ~: 951645) -MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 324, μ: 860820, ~: 754243) +MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 270, μ: 1609883, ~: 932307) +MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 270, μ: 848501, ~: 758222) MinHeapLibTest:testMemHeapEnqueueGas() (gas: 249458) -MinHeapLibTest:testMemHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 324, μ: 24971, ~: 23896) -MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 324, μ: 946347, ~: 844057) +MinHeapLibTest:testMemHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 270, μ: 24995, ~: 23899) +MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 270, μ: 954932, ~: 876042) MinHeapLibTest:testMemHeapPushGas() (gas: 35596) -MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 324, μ: 1457410, ~: 1093547) -MinHeapLibTest:testMemHeapPushPopLength(uint256) (runs: 324, μ: 845828, ~: 715003) -MinHeapLibTest:testMemHeapReplace(uint256) (runs: 324, μ: 956564, ~: 782000) -MinHeapLibTest:testMemHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 324, μ: 25652, ~: 25257) -MinHeapLibTest:testMemHeapRoot(uint256) (runs: 324, μ: 809044, ~: 655932) -MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 324, μ: 979394, ~: 767795) +MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 270, μ: 1494707, ~: 1104348) +MinHeapLibTest:testMemHeapPushPopLength(uint256) (runs: 270, μ: 846575, ~: 713015) +MinHeapLibTest:testMemHeapReplace(uint256) (runs: 270, μ: 967721, ~: 792818) +MinHeapLibTest:testMemHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 270, μ: 25622, ~: 25248) +MinHeapLibTest:testMemHeapRoot(uint256) (runs: 270, μ: 822948, ~: 655932) +MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 270, μ: 977980, ~: 767633) MinHeapLibTest:testMemHeapSmallestGas() (gas: 2985537) MinHeapLibTest:testMemHeapWriteAndReadFromStorage() (gas: 67756) MinHeapLibTest:testMemHeapWriteAndReadFromStorage2() (gas: 67774) @@ -1051,66 +1051,66 @@ MulticallableTest:testMulticallableBenchmark() (gas: 29738) MulticallableTest:testMulticallableOriginalBenchmark() (gas: 38715) MulticallableTest:testMulticallablePreservesMsgSender() (gas: 11344) MulticallableTest:testMulticallableReturnDataIsProperlyEncoded() (gas: 407906) -MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 324, μ: 259175, ~: 399974) -MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 324, μ: 267801, ~: 404683) +MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 270, μ: 259972, ~: 399948) +MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 270, μ: 260572, ~: 404683) MulticallableTest:testMulticallableRevertWithCustomError() (gas: 11861) MulticallableTest:testMulticallableRevertWithMessage() (gas: 13511) -MulticallableTest:testMulticallableRevertWithMessage(string) (runs: 324, μ: 14122, ~: 13972) +MulticallableTest:testMulticallableRevertWithMessage(string) (runs: 270, μ: 14122, ~: 13972) MulticallableTest:testMulticallableRevertWithNothing() (gas: 11768) MulticallableTest:testMulticallableWithNoData() (gas: 6489) MulticallableTest:test__codesize() (gas: 9897) OwnableRolesTest:testBytecodeSize() (gas: 350635) -OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 324, μ: 41547, ~: 42162) -OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 324, μ: 27871, ~: 23108) +OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 270, μ: 41544, ~: 42162) +OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 270, μ: 28052, ~: 28554) OwnableRolesTest:testGrantRoles() (gas: 36348) OwnableRolesTest:testHandoverOwnership() (gas: 32807) -OwnableRolesTest:testHandoverOwnership(address) (runs: 324, μ: 32844, ~: 32832) +OwnableRolesTest:testHandoverOwnership(address) (runs: 270, μ: 32845, ~: 32832) OwnableRolesTest:testHandoverOwnershipAfterExpiration() (gas: 37152) OwnableRolesTest:testHandoverOwnershipBeforeExpiration() (gas: 28907) OwnableRolesTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35826) OwnableRolesTest:testHandoverOwnershipWithCancellation() (gas: 31309) -OwnableRolesTest:testHasAllRoles(address,uint256,uint256,uint256,bool) (runs: 324, μ: 34003, ~: 34004) -OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 324, μ: 33610, ~: 33793) +OwnableRolesTest:testHasAllRoles(address,uint256,uint256,uint256,bool) (runs: 270, μ: 34003, ~: 34006) +OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 270, μ: 33646, ~: 33793) OwnableRolesTest:testInitializeOwnerDirect() (gas: 16950) -OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 324, μ: 21004, ~: 30023) +OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 270, μ: 21086, ~: 30023) OwnableRolesTest:testOnlyOwnerOrRolesModifier() (gas: 36455) -OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 324, μ: 55758, ~: 55322) -OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 324, μ: 56252, ~: 58115) -OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 324, μ: 56715, ~: 57489) +OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 270, μ: 55694, ~: 55322) +OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 270, μ: 56356, ~: 58115) +OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 270, μ: 56639, ~: 57489) OwnableRolesTest:testOrdinalsFromRoles() (gas: 3756443) -OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 324, μ: 58035, ~: 42265) +OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 270, μ: 58876, ~: 39765) OwnableRolesTest:testOwnershipHandoverValidForDefaultValue() (gas: 5825) OwnableRolesTest:testRenounceOwnership() (gas: 12945) OwnableRolesTest:testRolesFromOrdinals() (gas: 652364) -OwnableRolesTest:testRolesFromOrdinals(uint8[]) (runs: 324, μ: 81715, ~: 84732) +OwnableRolesTest:testRolesFromOrdinals(uint8[]) (runs: 270, μ: 81110, ~: 84447) OwnableRolesTest:testSetOwnerDirect() (gas: 18073) -OwnableRolesTest:testSetOwnerDirect(address) (runs: 324, μ: 18178, ~: 18193) -OwnableRolesTest:testSetRolesDirect(uint256) (runs: 324, μ: 101566, ~: 101615) +OwnableRolesTest:testSetOwnerDirect(address) (runs: 270, μ: 18175, ~: 18193) +OwnableRolesTest:testSetRolesDirect(uint256) (runs: 270, μ: 101553, ~: 101615) OwnableRolesTest:testTransferOwnership() (gas: 19603) -OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 324, μ: 14449, ~: 12589) +OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 270, μ: 14448, ~: 12589) OwnableRolesTest:test__codesize() (gas: 21230) OwnableTest:testBytecodeSize() (gas: 235158) OwnableTest:testHandoverOwnership() (gas: 32540) -OwnableTest:testHandoverOwnership(address) (runs: 324, μ: 32560, ~: 32547) +OwnableTest:testHandoverOwnership(address) (runs: 270, μ: 32560, ~: 32547) OwnableTest:testHandoverOwnershipAfterExpiration() (gas: 36930) OwnableTest:testHandoverOwnershipBeforeExpiration() (gas: 28756) OwnableTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35560) OwnableTest:testHandoverOwnershipWithCancellation() (gas: 30952) OwnableTest:testInitializeOwnerDirect() (gas: 16825) -OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 324, μ: 20951, ~: 30001) +OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 270, μ: 21032, ~: 30001) OwnableTest:testOwnershipHandoverValidForDefaultValue() (gas: 5737) OwnableTest:testRenounceOwnership() (gas: 12779) OwnableTest:testSetOwnerDirect() (gas: 17983) -OwnableTest:testSetOwnerDirect(address) (runs: 324, μ: 18104, ~: 18104) +OwnableTest:testSetOwnerDirect(address) (runs: 270, μ: 18104, ~: 18104) OwnableTest:testTransferOwnership() (gas: 19446) -OwnableTest:testTransferOwnership(address,bool,bool) (runs: 324, μ: 14237, ~: 12395) +OwnableTest:testTransferOwnership(address,bool,bool) (runs: 270, μ: 14237, ~: 12395) OwnableTest:test__codesize() (gas: 10847) -P256Test:testP256Verify(uint256,bytes32) (runs: 324, μ: 493535, ~: 493423) +P256Test:testP256Verify(uint256,bytes32) (runs: 270, μ: 493539, ~: 493423) P256Test:testP256VerifyMalleableRIPPrecompile() (gas: 341155) P256Test:testP256VerifyMalleableVerifier() (gas: 341175) P256Test:testP256VerifyNonMalleableRIPPrecompile() (gas: 341117) P256Test:testP256VerifyNonMalleableVerifier() (gas: 341095) -P256Test:testP256VerifyNotDeployedReverts(bytes32,bytes32,bytes32,bytes32,bytes32,bool) (runs: 324, μ: 10815, ~: 10799) +P256Test:testP256VerifyNotDeployedReverts(bytes32,bytes32,bytes32,bytes32,bytes32,bool) (runs: 270, μ: 10815, ~: 10799) P256Test:testP256VerifyOutOfBounds() (gas: 201377) P256Test:testP256VerifyWycheproof() (gas: 3268) P256Test:test__codesize() (gas: 11373) @@ -1121,8 +1121,8 @@ ReceiverTest:testOnERC721Received() (gas: 65589) ReceiverTest:test__codesize() (gas: 3053) RedBlackTreeLibTest:testRedBlackTreeBenchUint160() (gas: 3428194) RedBlackTreeLibTest:testRedBlackTreeBenchUint256() (gas: 5841865) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 324, μ: 566624, ~: 558409) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 324, μ: 433224, ~: 443166) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 270, μ: 578806, ~: 566602) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 270, μ: 427673, ~: 426469) RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove3() (gas: 21564928) RedBlackTreeLibTest:testRedBlackTreeInsertBenchStep() (gas: 3702908) RedBlackTreeLibTest:testRedBlackTreeInsertBenchUint160() (gas: 3468526) @@ -1131,16 +1131,16 @@ RedBlackTreeLibTest:testRedBlackTreeInsertOneGas() (gas: 45558) RedBlackTreeLibTest:testRedBlackTreeInsertTenGas() (gas: 282691) RedBlackTreeLibTest:testRedBlackTreeInsertThreeGas() (gas: 96175) RedBlackTreeLibTest:testRedBlackTreeInsertTwoGas() (gas: 69785) -RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 324, μ: 253160, ~: 248169) -RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 324, μ: 245808, ~: 227275) -RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 324, μ: 287313, ~: 285222) +RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 270, μ: 246422, ~: 246509) +RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 270, μ: 250748, ~: 238786) +RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 270, μ: 285154, ~: 284010) RedBlackTreeLibTest:testRedBlackTreePointers() (gas: 91643) RedBlackTreeLibTest:testRedBlackTreeRejectsEmptyValue() (gas: 3232) RedBlackTreeLibTest:testRedBlackTreeRemoveViaPointer() (gas: 58157) RedBlackTreeLibTest:testRedBlackTreeTreeFullReverts() (gas: 50317) RedBlackTreeLibTest:testRedBlackTreeTryInsertAndRemove() (gas: 56062) RedBlackTreeLibTest:testRedBlackTreeValues() (gas: 188759) -RedBlackTreeLibTest:testRedBlackTreeValues(uint256) (runs: 324, μ: 389878, ~: 243921) +RedBlackTreeLibTest:testRedBlackTreeValues(uint256) (runs: 270, μ: 376186, ~: 238696) RedBlackTreeLibTest:test__codesize() (gas: 13174) ReentrancyGuardTest:testRecursiveDirectUnguardedCall() (gas: 34276) ReentrancyGuardTest:testRecursiveIndirectUnguardedCall() (gas: 47727) @@ -1150,109 +1150,109 @@ ReentrancyGuardTest:testRevertRecursiveDirectGuardedCall() (gas: 55123) ReentrancyGuardTest:testRevertRecursiveIndirectGuardedCall() (gas: 56529) ReentrancyGuardTest:testRevertRemoteCallback() (gas: 56230) ReentrancyGuardTest:test__codesize() (gas: 4403) -SSTORE2Test:testReadRevertsOnZeroCodeAddress(address) (runs: 324, μ: 92110, ~: 30000) +SSTORE2Test:testReadRevertsOnZeroCodeAddress(address) (runs: 270, μ: 101405, ~: 30000) SSTORE2Test:testReadSlicing() (gas: 48874) SSTORE2Test:testWriteRead() (gas: 35880) -SSTORE2Test:testWriteRead(uint256,uint256) (runs: 324, μ: 1086325, ~: 67190) -SSTORE2Test:testWriteReadCounterfactual(bytes,bytes32,address) (runs: 324, μ: 4294928, ~: 108268) +SSTORE2Test:testWriteRead(uint256,uint256) (runs: 270, μ: 1042762, ~: 67190) +SSTORE2Test:testWriteReadCounterfactual(bytes,bytes32,address) (runs: 270, μ: 4772651, ~: 108268) SSTORE2Test:testWriteReadCustomBounds() (gas: 33936) SSTORE2Test:testWriteReadCustomStartBound() (gas: 34020) SSTORE2Test:testWriteReadDeterministic() (gas: 70156) -SSTORE2Test:testWriteReadDeterministic(bytes,bytes32) (runs: 324, μ: 4281231, ~: 96934) +SSTORE2Test:testWriteReadDeterministic(bytes,bytes32) (runs: 270, μ: 3325238, ~: 96934) SSTORE2Test:testWriteReadEmptyBound() (gas: 33734) SSTORE2Test:testWriteReadFullBoundedRead() (gas: 35937) SSTORE2Test:testWriteReadFullStartBound() (gas: 33983) SSTORE2Test:testWriteWithTooBigDataReverts() (gas: 97303641) SSTORE2Test:test__codesize() (gas: 8624) -SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 324, μ: 19174, ~: 24774) +SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 270, μ: 19482, ~: 24780) SafeCastLibTest:testSafeCastInt256ToIntBench() (gas: 341694) -SafeCastLibTest:testSafeCastInt256ToIntTrickEquivalence(int256) (runs: 324, μ: 406, ~: 406) -SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 324, μ: 493, ~: 405) -SafeCastLibTest:testSafeCastToUint256(int256) (runs: 324, μ: 1287, ~: 428) -SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 324, μ: 26980, ~: 26184) +SafeCastLibTest:testSafeCastInt256ToIntTrickEquivalence(int256) (runs: 270, μ: 406, ~: 406) +SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 270, μ: 500, ~: 405) +SafeCastLibTest:testSafeCastToUint256(int256) (runs: 270, μ: 1322, ~: 428) +SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 270, μ: 26851, ~: 26139) SafeCastLibTest:testSafeCastUint256ToInt256Bench() (gas: 29380) SafeCastLibTest:testSafeCastUint256ToIntBench() (gas: 330222) SafeCastLibTest:testSafeCastUint256ToUintBench() (gas: 326262) -SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 324, μ: 19253, ~: 24811) +SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 270, μ: 19216, ~: 24808) SafeCastLibTest:test__codesize() (gas: 23416) -SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 324, μ: 111276, ~: 124077) +SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 270, μ: 112798, ~: 124082) SafeTransferLibTest:testApproveWithMissingReturn() (gas: 32462) -SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 324, μ: 32560, ~: 32682) +SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 270, μ: 32609, ~: 32682) SafeTransferLibTest:testApproveWithNonContract() (gas: 2967) -SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 324, μ: 3775, ~: 3825) -SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 324, μ: 81195, ~: 102088) +SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 270, μ: 3765, ~: 3825) +SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 270, μ: 81168, ~: 102088) SafeTransferLibTest:testApproveWithRetry() (gas: 790140) -SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 324, μ: 790048, ~: 790310) +SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 270, μ: 790137, ~: 790310) SafeTransferLibTest:testApproveWithRetryWithNonContract() (gas: 2990) -SafeTransferLibTest:testApproveWithRetryWithNonContract(address,address,uint256) (runs: 324, μ: 3794, ~: 3844) +SafeTransferLibTest:testApproveWithRetryWithNonContract(address,address,uint256) (runs: 270, μ: 3784, ~: 3844) SafeTransferLibTest:testApproveWithReturnsFalseReverts() (gas: 10122) -SafeTransferLibTest:testApproveWithReturnsFalseReverts(address,uint256) (runs: 324, μ: 10276, ~: 10275) +SafeTransferLibTest:testApproveWithReturnsFalseReverts(address,uint256) (runs: 270, μ: 10276, ~: 10275) SafeTransferLibTest:testApproveWithReturnsTooLittleReverts() (gas: 10026) -SafeTransferLibTest:testApproveWithReturnsTooLittleReverts(address,uint256) (runs: 324, μ: 10205, ~: 10204) +SafeTransferLibTest:testApproveWithReturnsTooLittleReverts(address,uint256) (runs: 270, μ: 10205, ~: 10204) SafeTransferLibTest:testApproveWithReturnsTooMuch() (gas: 32913) -SafeTransferLibTest:testApproveWithReturnsTooMuch(address,uint256) (runs: 324, μ: 32944, ~: 33066) -SafeTransferLibTest:testApproveWithReturnsTwoReverts(address,uint256) (runs: 324, μ: 10233, ~: 10232) +SafeTransferLibTest:testApproveWithReturnsTooMuch(address,uint256) (runs: 270, μ: 32993, ~: 33066) +SafeTransferLibTest:testApproveWithReturnsTwoReverts(address,uint256) (runs: 270, μ: 10233, ~: 10232) SafeTransferLibTest:testApproveWithRevertingReverts() (gas: 9983) -SafeTransferLibTest:testApproveWithRevertingReverts(address,uint256) (runs: 324, μ: 10194, ~: 10193) +SafeTransferLibTest:testApproveWithRevertingReverts(address,uint256) (runs: 270, μ: 10194, ~: 10193) SafeTransferLibTest:testApproveWithStandardERC20() (gas: 32348) -SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 324, μ: 32448, ~: 32570) +SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 270, μ: 32497, ~: 32570) SafeTransferLibTest:testBalanceOfStandardERC20() (gas: 7852) -SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 324, μ: 37683, ~: 38062) +SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 270, μ: 37625, ~: 38062) SafeTransferLibTest:testForceTransferETHToGriever() (gas: 1511587) -SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 324, μ: 535461, ~: 570885) +SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 270, μ: 536923, ~: 570885) SafeTransferLibTest:testPermit2() (gas: 90097) -SafeTransferLibTest:testPermit2InvalidAmount(uint256) (runs: 324, μ: 103412, ~: 103368) +SafeTransferLibTest:testPermit2InvalidAmount(uint256) (runs: 270, μ: 103408, ~: 103334) SafeTransferLibTest:testPermit2OnDAI() (gas: 90296) -SafeTransferLibTest:testPermit2TransferFromInvalidAmount(uint256) (runs: 324, μ: 137555, ~: 137828) +SafeTransferLibTest:testPermit2TransferFromInvalidAmount(uint256) (runs: 270, μ: 137583, ~: 137830) SafeTransferLibTest:testSimplePermit2AndPermit2TransferFrom() (gas: 1136342) SafeTransferLibTest:testSimplePermit2AndPermit2TransferFromGas() (gas: 141122) SafeTransferLibTest:testTransferAllETH() (gas: 34643) -SafeTransferLibTest:testTransferAllETH(bytes32) (runs: 324, μ: 57052, ~: 57052) +SafeTransferLibTest:testTransferAllETH(bytes32) (runs: 270, μ: 57052, ~: 57052) SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts() (gas: 10782) -SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts(uint256) (runs: 324, μ: 10869, ~: 10869) +SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts(uint256) (runs: 270, μ: 10869, ~: 10869) SafeTransferLibTest:testTransferAllFromWithStandardERC20() (gas: 33702) -SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 324, μ: 58285, ~: 58271) +SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 270, μ: 58288, ~: 58274) SafeTransferLibTest:testTransferAllWithStandardERC20() (gas: 31014) -SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 324, μ: 40084, ~: 40082) +SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 270, μ: 40084, ~: 40082) SafeTransferLibTest:testTransferETH() (gas: 34622) -SafeTransferLibTest:testTransferETH(bytes32,uint256) (runs: 324, μ: 56902, ~: 57320) +SafeTransferLibTest:testTransferETH(bytes32,uint256) (runs: 270, μ: 56920, ~: 57320) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts() (gas: 10851) -SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 324, μ: 10705, ~: 10888) -SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 324, μ: 756840, ~: 677846) +SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 270, μ: 10770, ~: 10888) +SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 270, μ: 750661, ~: 677776) SafeTransferLibTest:testTransferFromWithMissingReturn() (gas: 542572) -SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 324, μ: 621043, ~: 543442) +SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 270, μ: 621564, ~: 543467) SafeTransferLibTest:testTransferFromWithNonContract() (gas: 3066) -SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 324, μ: 4278, ~: 4288) -SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 324, μ: 758409, ~: 593670) +SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 270, μ: 4275, ~: 4288) +SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 270, μ: 769434, ~: 593681) SafeTransferLibTest:testTransferFromWithReturnsFalseReverts() (gas: 508990) -SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 324, μ: 596123, ~: 509343) +SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 270, μ: 594621, ~: 509289) SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts() (gas: 508723) -SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 324, μ: 623969, ~: 509124) +SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 270, μ: 620729, ~: 509124) SafeTransferLibTest:testTransferFromWithReturnsTooMuch() (gas: 543523) -SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 324, μ: 639077, ~: 544260) -SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 324, μ: 617582, ~: 509231) +SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 270, μ: 634568, ~: 544260) +SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 270, μ: 588935, ~: 509229) SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 501435) -SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 324, μ: 560838, ~: 501913) +SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 270, μ: 546705, ~: 501913) SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 541756) -SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 324, μ: 652163, ~: 541637) -SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 324, μ: 722238, ~: 623072) +SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 270, μ: 653379, ~: 541971) +SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 270, μ: 720725, ~: 621110) SafeTransferLibTest:testTransferWithMissingReturn() (gas: 529238) -SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 324, μ: 625333, ~: 529600) +SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 270, μ: 618172, ~: 529603) SafeTransferLibTest:testTransferWithNonContract() (gas: 3010) -SafeTransferLibTest:testTransferWithNonContract(bytes32,address,uint256) (runs: 324, μ: 26314, ~: 26313) -SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 324, μ: 712433, ~: 585356) +SafeTransferLibTest:testTransferWithNonContract(bytes32,address,uint256) (runs: 270, μ: 26314, ~: 26313) +SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 270, μ: 683961, ~: 595210) SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 506056) -SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 324, μ: 593385, ~: 506074) +SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 270, μ: 577590, ~: 506047) SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 505624) -SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 324, μ: 591327, ~: 505998) +SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 270, μ: 568831, ~: 505971) SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 530036) -SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 324, μ: 651379, ~: 530114) -SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 324, μ: 609560, ~: 506074) +SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 270, μ: 640524, ~: 530114) +SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 270, μ: 614230, ~: 506074) SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 776897) -SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 324, μ: 625680, ~: 506010) +SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 270, μ: 644503, ~: 506010) SafeTransferLibTest:testTransferWithStandardERC20() (gas: 530095) -SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 324, μ: 636295, ~: 530050) -SafeTransferLibTest:testTrySafeTransferFrom(address,address,uint256) (runs: 324, μ: 109287, ~: 112161) +SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 270, μ: 635473, ~: 530055) +SafeTransferLibTest:testTrySafeTransferFrom(address,address,uint256) (runs: 270, μ: 108866, ~: 112161) SafeTransferLibTest:testTryTransferAllETH() (gas: 148698) SafeTransferLibTest:testTryTransferETH() (gas: 148701) SafeTransferLibTest:testTryTransferETHWithNoGrief() (gas: 537025) @@ -1265,7 +1265,7 @@ SignatureCheckerLibTest:testERC6492PreDeploy() (gas: 1227033) SignatureCheckerLibTest:testERC6492WithoutRevertingVerifier() (gas: 61874) SignatureCheckerLibTest:testEmptyCalldataHelpers() (gas: 3987) SignatureCheckerLibTest:testEtchERC6492RevertingVerifier() (gas: 56459) -SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 324, μ: 55600, ~: 45511) +SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 270, μ: 55831, ~: 45511) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSignature() (gas: 21300) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSigner() (gas: 30800) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithMatchingSignerAndSignature() (gas: 17697) @@ -1276,13 +1276,13 @@ SignatureCheckerLibTest:testSignatureCheckerOnWalletWithInvalidSigner() (gas: 25 SignatureCheckerLibTest:testSignatureCheckerOnWalletWithMatchingSignerAndSignature() (gas: 64518) SignatureCheckerLibTest:testSignatureCheckerOnWalletWithWrongSignedMessageHash() (gas: 64597) SignatureCheckerLibTest:testSignatureCheckerOnWalletWithZeroAddressSigner() (gas: 12364) -SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes) (runs: 324, μ: 1285, ~: 1284) -SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes32) (runs: 324, μ: 481, ~: 481) +SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes) (runs: 270, μ: 1284, ~: 1284) +SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes32) (runs: 270, μ: 481, ~: 481) SignatureCheckerLibTest:test__codesize() (gas: 15448) SoladyTest:test__codesize() (gas: 840) TestPlus:test__codesize() (gas: 406) -TestPlusrTest:testRandomUnique(bytes32,bytes32) (runs: 324, μ: 113692, ~: 113692) -TestPlusrTest:testRandomUniqueAddress(bytes32,bytes32) (runs: 324, μ: 113404, ~: 113371) +TestPlusrTest:testRandomUnique(bytes32,bytes32) (runs: 270, μ: 113690, ~: 113688) +TestPlusrTest:testRandomUniqueAddress(bytes32,bytes32) (runs: 270, μ: 113402, ~: 113371) TestPlusrTest:test__codesize() (gas: 2162) UUPSUpgradeableTest:testNotDelegatedGuard() (gas: 15875) UUPSUpgradeableTest:testOnlyProxyGuard() (gas: 9217) @@ -1296,7 +1296,7 @@ UUPSUpgradeableTest:testUpgradeToRevertWithUpgradeFailed() (gas: 18819) UUPSUpgradeableTest:test__codesize() (gas: 6059) UpgradeableBeaconTest:testInitializeUpgradeableSolidityBeacon() (gas: 296434) UpgradeableBeaconTest:testInitializeUpgradeableYulBeacon() (gas: 335455) -UpgradeableBeaconTest:testUpgradeableBeacon(uint256) (runs: 324, μ: 244613, ~: 255829) +UpgradeableBeaconTest:testUpgradeableBeacon(uint256) (runs: 270, μ: 246807, ~: 255860) UpgradeableBeaconTest:testUpgradeableSolidityBeaconOnlyFnSelectorNotRecognised() (gas: 234560) UpgradeableBeaconTest:testUpgradeableSolidityBeaconOnlyOwnerFunctions() (gas: 260339) UpgradeableBeaconTest:testUpgradeableYulBeaconOnlyFnSelectorNotRecognised() (gas: 172796) @@ -1305,12 +1305,12 @@ UpgradeableBeaconTest:test__codesize() (gas: 8511) WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 10, calls: 150, reverts: 83) WETHInvariants:test__codesize() (gas: 5178) WETHTest:testDeposit() (gas: 62272) -WETHTest:testDeposit(uint256) (runs: 324, μ: 61198, ~: 62566) +WETHTest:testDeposit(uint256) (runs: 270, μ: 61602, ~: 62566) WETHTest:testFallbackDeposit() (gas: 61978) -WETHTest:testFallbackDeposit(uint256) (runs: 324, μ: 60859, ~: 62227) +WETHTest:testFallbackDeposit(uint256) (runs: 270, μ: 61263, ~: 62227) WETHTest:testMetadata() (gas: 9013) WETHTest:testPartialWithdraw() (gas: 70422) WETHTest:testWithdraw() (gas: 52047) -WETHTest:testWithdraw(uint256,uint256) (runs: 324, μ: 69734, ~: 71175) +WETHTest:testWithdraw(uint256,uint256) (runs: 270, μ: 70315, ~: 71175) WETHTest:testWithdrawToContractWithoutReceiveReverts() (gas: 90164) WETHTest:test__codesize() (gas: 9410) \ No newline at end of file diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index bda89cc32..b7ca69480 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -230,6 +230,17 @@ library DynamicArrayLib { p(result, uint256(data)); } + /// @dev Remove last element of `array.data`, without bounds checking. + function pop(DynamicArray memory array) internal pure returns (uint256 result) { + /// @solidity memory-safe-assembly + assembly { + let o := mload(array) + result := mload(add(o, shl(5, mload(o)))) + // update the array.length + mstore(o, sub(mload(o), 1)) + } + } + /// @dev Returns the element at `array.data[i]`, without bounds checking. function get(DynamicArray memory array, uint256 i) internal pure returns (uint256 result) { /// @solidity memory-safe-assembly diff --git a/test/DynamicArrayLib.t.sol b/test/DynamicArrayLib.t.sol index e746eacd6..d239cc21c 100644 --- a/test/DynamicArrayLib.t.sol +++ b/test/DynamicArrayLib.t.sol @@ -7,7 +7,7 @@ import {DynamicArrayLib} from "../src/utils/DynamicArrayLib.sol"; contract DynamicArrayLibTest is SoladyTest { using DynamicArrayLib for DynamicArrayLib.DynamicArray; - function testDynamicArrayPush() public { + function testDynamicArrayPushAndPop() public { uint256 n = 100; DynamicArrayLib.DynamicArray memory a; unchecked { @@ -17,6 +17,10 @@ contract DynamicArrayLibTest is SoladyTest { for (uint256 i; i != n; ++i) { assertEq(a.get(i), i); } + for (uint256 i; i != n; ++i) { + assertEq(a.length(), 100 - i); + assertEq(a.pop(), 99 - i); + } } } @@ -34,7 +38,7 @@ contract DynamicArrayLibTest is SoladyTest { } } - function testDynamicArrayPush(uint256 n, uint256 r) public { + function testDynamicArrayPushPop(uint256 n, uint256 r) public { n = _bound(n, 0, 50); DynamicArrayLib.DynamicArray memory a; assertEq(a.data.length, 0); @@ -64,15 +68,23 @@ contract DynamicArrayLibTest is SoladyTest { a.clear(); assertEq(a.length(), 0); } else { - uint256 newLength = _bound(_random(), 0, 50); - a.resize(newLength); - assertEq(a.length(), newLength); - _checkMemory(); - for (uint256 i; i != newLength; ++i) { - if (i < n) { - assertEq(a.get(i), i ^ r); - } else { - assertEq(a.getBytes32(i), bytes32(0)); + if (_randomChance(2)) { + uint256 newLength = _bound(_random(), 0, 50); + a.resize(newLength); + assertEq(a.length(), newLength); + _checkMemory(); + for (uint256 i; i != newLength; ++i) { + if (i < n) { + assertEq(a.get(i), i ^ r); + } else { + assertEq(a.getBytes32(i), bytes32(0)); + } + } + } else { + uint256 length = a.length(); + for (uint256 i = 1; i == length; ++i) { + assertEq(a.pop(), (n - i) ^ r); + assertEq(a.length(), length - i); } } } From e30b4701438961857fe2c6bfbd5abc750ba82c2f Mon Sep 17 00:00:00 2001 From: atarpara Date: Sun, 15 Sep 2024 09:32:12 +0530 Subject: [PATCH 08/12] Added varient --- .gas-snapshot | 6 ++-- src/utils/DynamicArrayLib.sol | 58 ++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 496ceef03..a5de7e623 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -82,11 +82,11 @@ DelegateCheckerLibTest:test__codesize() (gas: 32210) DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 270, μ: 258615, ~: 224506) DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) -DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40103) +DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40211) DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65229) -DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 270, μ: 80838, ~: 78143) +DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 270, μ: 79256, ~: 76733) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11086) -DynamicArrayLibTest:test__codesize() (gas: 4024) +DynamicArrayLibTest:test__codesize() (gas: 4021) DynamicBufferLibTest:testClear(uint256) (runs: 270, μ: 34669, ~: 34768) DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 270, μ: 915414, ~: 797126) DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 270, μ: 868665, ~: 682018) diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index b7ca69480..af3d52468 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -95,7 +95,7 @@ library DynamicArrayLib { let cap := mload(add(arrData, w)) // `mload(sub(arrData, w))`. // Extract `cap`, initializing it to zero if it is not a multiple of `prime`. cap := mul(div(cap, prime), iszero(mod(cap, prime))) - let newCap := shl(5, add(1, minimum)) + let newCap := shl(5, minimum) // If we don't need to grow the memory. if iszero(gt(newCap, cap)) { break } // If the memory is contiguous, we can simply expand it. @@ -241,6 +241,62 @@ library DynamicArrayLib { } } + /// @dev Remove last element of `array.data`, without bounds checking. + function popUint256(DynamicArray memory array) + internal + pure + returns (uint256 result) + { + /// @solidity memory-safe-assembly + assembly { + let o := mload(array) + result := mload(add(o, shl(5, mload(o)))) + // update the array.length + mstore(o, sub(mload(o), 1)) + } + } + + /// @dev Remove last element of `array.data`, without bounds checking. + function popAddress(DynamicArray memory array) + internal + pure + returns (address result) + { + /// @solidity memory-safe-assembly + assembly { + let o := mload(array) + result := mload(add(o, shl(5, mload(o)))) + // update the array.length + mstore(o, sub(mload(o), 1)) + } + } + + /// @dev Remove last element of `array.data`, without bounds checking. + function popBool(DynamicArray memory array) internal pure returns (bool result) { + /// @solidity memory-safe-assembly + assembly { + let o := mload(array) + result := mload(add(o, shl(5, mload(o)))) + // update the array.length + mstore(o, sub(mload(o), 1)) + } + } + + /// @dev Remove last element of `array.data`, without bounds checking. + function popBytes32(DynamicArray memory array) + internal + pure + returns (bytes32 result) + { + /// @solidity memory-safe-assembly + assembly { + let o := mload(array) + result := mload(add(o, shl(5, mload(o)))) + // update the array.length + mstore(o, sub(mload(o), 1)) + } + } + /// @dev Returns the element at `array.data[i]`, without bounds checking. function get(DynamicArray memory array, uint256 i) internal pure returns (uint256 result) { /// @solidity memory-safe-assembly From 4bd13afd22c9b3a3b15e6f78f062176b1dfaca6d Mon Sep 17 00:00:00 2001 From: atarpara Date: Sun, 15 Sep 2024 09:36:17 +0530 Subject: [PATCH 09/12] Fmt --- src/utils/DynamicArrayLib.sol | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index af3d52468..36bb70877 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -242,11 +242,7 @@ library DynamicArrayLib { } /// @dev Remove last element of `array.data`, without bounds checking. - function popUint256(DynamicArray memory array) - internal - pure - returns (uint256 result) - { + function popUint256(DynamicArray memory array) internal pure returns (uint256 result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) @@ -257,11 +253,7 @@ library DynamicArrayLib { } /// @dev Remove last element of `array.data`, without bounds checking. - function popAddress(DynamicArray memory array) - internal - pure - returns (address result) - { + function popAddress(DynamicArray memory array) internal pure returns (address result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) @@ -283,11 +275,7 @@ library DynamicArrayLib { } /// @dev Remove last element of `array.data`, without bounds checking. - function popBytes32(DynamicArray memory array) - internal - pure - returns (bytes32 result) - { + function popBytes32(DynamicArray memory array) internal pure returns (bytes32 result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) From 1a8540d0cba13a5e6221122563bed16d6a58e58c Mon Sep 17 00:00:00 2001 From: Vectorized Date: Mon, 16 Sep 2024 07:12:23 +0000 Subject: [PATCH 10/12] Tidy and strengthen test --- .gas-snapshot | 1148 ++++++++++++++++----------------- src/utils/DynamicArrayLib.sol | 45 +- test/DynamicArrayLib.t.sol | 2 +- test/utils/Brutalizer.sol | 49 ++ 4 files changed, 649 insertions(+), 595 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index a5de7e623..c7e1a9087 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,9 +1,9 @@ Base64Test:testBase64DecodeSentenceGas() (gas: 3663) Base64Test:testBase64DecodeShortStringGas() (gas: 896) -Base64Test:testBase64EncodeDecode(bytes) (runs: 270, μ: 5968, ~: 4968) -Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 270, μ: 890077, ~: 735418) +Base64Test:testBase64EncodeDecode(bytes) (runs: 325, μ: 6052, ~: 4968) +Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 325, μ: 891079, ~: 735714) Base64Test:testBase64EncodeEmptyString() (gas: 902) -Base64Test:testBase64EncodeFileSafeAndNoPadding(bytes,bool,bool) (runs: 270, μ: 15309, ~: 14264) +Base64Test:testBase64EncodeFileSafeAndNoPadding(bytes,bool,bool) (runs: 325, μ: 15684, ~: 14264) Base64Test:testBase64EncodeSentence() (gas: 4333) Base64Test:testBase64EncodeShortStrings() (gas: 7610) Base64Test:testBase64EncodeToStringWithDoublePadding() (gas: 1553) @@ -11,91 +11,91 @@ Base64Test:testBase64EncodeToStringWithNoPadding() (gas: 1531) Base64Test:testBase64EncodeToStringWithSinglePadding() (gas: 1487) Base64Test:testBase64WordBoundary() (gas: 11624) Base64Test:test__codesize() (gas: 6841) -BrutalizerTest:testBrutalizedAddress(bytes32,address) (runs: 270, μ: 1391, ~: 1330) -BrutalizerTest:testBrutalizedBool(bytes32,bool) (runs: 270, μ: 1119, ~: 1147) -BrutalizerTest:testBrutalizedBytes1(bytes32,bytes1) (runs: 270, μ: 1478, ~: 1397) -BrutalizerTest:testBrutalizedBytes31(bytes32,bytes31) (runs: 270, μ: 1400, ~: 1336) -BrutalizerTest:testBrutalizedUint248(bytes32,uint248) (runs: 270, μ: 1359, ~: 1287) -BrutalizerTest:testBrutalizedUint8(bytes32,uint8) (runs: 270, μ: 1285, ~: 1203) +BrutalizerTest:testBrutalizedAddress(bytes32,address) (runs: 325, μ: 1386, ~: 1330) +BrutalizerTest:testBrutalizedBool(bytes32,bool) (runs: 325, μ: 1129, ~: 741) +BrutalizerTest:testBrutalizedBytes1(bytes32,bytes1) (runs: 325, μ: 1470, ~: 1397) +BrutalizerTest:testBrutalizedBytes31(bytes32,bytes31) (runs: 325, μ: 1428, ~: 1336) +BrutalizerTest:testBrutalizedUint248(bytes32,uint248) (runs: 325, μ: 1338, ~: 1287) +BrutalizerTest:testBrutalizedUint8(bytes32,uint8) (runs: 325, μ: 1285, ~: 1203) BrutalizerTest:test__codesize() (gas: 2592) CREATE3Test:testDeployERC20() (gas: 781627) -CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 270, μ: 828201, ~: 827713) +CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 325, μ: 827729, ~: 827713) CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 613) CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96898738) -CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 270, μ: 96880364, ~: 96880375) +CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 325, μ: 96880311, ~: 96880280) CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889196) -CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 270, μ: 96881073, ~: 96881007) +CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 325, μ: 96881062, ~: 96881003) CREATE3Test:test__codesize() (gas: 13862) -DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 270, μ: 4200, ~: 4209) -DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 270, μ: 4143, ~: 4155) -DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 270, μ: 4139, ~: 4129) -DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 270, μ: 7247, ~: 7257) -DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 270, μ: 3756, ~: 3721) -DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 270, μ: 6811, ~: 6822) +DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 325, μ: 4202, ~: 4209) +DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 325, μ: 4144, ~: 4155) +DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 325, μ: 4139, ~: 4129) +DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 325, μ: 7248, ~: 7257) +DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 325, μ: 3755, ~: 3721) +DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 325, μ: 6813, ~: 6822) DateTimeLibTest:testDateTimeArithmeticReverts() (gas: 4495) DateTimeLibTest:testDateTimeMaxSupported() (gas: 2823) -DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 4141, ~: 4089) -DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2562, ~: 2552) +DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 325, μ: 4134, ~: 4089) +DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 325, μ: 2562, ~: 2564) DateTimeLibTest:testDateToAndFroEpochDay() (gas: 877945) DateTimeLibTest:testDateToAndFroTimestamp() (gas: 926776) DateTimeLibTest:testDateToEpochDay() (gas: 1559) -DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2301, ~: 2299) -DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2223, ~: 2213) +DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 325, μ: 2301, ~: 2299) +DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 325, μ: 2223, ~: 2225) DateTimeLibTest:testDateToEpochDayGas() (gas: 764427) DateTimeLibTest:testDateToEpochDayGas2() (gas: 770404) DateTimeLibTest:testDayOfWeek() (gas: 175255) DateTimeLibTest:testDaysInMonth() (gas: 1226) -DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 270, μ: 1071, ~: 1084) +DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 325, μ: 1069, ~: 1084) DateTimeLibTest:testDaysToDate() (gas: 8377) -DateTimeLibTest:testEpochDayToDate(uint256) (runs: 270, μ: 1045, ~: 1045) -DateTimeLibTest:testEpochDayToDateDifferential(uint256) (runs: 270, μ: 1778, ~: 1721) -DateTimeLibTest:testEpochDayToDateDifferential2(uint256) (runs: 270, μ: 1785, ~: 1709) +DateTimeLibTest:testEpochDayToDate(uint256) (runs: 325, μ: 1045, ~: 1045) +DateTimeLibTest:testEpochDayToDateDifferential(uint256) (runs: 325, μ: 1778, ~: 1721) +DateTimeLibTest:testEpochDayToDateDifferential2(uint256) (runs: 325, μ: 1785, ~: 1709) DateTimeLibTest:testEpochDayToDateGas() (gas: 348457) DateTimeLibTest:testEpochDayToDateGas2() (gas: 360513) DateTimeLibTest:testIsLeapYear() (gas: 741) -DateTimeLibTest:testIsLeapYear(uint256) (runs: 270, μ: 538, ~: 517) +DateTimeLibTest:testIsLeapYear(uint256) (runs: 325, μ: 537, ~: 517) DateTimeLibTest:testIsSupportedDateFalse() (gas: 1180) -DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 270, μ: 2965, ~: 2949) +DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 325, μ: 2951, ~: 2949) DateTimeLibTest:testIsSupportedDateTrue() (gas: 626) DateTimeLibTest:testIsSupportedEpochDayFalse() (gas: 494) DateTimeLibTest:testIsSupportedEpochDayTrue() (gas: 305) DateTimeLibTest:testIsSupportedTimestampFalse() (gas: 541) DateTimeLibTest:testIsSupportedTimestampTrue() (gas: 326) -DateTimeLibTest:testIsWeekEnd(uint256) (runs: 270, μ: 692, ~: 617) +DateTimeLibTest:testIsWeekEnd(uint256) (runs: 325, μ: 692, ~: 617) DateTimeLibTest:testMondayTimestamp() (gas: 1106) -DateTimeLibTest:testMondayTimestamp(uint256) (runs: 270, μ: 771, ~: 836) +DateTimeLibTest:testMondayTimestamp(uint256) (runs: 325, μ: 766, ~: 836) DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp() (gas: 12053) -DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 270, μ: 3554, ~: 3576) +DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 325, μ: 3522, ~: 3576) DateTimeLibTest:testWeekday() (gas: 682) DateTimeLibTest:test__codesize() (gas: 19163) DelegateCheckerLibTest:testCheckDelegateForAll() (gas: 36319) -DelegateCheckerLibTest:testCheckDelegateForAll(address,address,bytes32) (runs: 270, μ: 231489, ~: 242286) +DelegateCheckerLibTest:testCheckDelegateForAll(address,address,bytes32) (runs: 325, μ: 232504, ~: 244939) DelegateCheckerLibTest:testCheckDelegateForContract() (gas: 55887) -DelegateCheckerLibTest:testCheckDelegateForContract(address,address,address,bytes32) (runs: 270, μ: 361198, ~: 311985) +DelegateCheckerLibTest:testCheckDelegateForContract(address,address,address,bytes32) (runs: 325, μ: 357166, ~: 313385) DelegateCheckerLibTest:testCheckDelegateForERC1155() (gas: 64282) -DelegateCheckerLibTest:testCheckDelegateForERC1155(address,address,address,uint256,bytes32) (runs: 270, μ: 286404, ~: 301708) +DelegateCheckerLibTest:testCheckDelegateForERC1155(address,address,address,uint256,bytes32) (runs: 325, μ: 300432, ~: 304734) DelegateCheckerLibTest:testCheckDelegateForERC20() (gas: 63763) -DelegateCheckerLibTest:testCheckDelegateForERC20(address,address,address,bytes32) (runs: 270, μ: 297724, ~: 282189) +DelegateCheckerLibTest:testCheckDelegateForERC20(address,address,address,bytes32) (runs: 325, μ: 306650, ~: 282758) DelegateCheckerLibTest:testCheckDelegateForERC721() (gas: 71988) -DelegateCheckerLibTest:testCheckDelegateForERC721(address,address,address,uint256,bytes32) (runs: 270, μ: 435880, ~: 406088) +DelegateCheckerLibTest:testCheckDelegateForERC721(address,address,address,uint256,bytes32) (runs: 325, μ: 428405, ~: 385026) DelegateCheckerLibTest:test__codesize() (gas: 32210) -DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 270, μ: 258615, ~: 224506) -DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 364315) +DeploylessPredeployQueryerTest:testPredeployQueryer(bytes32) (runs: 325, μ: 265289, ~: 224506) +DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 360733) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40211) -DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65229) -DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 270, μ: 79256, ~: 76733) +DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65529) +DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 325, μ: 81008, ~: 81880) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11086) -DynamicArrayLibTest:test__codesize() (gas: 4021) -DynamicBufferLibTest:testClear(uint256) (runs: 270, μ: 34669, ~: 34768) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 270, μ: 915414, ~: 797126) -DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 270, μ: 868665, ~: 682018) +DynamicArrayLibTest:test__codesize() (gas: 4131) +DynamicBufferLibTest:testClear(uint256) (runs: 325, μ: 34643, ~: 34744) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 325, μ: 920251, ~: 800445) +DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 325, μ: 852118, ~: 681461) DynamicBufferLibTest:testDynamicBufferChaining() (gas: 12667) -DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 270, μ: 197803, ~: 34428) +DynamicBufferLibTest:testDynamicBufferPushSingles(uint256,uint256,uint256) (runs: 325, μ: 196816, ~: 34593) DynamicBufferLibTest:testDynamicBufferPushSinglesReinterpretCast() (gas: 22026) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2821) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2441) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 270, μ: 2796, ~: 2047) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 325, μ: 2818, ~: 2047) DynamicBufferLibTest:testDynamicBufferShorthands() (gas: 27221) DynamicBufferLibTest:testJoinWithConcat() (gas: 31407) DynamicBufferLibTest:testJoinWithDynamicBuffer() (gas: 10830) @@ -106,15 +106,15 @@ ECDSATest:testBytesToEthSignedMessageHashEmpty() (gas: 556) ECDSATest:testBytesToEthSignedMessageHashExceedsMaxLengthReverts() (gas: 615885) ECDSATest:testBytesToEthSignedMessageHashLong() (gas: 725) ECDSATest:testBytesToEthSignedMessageHashShort() (gas: 576) -ECDSATest:testCanonicalHash(bytes32) (runs: 270, μ: 127698, ~: 38971) +ECDSATest:testCanonicalHash(bytes32) (runs: 325, μ: 149460, ~: 39253) ECDSATest:testCanonicalHashCalldataWith64bytesSignature() (gas: 1232939) ECDSATest:testCanonicalHashCalldataWithRegularSignature() (gas: 1232433) ECDSATest:testCanonicalHashWith64bytesSignature() (gas: 614272) ECDSATest:testCanonicalHashWithRegularSignature() (gas: 612711) ECDSATest:testEmptyCalldataHelpers() (gas: 3268) ECDSATest:testMalleabilityTrick() (gas: 2564) -ECDSATest:testMalleabilityTrick(uint256) (runs: 270, μ: 450, ~: 449) -ECDSATest:testRecoverAndTryRecover(bytes32) (runs: 270, μ: 2884609, ~: 2534840) +ECDSATest:testMalleabilityTrick(uint256) (runs: 325, μ: 450, ~: 449) +ECDSATest:testRecoverAndTryRecover(bytes32) (runs: 325, μ: 2961311, ~: 2535167) ECDSATest:testRecoverWithInvalidLongSignatureReverts() (gas: 7395) ECDSATest:testRecoverWithInvalidShortSignatureReturnsZero() (gas: 7231) ECDSATest:testRecoverWithInvalidSignatureReverts() (gas: 8018) @@ -164,60 +164,60 @@ EIP712Test:testHashTypedDataWithChaindIdChange() (gas: 45554) EIP712Test:test__codesize() (gas: 11394) ERC1155HooksTest:testERC1155Hooks() (gas: 4543936) ERC1155HooksTest:test__codesize() (gas: 11851) -ERC1155Test:testApproveAll(address,bool) (runs: 270, μ: 49361, ~: 58445) -ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 270, μ: 715, ~: 715) -ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 270, μ: 32133, ~: 34895) -ERC1155Test:testBatchBalanceOf(uint256) (runs: 270, μ: 167142, ~: 172999) -ERC1155Test:testBatchBurn(uint256) (runs: 270, μ: 227033, ~: 208633) -ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 270, μ: 230912, ~: 210514) -ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 270, μ: 55569, ~: 55063) -ERC1155Test:testBatchMintToEOA(uint256) (runs: 270, μ: 171705, ~: 173057) -ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 270, μ: 1037386, ~: 770381) -ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 270, μ: 194500, ~: 186389) -ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 367175, ~: 367061) -ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 322165, ~: 287957) -ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 270, μ: 96427, ~: 83761) -ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 270, μ: 46614, ~: 35998) -ERC1155Test:testBurn(uint256) (runs: 270, μ: 145359, ~: 126893) -ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 270, μ: 144910, ~: 129715) -ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 270, μ: 25637, ~: 16060) -ERC1155Test:testMintToEOA(uint256) (runs: 270, μ: 115610, ~: 103632) -ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 270, μ: 984383, ~: 683266) -ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 270, μ: 118375, ~: 103741) -ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 270, μ: 308287, ~: 284250) -ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 270, μ: 252182, ~: 238810) -ERC1155Test:testMintToZeroReverts(uint256) (runs: 270, μ: 51610, ~: 33639) +ERC1155Test:testApproveAll(address,bool) (runs: 325, μ: 49296, ~: 58445) +ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 325, μ: 715, ~: 715) +ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 325, μ: 31888, ~: 34870) +ERC1155Test:testBatchBalanceOf(uint256) (runs: 325, μ: 171839, ~: 173179) +ERC1155Test:testBatchBurn(uint256) (runs: 325, μ: 214444, ~: 196431) +ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 325, μ: 226633, ~: 212506) +ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 325, μ: 55338, ~: 54920) +ERC1155Test:testBatchMintToEOA(uint256) (runs: 325, μ: 181586, ~: 173406) +ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 325, μ: 1260669, ~: 825373) +ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 325, μ: 190651, ~: 186493) +ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 325, μ: 368844, ~: 367035) +ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 325, μ: 316034, ~: 288466) +ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 325, μ: 104738, ~: 90924) +ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 325, μ: 45513, ~: 35996) +ERC1155Test:testBurn(uint256) (runs: 325, μ: 138616, ~: 126884) +ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 325, μ: 146600, ~: 129409) +ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 325, μ: 25485, ~: 16060) +ERC1155Test:testMintToEOA(uint256) (runs: 325, μ: 124617, ~: 104307) +ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 325, μ: 1125929, ~: 681479) +ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 325, μ: 117326, ~: 103762) +ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 325, μ: 308108, ~: 284222) +ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 325, μ: 256696, ~: 238868) +ERC1155Test:testMintToZeroReverts(uint256) (runs: 325, μ: 52988, ~: 33629) ERC1155Test:testSafeBatchTransfer() (gas: 8332973) -ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 270, μ: 274991, ~: 235495) -ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 270, μ: 2299702, ~: 1010463) -ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 270, μ: 299883, ~: 293514) -ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 475680, ~: 471769) -ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 443795, ~: 429355) -ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 270, μ: 224067, ~: 197730) -ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 270, μ: 73916, ~: 68197) -ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 270, μ: 249306, ~: 214357) -ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 270, μ: 155546, ~: 132140) -ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 270, μ: 175693, ~: 140778) -ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 270, μ: 156773, ~: 104365) -ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 270, μ: 184733, ~: 154433) -ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 270, μ: 1502732, ~: 764430) -ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 270, μ: 205375, ~: 173840) -ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 270, μ: 379501, ~: 354738) -ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 270, μ: 344899, ~: 309688) -ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 270, μ: 136674, ~: 103723) +ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 325, μ: 281316, ~: 271444) +ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 325, μ: 2454522, ~: 1000967) +ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 325, μ: 301432, ~: 293030) +ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 325, μ: 473695, ~: 471681) +ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 325, μ: 446844, ~: 429391) +ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 325, μ: 209462, ~: 196736) +ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 325, μ: 74450, ~: 68114) +ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 325, μ: 243097, ~: 217578) +ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 325, μ: 166584, ~: 132467) +ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 325, μ: 176306, ~: 141470) +ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 325, μ: 145224, ~: 104064) +ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 325, μ: 176681, ~: 148556) +ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 325, μ: 1645097, ~: 765501) +ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 325, μ: 200221, ~: 173892) +ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 325, μ: 382077, ~: 354582) +ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 325, μ: 346313, ~: 309715) +ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 325, μ: 132503, ~: 103787) ERC1155Test:test__codesize() (gas: 42015) ERC1271Test:testBasefeeBytecodeContract() (gas: 45430) ERC1271Test:testIsValidSignature() (gas: 2390984) -ERC1271Test:testIsValidSignature(uint256) (runs: 270, μ: 249744, ~: 211135) +ERC1271Test:testIsValidSignature(uint256) (runs: 325, μ: 243569, ~: 210953) ERC1271Test:testSupportsNestedTypedDataSign() (gas: 165249) ERC1271Test:test__codesize() (gas: 29885) ERC1967FactoryTest:testChangeAdmin() (gas: 266261) ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257261) ERC1967FactoryTest:testDeploy() (gas: 257129) -ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 270, μ: 340356, ~: 340860) +ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 325, μ: 340295, ~: 340857) ERC1967FactoryTest:testDeployAndCallWithRevert() (gas: 211629) -ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 270, μ: 95173, ~: 43744) -ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 270, μ: 319940, ~: 349807) +ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 325, μ: 96673, ~: 43744) +ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 325, μ: 319926, ~: 349808) ERC1967FactoryTest:testFactoryDeployment() (gas: 494423) ERC1967FactoryTest:testProxyFails() (gas: 258426) ERC1967FactoryTest:testProxySucceeds() (gas: 255451) @@ -227,48 +227,48 @@ ERC1967FactoryTest:testUpgradeAndCallWithRevert() (gas: 265384) ERC1967FactoryTest:testUpgradeUnauthorized() (gas: 270073) ERC1967FactoryTest:testUpgradeWithCorruptedProxy() (gas: 263056) ERC1967FactoryTest:test__codesize() (gas: 32273) -ERC20Invariants:invariantBalanceSum() (runs: 10, calls: 150, reverts: 84) +ERC20Invariants:invariantBalanceSum() (runs: 10, calls: 150, reverts: 85) ERC20Invariants:test__codesize() (gas: 7280) ERC20Test:testApprove() (gas: 35730) -ERC20Test:testApprove(address,uint256) (runs: 270, μ: 31107, ~: 31181) +ERC20Test:testApprove(address,uint256) (runs: 325, μ: 31058, ~: 31181) ERC20Test:testBurn() (gas: 62424) -ERC20Test:testBurn(address,uint256,uint256) (runs: 270, μ: 62576, ~: 63044) -ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 56674, ~: 56954) -ERC20Test:testDirectSpendAllowance(uint256) (runs: 270, μ: 61820, ~: 61604) -ERC20Test:testDirectTransfer(uint256) (runs: 270, μ: 99055, ~: 86728) +ERC20Test:testBurn(address,uint256,uint256) (runs: 325, μ: 62385, ~: 63044) +ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 325, μ: 56605, ~: 56959) +ERC20Test:testDirectSpendAllowance(uint256) (runs: 325, μ: 61776, ~: 61527) +ERC20Test:testDirectTransfer(uint256) (runs: 325, μ: 100021, ~: 112559) ERC20Test:testInfiniteApproveTransferFrom() (gas: 90855) ERC20Test:testMetadata() (gas: 16516) ERC20Test:testMint() (gas: 58888) -ERC20Test:testMint(address,uint256) (runs: 270, μ: 58984, ~: 59131) +ERC20Test:testMint(address,uint256) (runs: 325, μ: 58886, ~: 59131) ERC20Test:testMintOverMaxUintReverts() (gas: 56350) ERC20Test:testPermit() (gas: 89369) -ERC20Test:testPermit(uint256) (runs: 270, μ: 89458, ~: 89460) -ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 270, μ: 41230, ~: 41229) -ERC20Test:testPermitBadNonceReverts(uint256) (runs: 270, μ: 41652, ~: 41626) -ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 270, μ: 35767, ~: 35757) -ERC20Test:testPermitReplayReverts(uint256) (runs: 270, μ: 92098, ~: 92166) +ERC20Test:testPermit(uint256) (runs: 325, μ: 89463, ~: 89461) +ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 325, μ: 41223, ~: 41222) +ERC20Test:testPermitBadNonceReverts(uint256) (runs: 325, μ: 41654, ~: 41626) +ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 325, μ: 35757, ~: 35752) +ERC20Test:testPermitReplayReverts(uint256) (runs: 325, μ: 92166, ~: 92166) ERC20Test:testTransfer() (gas: 65884) -ERC20Test:testTransfer(address,uint256) (runs: 270, μ: 65942, ~: 66100) +ERC20Test:testTransfer(address,uint256) (runs: 325, μ: 65856, ~: 66100) ERC20Test:testTransferFrom() (gas: 86323) -ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 270, μ: 93486, ~: 95625) +ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 325, μ: 93240, ~: 95625) ERC20Test:testTransferFromInsufficientAllowanceReverts() (gas: 82333) -ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 270, μ: 82715, ~: 82848) +ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 325, μ: 82683, ~: 82853) ERC20Test:testTransferFromInsufficientBalanceReverts() (gas: 62681) -ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 63420, ~: 63283) +ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 325, μ: 63362, ~: 63288) ERC20Test:testTransferInsufficientBalanceReverts() (gas: 56494) -ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 270, μ: 56732, ~: 57013) +ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 325, μ: 56664, ~: 57018) ERC20Test:test__codesize() (gas: 22610) -ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 270, μ: 480, ~: 480) -ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 270, μ: 108726, ~: 105308) +ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 325, μ: 479, ~: 480) +ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 325, μ: 108830, ~: 105330) ERC2981Test:test__codesize() (gas: 7229) ERC4337FactoryTest:testCreateAccountRepeatedDeployment() (gas: 149753) -ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 270, μ: 171340, ~: 171396) -ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 270, μ: 130710, ~: 139605) +ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 325, μ: 171336, ~: 171396) +ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 325, μ: 131303, ~: 139611) ERC4337FactoryTest:test__codesize() (gas: 13117) ERC4337Test:testCdFallback() (gas: 438041) ERC4337Test:testCdFallback2() (gas: 1135303) ERC4337Test:testDelegateExecute() (gas: 366407) -ERC4337Test:testDelegateExecute(uint256) (runs: 270, μ: 355115, ~: 345250) +ERC4337Test:testDelegateExecute(uint256) (runs: 325, μ: 356076, ~: 345250) ERC4337Test:testDelegateExecuteRevertsIfOwnerSlotValueChanged() (gas: 320067) ERC4337Test:testDepositFunctions() (gas: 497221) ERC4337Test:testDirectStorage() (gas: 70503) @@ -276,10 +276,10 @@ ERC4337Test:testDisableInitializerForImplementation() (gas: 1348481) ERC4337Test:testETHReceived() (gas: 16584) ERC4337Test:testExecute() (gas: 383460) ERC4337Test:testExecuteBatch() (gas: 694187) -ERC4337Test:testExecuteBatch(uint256) (runs: 270, μ: 519742, ~: 369238) +ERC4337Test:testExecuteBatch(uint256) (runs: 325, μ: 543011, ~: 670561) ERC4337Test:testInitializer() (gas: 285469) ERC4337Test:testIsValidSignature() (gas: 120476) -ERC4337Test:testIsValidSignaturePersonalSign(bytes32) (runs: 270, μ: 103730, ~: 103599) +ERC4337Test:testIsValidSignaturePersonalSign(bytes32) (runs: 325, μ: 103742, ~: 103879) ERC4337Test:testIsValidSignatureViaRPC() (gas: 96881551) ERC4337Test:testIsValidSignatureWrapped() (gas: 446377) ERC4337Test:testOnERC1155BatchReceived() (gas: 1467437) @@ -290,15 +290,15 @@ ERC4337Test:testValidateUserOp() (gas: 484693) ERC4337Test:test__codesize() (gas: 55947) ERC4626Test:testDepositWithNoApprovalReverts() (gas: 16954) ERC4626Test:testDepositWithNotEnoughApprovalReverts() (gas: 90752) -ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 270, μ: 3315, ~: 3319) +ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 325, μ: 3321, ~: 3319) ERC4626Test:testMetadata() (gas: 14354) ERC4626Test:testMintWithNoApprovalReverts() (gas: 16928) ERC4626Test:testMintZero() (gas: 53930) ERC4626Test:testMultipleMintDepositRedeemWithdraw() (gas: 412871) ERC4626Test:testRedeemWithNoShareAmountReverts() (gas: 10918) ERC4626Test:testRedeemWithNotEnoughShareAmountReverts() (gas: 143777) -ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 270, μ: 202557, ~: 202561) -ERC4626Test:testSingleMintRedeem(uint128) (runs: 270, μ: 201522, ~: 201527) +ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 325, μ: 202556, ~: 202561) +ERC4626Test:testSingleMintRedeem(uint128) (runs: 325, μ: 201522, ~: 201527) ERC4626Test:testTryGetAssetDecimals() (gas: 30700474) ERC4626Test:testUseVirtualShares() (gas: 2428448) ERC4626Test:testVaultInteractionsForSomeoneElse() (gas: 297836) @@ -309,156 +309,156 @@ ERC4626Test:testWithdrawZero() (gas: 52056) ERC4626Test:test__codesize() (gas: 36907) ERC6551Test:testBaseFeeMini() (gas: 39514) ERC6551Test:testCdFallback() (gas: 895614) -ERC6551Test:testDeployERC6551(uint256) (runs: 270, μ: 170383, ~: 168569) +ERC6551Test:testDeployERC6551(uint256) (runs: 325, μ: 170343, ~: 168569) ERC6551Test:testDeployERC6551Proxy() (gas: 80395) ERC6551Test:testExecute() (gas: 507328) ERC6551Test:testExecuteBatch() (gas: 817415) -ERC6551Test:testExecuteBatch(uint256) (runs: 270, μ: 652920, ~: 768710) +ERC6551Test:testExecuteBatch(uint256) (runs: 325, μ: 647074, ~: 768527) ERC6551Test:testInitializeERC6551ProxyImplementation() (gas: 189976) -ERC6551Test:testIsValidSigner(address) (runs: 270, μ: 167327, ~: 167320) +ERC6551Test:testIsValidSigner(address) (runs: 325, μ: 167339, ~: 167320) ERC6551Test:testOnERC1155BatchReceived() (gas: 1602799) ERC6551Test:testOnERC1155Received() (gas: 1600016) ERC6551Test:testOnERC721Received() (gas: 1523963) ERC6551Test:testOnERC721ReceivedCycles() (gas: 2975498) -ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 270, μ: 452828, ~: 457602) -ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 270, μ: 1386667, ~: 1386683) +ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 325, μ: 452776, ~: 457628) +ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 325, μ: 1386673, ~: 1386687) ERC6551Test:testSupportsInterface() (gas: 168994) -ERC6551Test:testUpdateState(uint256) (runs: 270, μ: 234749, ~: 234661) +ERC6551Test:testUpdateState(uint256) (runs: 325, μ: 234717, ~: 234656) ERC6551Test:testUpgrade() (gas: 248410) ERC6551Test:test__codesize() (gas: 50997) ERC6909Test:testApprove() (gas: 37066) -ERC6909Test:testApprove(address,uint256,uint256) (runs: 270, μ: 37634, ~: 37708) +ERC6909Test:testApprove(address,uint256,uint256) (runs: 325, μ: 37586, ~: 37708) ERC6909Test:testBurn() (gas: 41275) -ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 270, μ: 41089, ~: 41786) -ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35494, ~: 35627) +ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 325, μ: 41120, ~: 41786) +ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 325, μ: 35456, ~: 35627) ERC6909Test:testDecimals() (gas: 5676) ERC6909Test:testDirectApprove() (gas: 36737) -ERC6909Test:testDirectFunctions(uint256) (runs: 270, μ: 200110, ~: 202195) +ERC6909Test:testDirectFunctions(uint256) (runs: 325, μ: 201110, ~: 202157) ERC6909Test:testDirectSetOperator() (gas: 35937) ERC6909Test:testDirectTransfer() (gas: 67044) ERC6909Test:testInfiniteApproveTransferFrom() (gas: 79389) -ERC6909Test:testMetadata(uint256) (runs: 270, μ: 8257, ~: 8257) +ERC6909Test:testMetadata(uint256) (runs: 325, μ: 8257, ~: 8257) ERC6909Test:testMint() (gas: 37240) -ERC6909Test:testMint(address,uint256,uint256) (runs: 270, μ: 37397, ~: 37471) +ERC6909Test:testMint(address,uint256,uint256) (runs: 325, μ: 37349, ~: 37471) ERC6909Test:testMintOverMaxUintReverts() (gas: 35009) -ERC6909Test:testMintOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35914, ~: 35928) +ERC6909Test:testMintOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 325, μ: 35915, ~: 35928) ERC6909Test:testOperatorTransferFrom() (gas: 74717) ERC6909Test:testSetOperator() (gas: 37321) -ERC6909Test:testSetOperator(address,address,bool) (runs: 270, μ: 26348, ~: 16767) +ERC6909Test:testSetOperator(address,address,bool) (runs: 325, μ: 26196, ~: 16767) ERC6909Test:testTokenURI() (gas: 32876) ERC6909Test:testTransfer() (gas: 48585) -ERC6909Test:testTransfer(address,uint256,uint256) (runs: 270, μ: 47639, ~: 47713) +ERC6909Test:testTransfer(address,uint256,uint256) (runs: 325, μ: 47580, ~: 47707) ERC6909Test:testTransferFrom() (gas: 75316) -ERC6909Test:testTransferFrom(address,address,address,uint256,uint256,uint256) (runs: 270, μ: 80855, ~: 81977) -ERC6909Test:testTransferFromCallerIsNotOperator(address,uint256,uint256) (runs: 270, μ: 40214, ~: 40212) -ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 68058, ~: 68609) +ERC6909Test:testTransferFrom(address,address,address,uint256,uint256,uint256) (runs: 325, μ: 80717, ~: 81977) +ERC6909Test:testTransferFromCallerIsNotOperator(address,uint256,uint256) (runs: 325, μ: 40214, ~: 40212) +ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 325, μ: 68035, ~: 68581) ERC6909Test:testTransferFromInsufficientBalanceReverts() (gas: 50505) -ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 51253, ~: 50737) +ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 325, μ: 51168, ~: 50733) ERC6909Test:testTransferFromInsufficientPermission() (gas: 68051) ERC6909Test:testTransferFromOverMaxUintReverts() (gas: 91617) -ERC6909Test:testTransferFromOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 114588, ~: 114873) +ERC6909Test:testTransferFromOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 325, μ: 114637, ~: 114872) ERC6909Test:testTransferInsufficientBalanceReverts() (gas: 35133) -ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 270, μ: 35303, ~: 35731) +ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 325, μ: 35316, ~: 35731) ERC6909Test:testTransferOverMaxUintReverts() (gas: 64388) -ERC6909Test:testTransferOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 270, μ: 64943, ~: 64932) +ERC6909Test:testTransferOverMaxUintReverts(address,uint256,uint256,uint256) (runs: 325, μ: 64941, ~: 64930) ERC6909Test:test__codesize() (gas: 25622) ERC721HooksTest:testERC721Hooks() (gas: 3012871) ERC721HooksTest:test__codesize() (gas: 9998) -ERC721Test:testApprove(uint256) (runs: 270, μ: 108330, ~: 108049) -ERC721Test:testApproveAll(uint256) (runs: 270, μ: 50041, ~: 40395) -ERC721Test:testApproveBurn(uint256) (runs: 270, μ: 86754, ~: 86534) -ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 270, μ: 33663, ~: 33671) -ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 270, μ: 83370, ~: 82391) -ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 270, μ: 684, ~: 678) -ERC721Test:testAux(uint256) (runs: 270, μ: 194563, ~: 193252) -ERC721Test:testBurn(uint256) (runs: 270, μ: 81205, ~: 69038) -ERC721Test:testBurnNonExistentReverts(uint256) (runs: 270, μ: 10805, ~: 10805) +ERC721Test:testApprove(uint256) (runs: 325, μ: 108332, ~: 108051) +ERC721Test:testApproveAll(uint256) (runs: 325, μ: 50094, ~: 40395) +ERC721Test:testApproveBurn(uint256) (runs: 325, μ: 86731, ~: 86518) +ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 325, μ: 33663, ~: 33671) +ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 325, μ: 83397, ~: 82395) +ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 325, μ: 684, ~: 678) +ERC721Test:testAux(uint256) (runs: 325, μ: 194483, ~: 193020) +ERC721Test:testBurn(uint256) (runs: 325, μ: 80875, ~: 69037) +ERC721Test:testBurnNonExistentReverts(uint256) (runs: 325, μ: 10805, ~: 10805) ERC721Test:testCannotExceedMaxBalance() (gas: 172230) -ERC721Test:testDoubleBurnReverts(uint256) (runs: 270, μ: 63632, ~: 63642) -ERC721Test:testDoubleMintReverts(uint256) (runs: 270, μ: 79490, ~: 79501) -ERC721Test:testEverything(uint256) (runs: 270, μ: 289843, ~: 304199) -ERC721Test:testExtraData(uint256) (runs: 270, μ: 99376, ~: 99396) -ERC721Test:testExtraData2(uint256,uint256) (runs: 270, μ: 53889, ~: 53889) -ERC721Test:testIsApprovedOrOwner(uint256) (runs: 270, μ: 137688, ~: 137729) -ERC721Test:testMint(uint256) (runs: 270, μ: 82798, ~: 82758) -ERC721Test:testMintAndSetExtraDataUnchecked(uint256) (runs: 270, μ: 84626, ~: 84652) -ERC721Test:testMintAndSetExtraDataUncheckedWithOverwrite(uint256,uint96) (runs: 270, μ: 84081, ~: 84075) -ERC721Test:testMintToZeroReverts(uint256) (runs: 270, μ: 40108, ~: 40107) -ERC721Test:testOwnerOfNonExistent(uint256) (runs: 270, μ: 33174, ~: 33185) -ERC721Test:testSafeMintToEOA(uint256) (runs: 270, μ: 83313, ~: 83398) -ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 270, μ: 409719, ~: 409920) -ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 270, μ: 460683, ~: 453884) -ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 270, μ: 170595, ~: 170595) -ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 270, μ: 171833, ~: 171784) -ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 270, μ: 100695, ~: 100695) -ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 101966, ~: 101916) -ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 270, μ: 203531, ~: 203531) -ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 204790, ~: 204741) -ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 270, μ: 122695, ~: 122723) -ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 270, μ: 472182, ~: 472478) -ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 270, μ: 523247, ~: 516475) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 270, μ: 202268, ~: 202152) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 270, μ: 203691, ~: 203695) -ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 270, μ: 132381, ~: 132383) -ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 133815, ~: 133898) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 270, μ: 235231, ~: 235110) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 270, μ: 236568, ~: 236581) -ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 270, μ: 713, ~: 713) +ERC721Test:testDoubleBurnReverts(uint256) (runs: 325, μ: 63632, ~: 63642) +ERC721Test:testDoubleMintReverts(uint256) (runs: 325, μ: 79489, ~: 79501) +ERC721Test:testEverything(uint256) (runs: 325, μ: 294713, ~: 304978) +ERC721Test:testExtraData(uint256) (runs: 325, μ: 99354, ~: 99380) +ERC721Test:testExtraData2(uint256,uint256) (runs: 325, μ: 53958, ~: 53889) +ERC721Test:testIsApprovedOrOwner(uint256) (runs: 325, μ: 137665, ~: 137711) +ERC721Test:testMint(uint256) (runs: 325, μ: 82799, ~: 82758) +ERC721Test:testMintAndSetExtraDataUnchecked(uint256) (runs: 325, μ: 84625, ~: 84716) +ERC721Test:testMintAndSetExtraDataUncheckedWithOverwrite(uint256,uint96) (runs: 325, μ: 84081, ~: 84075) +ERC721Test:testMintToZeroReverts(uint256) (runs: 325, μ: 40108, ~: 40107) +ERC721Test:testOwnerOfNonExistent(uint256) (runs: 325, μ: 33174, ~: 33185) +ERC721Test:testSafeMintToEOA(uint256) (runs: 325, μ: 83313, ~: 83398) +ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 325, μ: 409524, ~: 409920) +ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 325, μ: 459714, ~: 453884) +ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 325, μ: 170595, ~: 170595) +ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 325, μ: 171833, ~: 171784) +ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 325, μ: 100695, ~: 100695) +ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 325, μ: 101965, ~: 101916) +ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 325, μ: 203531, ~: 203531) +ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 325, μ: 204790, ~: 204741) +ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 325, μ: 122710, ~: 122723) +ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 325, μ: 471983, ~: 472466) +ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 325, μ: 522268, ~: 516375) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 325, μ: 202270, ~: 202152) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 325, μ: 203686, ~: 203695) +ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 325, μ: 132392, ~: 132511) +ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 325, μ: 133807, ~: 133895) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 325, μ: 235227, ~: 235106) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 325, μ: 236572, ~: 236581) +ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 325, μ: 782, ~: 713) ERC721Test:testTransferFrom() (gas: 86352) -ERC721Test:testTransferFrom(uint256) (runs: 270, μ: 114280, ~: 113177) -ERC721Test:testTransferFromApproveAll(uint256) (runs: 270, μ: 119769, ~: 119766) -ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 270, μ: 34545, ~: 34353) -ERC721Test:testTransferFromNotOwner(uint256) (runs: 270, μ: 85251, ~: 85295) -ERC721Test:testTransferFromSelf(uint256) (runs: 270, μ: 93026, ~: 93066) -ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 270, μ: 63445, ~: 63319) -ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 270, μ: 80998, ~: 81161) +ERC721Test:testTransferFrom(uint256) (runs: 325, μ: 114056, ~: 113170) +ERC721Test:testTransferFromApproveAll(uint256) (runs: 325, μ: 119781, ~: 119768) +ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 325, μ: 34547, ~: 34353) +ERC721Test:testTransferFromNotOwner(uint256) (runs: 325, μ: 85244, ~: 85091) +ERC721Test:testTransferFromSelf(uint256) (runs: 325, μ: 93019, ~: 93066) +ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 325, μ: 63449, ~: 63319) +ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 325, μ: 80996, ~: 81161) ERC721Test:test__codesize() (gas: 42126) EfficientHashLibTest:testEfficientHash() (gas: 8084) -EfficientHashLibTest:testEfficientHash(uint256) (runs: 270, μ: 8133, ~: 8133) +EfficientHashLibTest:testEfficientHash(uint256) (runs: 325, μ: 8133, ~: 8133) EfficientHashLibTest:testEfficientHashBytesSlice() (gas: 26774) -EfficientHashLibTest:testEfficientHashBytesSlice(bytes32,bytes) (runs: 270, μ: 26301, ~: 26250) +EfficientHashLibTest:testEfficientHashBytesSlice(bytes32,bytes) (runs: 325, μ: 26317, ~: 26327) EfficientHashLibTest:testEfficientHashFree() (gas: 350) -EfficientHashLibTest:testEfficientHashFree(uint8,bool,uint8) (runs: 270, μ: 1018, ~: 866) +EfficientHashLibTest:testEfficientHashFree(uint8,bool,uint8) (runs: 325, μ: 1016, ~: 952) EfficientHashLibTest:testEfficientHashSet() (gas: 2283) EfficientHashLibTest:testEfficientHashUints() (gas: 6636) EfficientHashLibTest:test__codesize() (gas: 6357) EnumerableSetLibTest:testEnumerableAddressSetBasic() (gas: 248436) EnumerableSetLibTest:testEnumerableAddressSetBasic2() (gas: 175344) EnumerableSetLibTest:testEnumerableAddressSetNoStorageCollision() (gas: 98950) -EnumerableSetLibTest:testEnumerableAddressSetRevertsOnSentinel(uint256) (runs: 270, μ: 47406, ~: 38278) +EnumerableSetLibTest:testEnumerableAddressSetRevertsOnSentinel(uint256) (runs: 325, μ: 49021, ~: 39039) EnumerableSetLibTest:testEnumerableBytes32SetBasic() (gas: 271282) EnumerableSetLibTest:testEnumerableBytes32SetBasic2() (gas: 178471) EnumerableSetLibTest:testEnumerableBytes32SetNoStorageCollision() (gas: 103477) -EnumerableSetLibTest:testEnumerableBytes32SetRevertsOnSentinel(uint256) (runs: 270, μ: 51256, ~: 49299) -EnumerableSetLibTest:testEnumerableSetFuzz(uint256) (runs: 270, μ: 658586, ~: 515840) +EnumerableSetLibTest:testEnumerableBytes32SetRevertsOnSentinel(uint256) (runs: 325, μ: 50628, ~: 49215) +EnumerableSetLibTest:testEnumerableSetFuzz(uint256) (runs: 325, μ: 651293, ~: 515283) EnumerableSetLibTest:test__codesize() (gas: 14232) FixedPointMathLibTest:testAbs() (gas: 723) -FixedPointMathLibTest:testAbs(int256) (runs: 270, μ: 511, ~: 479) +FixedPointMathLibTest:testAbs(int256) (runs: 325, μ: 510, ~: 479) FixedPointMathLibTest:testAbsEdgeCases() (gas: 513) FixedPointMathLibTest:testAvg() (gas: 442) FixedPointMathLibTest:testAvgEdgeCase() (gas: 492) FixedPointMathLibTest:testAvgSigned() (gas: 923) FixedPointMathLibTest:testCbrt() (gas: 10283) -FixedPointMathLibTest:testCbrt(uint256) (runs: 270, μ: 1522, ~: 1535) -FixedPointMathLibTest:testCbrtBack(uint256) (runs: 270, μ: 34067, ~: 42315) +FixedPointMathLibTest:testCbrt(uint256) (runs: 325, μ: 1523, ~: 1535) +FixedPointMathLibTest:testCbrtBack(uint256) (runs: 325, μ: 34297, ~: 42315) FixedPointMathLibTest:testCbrtWad() (gas: 12050) -FixedPointMathLibTest:testCbrtWad(uint256) (runs: 270, μ: 2157, ~: 1973) +FixedPointMathLibTest:testCbrtWad(uint256) (runs: 325, μ: 2152, ~: 1973) FixedPointMathLibTest:testCbrtWadConverged() (gas: 2682) -FixedPointMathLibTest:testCbrtWadConverged(uint256) (runs: 270, μ: 2179, ~: 2232) +FixedPointMathLibTest:testCbrtWadConverged(uint256) (runs: 325, μ: 2179, ~: 2232) FixedPointMathLibTest:testCbrtWadDebug() (gas: 7360) FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing() (gas: 4227) -FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 270, μ: 3087, ~: 2977) -FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 270, μ: 547, ~: 546) -FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 270, μ: 611, ~: 611) +FixedPointMathLibTest:testCbrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 325, μ: 3130, ~: 2977) +FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 325, μ: 547, ~: 546) +FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 325, μ: 611, ~: 611) FixedPointMathLibTest:testDist() (gas: 615) -FixedPointMathLibTest:testDist(int256,int256) (runs: 270, μ: 512, ~: 517) -FixedPointMathLibTest:testDist(uint256,uint256) (runs: 270, μ: 511, ~: 516) +FixedPointMathLibTest:testDist(int256,int256) (runs: 325, μ: 511, ~: 507) +FixedPointMathLibTest:testDist(uint256,uint256) (runs: 325, μ: 510, ~: 506) FixedPointMathLibTest:testDistEdgeCases() (gas: 505) FixedPointMathLibTest:testDivWad() (gas: 692) -FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 270, μ: 25643, ~: 24703) +FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 325, μ: 25652, ~: 24703) FixedPointMathLibTest:testDivWadEdgeCases() (gas: 447) FixedPointMathLibTest:testDivWadUp() (gas: 2942) -FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 270, μ: 25647, ~: 24799) +FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 325, μ: 25600, ~: 24799) FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 428) FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts() (gas: 3196) FixedPointMathLibTest:testDivWadZeroDenominatorReverts() (gas: 3218) @@ -466,124 +466,124 @@ FixedPointMathLibTest:testExpWad() (gas: 8047) FixedPointMathLibTest:testFactorial() (gas: 98436) FixedPointMathLibTest:testFactorialOriginal() (gas: 94187) FixedPointMathLibTest:testFullMulDiv() (gas: 1127) -FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 270, μ: 1342, ~: 946) -FixedPointMathLibTest:testFullMulDivAlwaysRevertsIfDivisorIsZero(uint256,uint256) (runs: 270, μ: 3422, ~: 3422) +FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 325, μ: 1358, ~: 946) +FixedPointMathLibTest:testFullMulDivAlwaysRevertsIfDivisorIsZero(uint256,uint256) (runs: 325, μ: 3422, ~: 3422) FixedPointMathLibTest:testFullMulDivUnchecked() (gas: 1591) -FixedPointMathLibTest:testFullMulDivUnchecked(uint256,uint256,uint256) (runs: 270, μ: 1655, ~: 1554) -FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 270, μ: 1744, ~: 1423) +FixedPointMathLibTest:testFullMulDivUnchecked(uint256,uint256,uint256) (runs: 325, μ: 1656, ~: 1554) +FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 325, μ: 1750, ~: 1423) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3683) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase2() (gas: 3716) FixedPointMathLibTest:testGcd() (gas: 4206) -FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 270, μ: 6878, ~: 2800) -FixedPointMathLibTest:testIsEven(uint256) (runs: 270, μ: 497, ~: 497) +FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 325, μ: 6601, ~: 2985) +FixedPointMathLibTest:testIsEven(uint256) (runs: 325, μ: 497, ~: 497) FixedPointMathLibTest:testLambertW0WadAccuracy() (gas: 7160) -FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 270, μ: 2340, ~: 431) +FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 325, μ: 2340, ~: 431) FixedPointMathLibTest:testLambertW0WadKnownValues() (gas: 1685626) FixedPointMathLibTest:testLambertW0WadMonoDebug() (gas: 770667) FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing() (gas: 18416509) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 270, μ: 7214, ~: 6955) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 325, μ: 7271, ~: 6984) FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing2() (gas: 4035368) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 270, μ: 28818, ~: 35493) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 270, μ: 24944, ~: 17618) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 325, μ: 28920, ~: 35493) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 325, μ: 36945, ~: 17618) FixedPointMathLibTest:testLambertW0WadRevertsForOutOfDomain() (gas: 16530) FixedPointMathLibTest:testLambertW0WadWithinBounds() (gas: 122039) -FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 270, μ: 3610, ~: 4985) +FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 325, μ: 3658, ~: 4985) FixedPointMathLibTest:testLerpInt() (gas: 6439) -FixedPointMathLibTest:testLerpInt(int256,int256,int256,int256,int256) (runs: 270, μ: 1613, ~: 1176) +FixedPointMathLibTest:testLerpInt(int256,int256,int256,int256,int256) (runs: 325, μ: 1630, ~: 1176) FixedPointMathLibTest:testLerpUint() (gas: 6398) -FixedPointMathLibTest:testLerpUint(uint256,uint256,uint256,uint256,uint256) (runs: 270, μ: 1127, ~: 841) +FixedPointMathLibTest:testLerpUint(uint256,uint256,uint256,uint256,uint256) (runs: 325, μ: 1155, ~: 841) FixedPointMathLibTest:testLnWad() (gas: 2054) FixedPointMathLibTest:testLnWadBig() (gas: 2065) FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3285) FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3260) FixedPointMathLibTest:testLnWadSmall() (gas: 2666) FixedPointMathLibTest:testLog10() (gas: 76189) -FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 270, μ: 2211, ~: 2228) +FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 325, μ: 2204, ~: 2234) FixedPointMathLibTest:testLog10Up() (gas: 4435) FixedPointMathLibTest:testLog2() (gas: 243231) FixedPointMathLibTest:testLog256() (gas: 22831) -FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 270, μ: 2084, ~: 2146) +FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 325, μ: 2077, ~: 2146) FixedPointMathLibTest:testLog256Up() (gas: 1271) -FixedPointMathLibTest:testLog2Differential(uint256) (runs: 270, μ: 892, ~: 887) +FixedPointMathLibTest:testLog2Differential(uint256) (runs: 325, μ: 890, ~: 887) FixedPointMathLibTest:testLog2Up() (gas: 297368) -FixedPointMathLibTest:testMax(uint256,uint256) (runs: 270, μ: 498, ~: 494) -FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 270, μ: 869, ~: 869) -FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 270, μ: 519, ~: 515) -FixedPointMathLibTest:testMin(uint256,uint256) (runs: 270, μ: 477, ~: 482) -FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 270, μ: 828, ~: 819) -FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 270, μ: 541, ~: 546) +FixedPointMathLibTest:testMax(uint256,uint256) (runs: 325, μ: 499, ~: 504) +FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 325, μ: 869, ~: 874) +FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 325, μ: 520, ~: 525) +FixedPointMathLibTest:testMin(uint256,uint256) (runs: 325, μ: 476, ~: 472) +FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 325, μ: 828, ~: 819) +FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 325, μ: 540, ~: 536) FixedPointMathLibTest:testMulDiv() (gas: 1845) -FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 270, μ: 25968, ~: 24693) +FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 325, μ: 25940, ~: 24690) FixedPointMathLibTest:testMulDivEdgeCases() (gas: 762) FixedPointMathLibTest:testMulDivUp() (gas: 2103) -FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 270, μ: 26042, ~: 24998) +FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 325, μ: 26010, ~: 24998) FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 861) FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3179) FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3201) FixedPointMathLibTest:testMulWad() (gas: 712) -FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 270, μ: 25768, ~: 24681) +FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 325, μ: 25810, ~: 24681) FixedPointMathLibTest:testMulWadEdgeCases() (gas: 731) FixedPointMathLibTest:testMulWadUp() (gas: 779) -FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 270, μ: 25846, ~: 24794) +FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 325, μ: 25858, ~: 24794) FixedPointMathLibTest:testMulWadUpEdgeCases() (gas: 776) FixedPointMathLibTest:testPackUnpackSci() (gas: 129317) -FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 270, μ: 30411, ~: 30409) +FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 325, μ: 30423, ~: 30421) FixedPointMathLibTest:testRPow() (gas: 3298) FixedPointMathLibTest:testRPowOverflowReverts() (gas: 4940) -FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 270, μ: 440, ~: 440) -FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 270, μ: 485, ~: 485) -FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 270, μ: 533, ~: 533) -FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 270, μ: 487, ~: 487) -FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 270, μ: 486, ~: 486) -FixedPointMathLibTest:testRawMul(int256,int256) (runs: 270, μ: 434, ~: 434) -FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 270, μ: 463, ~: 463) -FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 270, μ: 557, ~: 557) -FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 270, μ: 487, ~: 487) -FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 270, μ: 422, ~: 422) -FixedPointMathLibTest:testRawSub(int256,int256) (runs: 270, μ: 463, ~: 463) -FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 270, μ: 463, ~: 463) +FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 325, μ: 440, ~: 440) +FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 325, μ: 485, ~: 485) +FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 325, μ: 533, ~: 533) +FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 325, μ: 487, ~: 487) +FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 325, μ: 486, ~: 486) +FixedPointMathLibTest:testRawMul(int256,int256) (runs: 325, μ: 434, ~: 434) +FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 325, μ: 463, ~: 463) +FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 325, μ: 557, ~: 557) +FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 325, μ: 487, ~: 487) +FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 325, μ: 422, ~: 422) +FixedPointMathLibTest:testRawSub(int256,int256) (runs: 325, μ: 463, ~: 463) +FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 325, μ: 463, ~: 463) FixedPointMathLibTest:testSDivWad() (gas: 840) -FixedPointMathLibTest:testSDivWad(int256,int256) (runs: 270, μ: 25624, ~: 24829) +FixedPointMathLibTest:testSDivWad(int256,int256) (runs: 325, μ: 25585, ~: 24829) FixedPointMathLibTest:testSDivWadEdgeCases() (gas: 404) FixedPointMathLibTest:testSMulWad() (gas: 1032) -FixedPointMathLibTest:testSMulWad(int256,int256) (runs: 270, μ: 25726, ~: 24903) +FixedPointMathLibTest:testSMulWad(int256,int256) (runs: 325, μ: 25790, ~: 24903) FixedPointMathLibTest:testSMulWadEdgeCases() (gas: 1287) -FixedPointMathLibTest:testSMulWadOverflowTrickDifferential(int256,int256) (runs: 270, μ: 644, ~: 654) +FixedPointMathLibTest:testSMulWadOverflowTrickDifferential(int256,int256) (runs: 325, μ: 643, ~: 654) FixedPointMathLibTest:testSci() (gas: 1838636) -FixedPointMathLibTest:testSci(uint256) (runs: 270, μ: 33532, ~: 36190) -FixedPointMathLibTest:testSci2(uint256) (runs: 270, μ: 915, ~: 911) +FixedPointMathLibTest:testSci(uint256) (runs: 325, μ: 33730, ~: 37190) +FixedPointMathLibTest:testSci2(uint256) (runs: 325, μ: 912, ~: 911) FixedPointMathLibTest:testSqrt() (gas: 43819) -FixedPointMathLibTest:testSqrt(uint256) (runs: 270, μ: 1091, ~: 1098) -FixedPointMathLibTest:testSqrtBack(uint256) (runs: 270, μ: 10812, ~: 363) -FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 270, μ: 54687, ~: 54894) +FixedPointMathLibTest:testSqrt(uint256) (runs: 325, μ: 1091, ~: 1098) +FixedPointMathLibTest:testSqrtBack(uint256) (runs: 325, μ: 10084, ~: 363) +FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 325, μ: 54678, ~: 54681) FixedPointMathLibTest:testSqrtHashedSingle() (gas: 54632) FixedPointMathLibTest:testSqrtWad() (gas: 7959) -FixedPointMathLibTest:testSqrtWad(uint256) (runs: 270, μ: 1596, ~: 1513) -FixedPointMathLibTest:testSqrtWadConverged(uint256) (runs: 270, μ: 1890, ~: 1922) -FixedPointMathLibTest:testSqrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 270, μ: 2167, ~: 1802) -FixedPointMathLibTest:testTernary(bool,uint256,uint256) (runs: 270, μ: 518, ~: 514) -FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 270, μ: 548, ~: 579) -FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 270, μ: 928, ~: 928) +FixedPointMathLibTest:testSqrtWad(uint256) (runs: 325, μ: 1589, ~: 1513) +FixedPointMathLibTest:testSqrtWadConverged(uint256) (runs: 325, μ: 1891, ~: 1922) +FixedPointMathLibTest:testSqrtWadMonotonicallyIncreasing(uint256,uint256) (runs: 325, μ: 2210, ~: 1802) +FixedPointMathLibTest:testTernary(bool,uint256,uint256) (runs: 325, μ: 518, ~: 514) +FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 325, μ: 547, ~: 518) +FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 325, μ: 926, ~: 890) FixedPointMathLibTest:test__codesize() (gas: 44557) GasBurnerLibTest:testBurn() (gas: 105035) -GasBurnerLibTest:testBurn(uint256) (runs: 270, μ: 42526, ~: 31726) +GasBurnerLibTest:testBurn(uint256) (runs: 325, μ: 42941, ~: 31814) GasBurnerLibTest:testBurnPure() (gas: 1700850) -GasBurnerLibTest:testBurnPure(uint256) (runs: 270, μ: 24909, ~: 24361) +GasBurnerLibTest:testBurnPure(uint256) (runs: 325, μ: 24949, ~: 24446) GasBurnerLibTest:testBurnPureTiming() (gas: 300223) GasBurnerLibTest:testBurnTiming() (gas: 293139) GasBurnerLibTest:testBurnView() (gas: 66700) -GasBurnerLibTest:testBurnView(uint256) (runs: 270, μ: 26996, ~: 24738) +GasBurnerLibTest:testBurnView(uint256) (runs: 325, μ: 26890, ~: 23159) GasBurnerLibTest:testBurnViewTiming() (gas: 294223) GasBurnerLibTest:test__codesize() (gas: 2389) InitializableTest:testDisableInitializers() (gas: 42010) InitializableTest:testInitializableConstructor() (gas: 691882) InitializableTest:testInitialize() (gas: 54688) -InitializableTest:testInitializeInititalizerTrick(bool,uint64,uint16) (runs: 270, μ: 791, ~: 791) -InitializableTest:testInitializeReinititalize(uint256) (runs: 270, μ: 96452, ~: 95851) -InitializableTest:testInitializeReinititalizerTrick(bool,uint64,uint64) (runs: 270, μ: 675, ~: 687) +InitializableTest:testInitializeInititalizerTrick(bool,uint64,uint16) (runs: 325, μ: 790, ~: 791) +InitializableTest:testInitializeReinititalize(uint256) (runs: 325, μ: 96203, ~: 95797) +InitializableTest:testInitializeReinititalizerTrick(bool,uint64,uint64) (runs: 325, μ: 674, ~: 687) InitializableTest:testOnlyInitializing() (gas: 10420) InitializableTest:test__codesize() (gas: 10480) -JSONParserLibTest:testDecodeEncodedStringDoesNotRevert(string) (runs: 270, μ: 57328, ~: 56403) +JSONParserLibTest:testDecodeEncodedStringDoesNotRevert(string) (runs: 325, μ: 57509, ~: 56403) JSONParserLibTest:testDecodeInvalidStringReverts() (gas: 172924) JSONParserLibTest:testDecodeString() (gas: 193269) JSONParserLibTest:testEmptyItem() (gas: 2913) @@ -591,9 +591,9 @@ JSONParserLibTest:testParseEmptyArrays() (gas: 499245) JSONParserLibTest:testParseEmptyObjects() (gas: 500206) JSONParserLibTest:testParseGas() (gas: 151909) JSONParserLibTest:testParseInt() (gas: 204229) -JSONParserLibTest:testParseInt(int256) (runs: 270, μ: 18780, ~: 17408) -JSONParserLibTest:testParseIntReverts(uint256) (runs: 270, μ: 55940, ~: 55929) -JSONParserLibTest:testParseIntTrick(uint256,bool) (runs: 270, μ: 528, ~: 532) +JSONParserLibTest:testParseInt(int256) (runs: 325, μ: 18702, ~: 17321) +JSONParserLibTest:testParseIntReverts(uint256) (runs: 325, μ: 55937, ~: 55929) +JSONParserLibTest:testParseIntTrick(uint256,bool) (runs: 325, μ: 528, ~: 532) JSONParserLibTest:testParseInvalidIntReverts() (gas: 210681) JSONParserLibTest:testParseInvalidNumberReverts() (gas: 4068682) JSONParserLibTest:testParseInvalidReverts() (gas: 8589165) @@ -609,174 +609,174 @@ JSONParserLibTest:testParseSimpleUintArray() (gas: 1175003) JSONParserLibTest:testParseSpecials() (gas: 260199) JSONParserLibTest:testParseString() (gas: 1237483) JSONParserLibTest:testParseUint() (gas: 95659) -JSONParserLibTest:testParseUint(uint256) (runs: 270, μ: 35506, ~: 31644) +JSONParserLibTest:testParseUint(uint256) (runs: 325, μ: 35257, ~: 31924) JSONParserLibTest:testParseUintFromHex() (gas: 1382724) -JSONParserLibTest:testParseValidObjectDoesNotRevert(string,string) (runs: 270, μ: 50032, ~: 48779) +JSONParserLibTest:testParseValidObjectDoesNotRevert(string,string) (runs: 325, μ: 50173, ~: 48855) JSONParserLibTest:test__codesize() (gas: 38087) LibBitTest:testAnd() (gas: 192789) -LibBitTest:testAnd(bool,bool) (runs: 270, μ: 632, ~: 634) -LibBitTest:testAutoClean(uint256,uint256) (runs: 270, μ: 468, ~: 468) -LibBitTest:testBoolToUint(bool) (runs: 270, μ: 485, ~: 485) +LibBitTest:testAnd(bool,bool) (runs: 325, μ: 632, ~: 634) +LibBitTest:testAutoClean(uint256,uint256) (runs: 325, μ: 468, ~: 468) +LibBitTest:testBoolToUint(bool) (runs: 325, μ: 485, ~: 485) LibBitTest:testCLZ() (gas: 297260) LibBitTest:testFFS() (gas: 152877) LibBitTest:testFLS() (gas: 245237) LibBitTest:testIsPo2() (gas: 57663) -LibBitTest:testIsPo2(uint256) (runs: 270, μ: 3599, ~: 1906) -LibBitTest:testIsPo2(uint8,uint8) (runs: 270, μ: 623, ~: 624) +LibBitTest:testIsPo2(uint256) (runs: 325, μ: 3319, ~: 1618) +LibBitTest:testIsPo2(uint8,uint8) (runs: 325, μ: 623, ~: 624) LibBitTest:testOr() (gas: 194336) -LibBitTest:testOr(bool,bool) (runs: 270, μ: 649, ~: 648) +LibBitTest:testOr(bool,bool) (runs: 325, μ: 649, ~: 648) LibBitTest:testPassInBool() (gas: 830) LibBitTest:testPopCount() (gas: 63738) -LibBitTest:testPopCount(uint256) (runs: 270, μ: 3741, ~: 2048) +LibBitTest:testPopCount(uint256) (runs: 325, μ: 3461, ~: 1760) LibBitTest:testReturnsBool() (gas: 779) LibBitTest:testReverseBits() (gas: 131521) -LibBitTest:testReverseBitsDifferential(uint256) (runs: 270, μ: 18724, ~: 18724) +LibBitTest:testReverseBitsDifferential(uint256) (runs: 325, μ: 18724, ~: 18724) LibBitTest:testReverseBytes() (gas: 12492) -LibBitTest:testReverseBytesDifferential(uint256) (runs: 270, μ: 2675, ~: 2675) +LibBitTest:testReverseBytesDifferential(uint256) (runs: 325, μ: 2675, ~: 2675) LibBitTest:test__codesize() (gas: 5842) LibBitmapTest:testBitmapClaimWithGetSet() (gas: 27156) LibBitmapTest:testBitmapClaimWithToggle() (gas: 17480) LibBitmapTest:testBitmapFindFirstUnset() (gas: 54669) -LibBitmapTest:testBitmapFindFirstUnset(uint256,uint256,bytes32) (runs: 270, μ: 140893, ~: 140143) +LibBitmapTest:testBitmapFindFirstUnset(uint256,uint256,bytes32) (runs: 325, μ: 141332, ~: 140274) LibBitmapTest:testBitmapFindLastSet() (gas: 1300541) -LibBitmapTest:testBitmapFindLastSet(uint256,bytes32) (runs: 270, μ: 75837, ~: 76225) +LibBitmapTest:testBitmapFindLastSet(uint256,bytes32) (runs: 325, μ: 75948, ~: 76214) LibBitmapTest:testBitmapFindLastSet2() (gas: 23882) LibBitmapTest:testBitmapGet() (gas: 2549) -LibBitmapTest:testBitmapGet(uint256) (runs: 270, μ: 2599, ~: 2599) +LibBitmapTest:testBitmapGet(uint256) (runs: 325, μ: 2599, ~: 2599) LibBitmapTest:testBitmapPopCount() (gas: 751877) -LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 270, μ: 205538, ~: 172426) +LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 325, μ: 212548, ~: 192686) LibBitmapTest:testBitmapPopCountAcrossMultipleBuckets() (gas: 73634) LibBitmapTest:testBitmapPopCountWithinSingleBucket() (gas: 34032) LibBitmapTest:testBitmapSet() (gas: 22771) -LibBitmapTest:testBitmapSet(uint256) (runs: 270, μ: 22843, ~: 22843) -LibBitmapTest:testBitmapSetAndGet(uint256) (runs: 270, μ: 22864, ~: 22864) +LibBitmapTest:testBitmapSet(uint256) (runs: 325, μ: 22843, ~: 22843) +LibBitmapTest:testBitmapSetAndGet(uint256) (runs: 325, μ: 22864, ~: 22864) LibBitmapTest:testBitmapSetBatch() (gas: 2918603) LibBitmapTest:testBitmapSetBatchAcrossMultipleBuckets() (gas: 438393) LibBitmapTest:testBitmapSetBatchWithinSingleBucket() (gas: 389011) LibBitmapTest:testBitmapSetTo() (gas: 14652) -LibBitmapTest:testBitmapSetTo(uint256,bool,uint256) (runs: 270, μ: 13143, ~: 23027) -LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 270, μ: 47095, ~: 51389) +LibBitmapTest:testBitmapSetTo(uint256,bool,uint256) (runs: 325, μ: 12855, ~: 3113) +LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 325, μ: 46706, ~: 51380) LibBitmapTest:testBitmapToggle() (gas: 31525) -LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 270, μ: 19201, ~: 23572) +LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 325, μ: 19303, ~: 23572) LibBitmapTest:testBitmapUnset() (gas: 22794) -LibBitmapTest:testBitmapUnset(uint256) (runs: 270, μ: 14510, ~: 14528) +LibBitmapTest:testBitmapUnset(uint256) (runs: 325, μ: 14511, ~: 14525) LibBitmapTest:testBitmapUnsetBatch() (gas: 2981123) LibBitmapTest:testBitmapUnsetBatchAcrossMultipleBuckets() (gas: 438470) LibBitmapTest:testBitmapUnsetBatchWithinSingleBucket() (gas: 445869) LibBitmapTest:test__codesize() (gas: 8720) LibCWIATest:testCloneDeteministicWithImmutableArgs() (gas: 191965) -LibCWIATest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 270, μ: 1113042, ~: 1061431) +LibCWIATest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 325, μ: 1089820, ~: 1044039) LibCWIATest:testCloneWithImmutableArgs() (gas: 120548) -LibCWIATest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 270, μ: 993576, ~: 982338) +LibCWIATest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 325, μ: 991211, ~: 968312) LibCWIATest:testCloneWithImmutableArgsRevertsIfDataTooBig() (gas: 97306657) LibCWIATest:test__codesize() (gas: 12335) LibCloneTest:testClone() (gas: 97598) -LibCloneTest:testClone(uint256) (runs: 270, μ: 97692, ~: 97692) +LibCloneTest:testClone(uint256) (runs: 325, μ: 97692, ~: 97692) LibCloneTest:testCloneDeterministic() (gas: 98533) -LibCloneTest:testCloneDeterministic(bytes32) (runs: 270, μ: 2254206, ~: 98783) +LibCloneTest:testCloneDeterministic(bytes32) (runs: 325, μ: 2484556, ~: 98783) LibCloneTest:testCloneDeterministicWithImmutableArgs() (gas: 128890) -LibCloneTest:testCloneDeterministicWithImmutableArgs(bytes32) (runs: 270, μ: 7562090, ~: 120923) +LibCloneTest:testCloneDeterministicWithImmutableArgs(bytes32) (runs: 325, μ: 7863970, ~: 121912) LibCloneTest:testCloneWithImmutableArgs() (gas: 129436) -LibCloneTest:testCloneWithImmutableArgs(uint256) (runs: 270, μ: 3628746, ~: 119420) +LibCloneTest:testCloneWithImmutableArgs(uint256) (runs: 325, μ: 3126370, ~: 119239) LibCloneTest:testCloneWithImmutableArgsSlicing() (gas: 57948) -LibCloneTest:testCreateDeterministicERC1967(bytes32) (runs: 270, μ: 175384, ~: 128213) -LibCloneTest:testCreateDeterministicERC1967BeaconProxy(bytes32) (runs: 270, μ: 360561, ~: 360735) -LibCloneTest:testCreateDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 505103, ~: 362607) -LibCloneTest:testCreateDeterministicERC1967I(bytes32) (runs: 270, μ: 212047, ~: 132664) -LibCloneTest:testCreateDeterministicERC1967IBeaconProxy(bytes32) (runs: 270, μ: 358987, ~: 299794) -LibCloneTest:testCreateDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 617560, ~: 364768) -LibCloneTest:testCreateDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 762355, ~: 155163) -LibCloneTest:testCreateDeterministicERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 536881, ~: 150130) +LibCloneTest:testCreateDeterministicERC1967(bytes32) (runs: 325, μ: 181458, ~: 128213) +LibCloneTest:testCreateDeterministicERC1967BeaconProxy(bytes32) (runs: 325, μ: 356527, ~: 360735) +LibCloneTest:testCreateDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 325, μ: 537587, ~: 362920) +LibCloneTest:testCreateDeterministicERC1967I(bytes32) (runs: 325, μ: 205752, ~: 132662) +LibCloneTest:testCreateDeterministicERC1967IBeaconProxy(bytes32) (runs: 325, μ: 370731, ~: 361773) +LibCloneTest:testCreateDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 325, μ: 642686, ~: 365037) +LibCloneTest:testCreateDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 325, μ: 732457, ~: 154316) +LibCloneTest:testCreateDeterministicERC1967WithImmutableArgs(bytes32) (runs: 325, μ: 494856, ~: 150221) LibCloneTest:testDeployDeterministicERC1967() (gas: 133653) -LibCloneTest:testDeployDeterministicERC1967(bytes32) (runs: 270, μ: 1699334, ~: 133508) -LibCloneTest:testDeployDeterministicERC1967BeaconProxy(bytes32) (runs: 270, μ: 4951742, ~: 357720) -LibCloneTest:testDeployDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 5737990, ~: 368472) +LibCloneTest:testDeployDeterministicERC1967(bytes32) (runs: 325, μ: 2333387, ~: 133493) +LibCloneTest:testDeployDeterministicERC1967BeaconProxy(bytes32) (runs: 325, μ: 5054317, ~: 357720) +LibCloneTest:testDeployDeterministicERC1967BeaconProxyWithImmutableArgs(bytes32) (runs: 325, μ: 6146078, ~: 368540) LibCloneTest:testDeployDeterministicERC1967I() (gas: 129746) -LibCloneTest:testDeployDeterministicERC1967I(bytes32) (runs: 270, μ: 4071985, ~: 129705) -LibCloneTest:testDeployDeterministicERC1967IBeaconProxy(bytes32) (runs: 270, μ: 2837683, ~: 359955) -LibCloneTest:testDeployDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 270, μ: 4332589, ~: 370683) +LibCloneTest:testDeployDeterministicERC1967I(bytes32) (runs: 325, μ: 2822232, ~: 129708) +LibCloneTest:testDeployDeterministicERC1967IBeaconProxy(bytes32) (runs: 325, μ: 3298230, ~: 359955) +LibCloneTest:testDeployDeterministicERC1967IBeaconProxyWithImmutableArgs(bytes32) (runs: 325, μ: 5526186, ~: 370820) LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs() (gas: 129746) -LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 6954378, ~: 151350) +LibCloneTest:testDeployDeterministicERC1967IWithImmutableArgs(bytes32) (runs: 325, μ: 5858776, ~: 151487) LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs() (gas: 170813) -LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 5465394, ~: 146925) +LibCloneTest:testDeployDeterministicERC1967WithImmutableArgs(bytes32) (runs: 325, μ: 4908698, ~: 146451) LibCloneTest:testDeployERC1967() (gas: 130817) -LibCloneTest:testDeployERC1967(bytes32) (runs: 270, μ: 233435, ~: 130898) -LibCloneTest:testDeployERC1967BeaconProxy(bytes32) (runs: 270, μ: 356502, ~: 294993) +LibCloneTest:testDeployERC1967(bytes32) (runs: 325, μ: 228560, ~: 130898) +LibCloneTest:testDeployERC1967BeaconProxy(bytes32) (runs: 325, μ: 357968, ~: 294993) LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs() (gas: 879000) -LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs(address,bytes32) (runs: 270, μ: 27048127, ~: 265044) +LibCloneTest:testDeployERC1967BeaconProxyWithImmutableArgs(address,bytes32) (runs: 325, μ: 26708502, ~: 267326) LibCloneTest:testDeployERC1967I() (gas: 129964) -LibCloneTest:testDeployERC1967I(bytes32) (runs: 270, μ: 130034, ~: 130034) +LibCloneTest:testDeployERC1967I(bytes32) (runs: 325, μ: 130034, ~: 130034) LibCloneTest:testDeployERC1967IBeaconProxy() (gas: 359439) -LibCloneTest:testDeployERC1967IBeaconProxy(bytes32) (runs: 270, μ: 363769, ~: 359197) +LibCloneTest:testDeployERC1967IBeaconProxy(bytes32) (runs: 325, μ: 359414, ~: 359197) LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs() (gas: 940290) -LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs(address,bytes32) (runs: 270, μ: 25500690, ~: 260261) +LibCloneTest:testDeployERC1967IBeaconProxyWithImmutableArgs(address,bytes32) (runs: 325, μ: 25444946, ~: 260555) LibCloneTest:testDeployERC1967IWithImmutableArgs() (gas: 168734) -LibCloneTest:testDeployERC1967IWithImmutableArgs(bytes32) (runs: 270, μ: 3327535, ~: 151018) +LibCloneTest:testDeployERC1967IWithImmutableArgs(bytes32) (runs: 325, μ: 3444892, ~: 151222) LibCloneTest:testDeployERC1967WithImmutableArgs() (gas: 145438) -LibCloneTest:testDeployERC1967WithImmutableArgs(bytes32) (runs: 270, μ: 4821584, ~: 144316) -LibCloneTest:testERC1967BeaconProxyGasBehavior(uint256,uint256) (runs: 270, μ: 349628, ~: 347446) -LibCloneTest:testERC1967ConstantBootstrap(address,bytes32) (runs: 270, μ: 188980, ~: 169772) -LibCloneTest:testERC1967IBeaconProxyGasBehavior(uint256,uint256) (runs: 270, μ: 360781, ~: 347856) -LibCloneTest:testImplemenationOf(address) (runs: 270, μ: 395600, ~: 82342) +LibCloneTest:testDeployERC1967WithImmutableArgs(bytes32) (runs: 325, μ: 5000372, ~: 145334) +LibCloneTest:testERC1967BeaconProxyGasBehavior(uint256,uint256) (runs: 325, μ: 352629, ~: 346782) +LibCloneTest:testERC1967ConstantBootstrap(address,bytes32) (runs: 325, μ: 185540, ~: 169765) +LibCloneTest:testERC1967IBeaconProxyGasBehavior(uint256,uint256) (runs: 325, μ: 367792, ~: 347574) +LibCloneTest:testImplemenationOf(address) (runs: 325, μ: 551681, ~: 80767) LibCloneTest:testImplemenationOfGas() (gas: 631777) -LibCloneTest:testInitCode(address) (runs: 270, μ: 253220, ~: 45749) +LibCloneTest:testInitCode(address) (runs: 325, μ: 232598, ~: 43896) LibCloneTest:testInitialDeposit() (gas: 872449) -LibCloneTest:testSlicingRevertsOnZeroCodeAddress(address) (runs: 270, μ: 72447, ~: 31276) -LibCloneTest:testStartsWith(uint256) (runs: 270, μ: 30024, ~: 29991) +LibCloneTest:testSlicingRevertsOnZeroCodeAddress(address) (runs: 325, μ: 70463, ~: 31181) +LibCloneTest:testStartsWith(uint256) (runs: 325, μ: 30020, ~: 29987) LibCloneTest:test__codesize() (gas: 42104) -LibERC6551Test:testComputeAccountAddress(address,bytes32,uint256,address,uint256) (runs: 270, μ: 198827, ~: 29507) -LibERC6551Test:testContext(address,bytes32,uint256,address,uint256) (runs: 270, μ: 103032, ~: 102943) -LibERC6551Test:testInitCodeHash(address,bytes32,uint256,address,uint256) (runs: 270, μ: 252386, ~: 23818) -LibERC6551Test:testIsERC6551Account(address,bytes32,uint256,address,uint256) (runs: 270, μ: 114214, ~: 114208) +LibERC6551Test:testComputeAccountAddress(address,bytes32,uint256,address,uint256) (runs: 325, μ: 206657, ~: 29507) +LibERC6551Test:testContext(address,bytes32,uint256,address,uint256) (runs: 325, μ: 103037, ~: 102943) +LibERC6551Test:testInitCodeHash(address,bytes32,uint256,address,uint256) (runs: 325, μ: 251720, ~: 23818) +LibERC6551Test:testIsERC6551Account(address,bytes32,uint256,address,uint256) (runs: 325, μ: 114191, ~: 114203) LibERC6551Test:test__codesize() (gas: 5280) -LibMapTest:testFoundStatementDifferential(uint256,uint256,uint256) (runs: 270, μ: 499, ~: 499) +LibMapTest:testFoundStatementDifferential(uint256,uint256,uint256) (runs: 325, μ: 499, ~: 499) LibMapTest:testGeneralMapFunctionsGas() (gas: 3304775) -LibMapTest:testGeneralMapFunctionsWithSmallBitWidths(uint256) (runs: 270, μ: 84356, ~: 85701) +LibMapTest:testGeneralMapFunctionsWithSmallBitWidths(uint256) (runs: 325, μ: 84268, ~: 85691) LibMapTest:testGeneralMapFunctionsWithZeroBitWidth() (gas: 12260) -LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 270, μ: 205707, ~: 151431) +LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 325, μ: 207752, ~: 152795) LibMapTest:testMapGetFromBigArray() (gas: 3330) LibMapTest:testMapGetUint8() (gas: 3313) LibMapTest:testMapSetUint8() (gas: 23276) LibMapTest:testMapSetUint8FromBigArray() (gas: 23263) -LibMapTest:testUint128MapSearchSorted(uint256) (runs: 270, μ: 187157, ~: 131073) +LibMapTest:testUint128MapSearchSorted(uint256) (runs: 325, μ: 196530, ~: 130610) LibMapTest:testUint128MapSetAndGet() (gas: 1607264) -LibMapTest:testUint128MapSetAndGet(uint256) (runs: 270, μ: 180782, ~: 171340) -LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 270, μ: 69051, ~: 69481) -LibMapTest:testUint16MapSearchSorted(uint256) (runs: 270, μ: 97085, ~: 86486) +LibMapTest:testUint128MapSetAndGet(uint256) (runs: 325, μ: 180269, ~: 171044) +LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 325, μ: 68929, ~: 69334) +LibMapTest:testUint16MapSearchSorted(uint256) (runs: 325, μ: 96375, ~: 86351) LibMapTest:testUint16MapSetAndGet() (gas: 958101) -LibMapTest:testUint16MapSetAndGet(uint256) (runs: 270, μ: 81492, ~: 81716) -LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 270, μ: 68437, ~: 69243) -LibMapTest:testUint32MapSearchSorted(uint256) (runs: 270, μ: 108269, ~: 86897) +LibMapTest:testUint16MapSetAndGet(uint256) (runs: 325, μ: 81515, ~: 81715) +LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 325, μ: 68514, ~: 69242) +LibMapTest:testUint32MapSearchSorted(uint256) (runs: 325, μ: 107721, ~: 87380) LibMapTest:testUint32MapSetAndGet() (gas: 1067796) -LibMapTest:testUint32MapSetAndGet(uint256) (runs: 270, μ: 114388, ~: 124762) -LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 270, μ: 68454, ~: 69197) -LibMapTest:testUint32Maps(uint256) (runs: 270, μ: 68660, ~: 72252) -LibMapTest:testUint40MapSearchSorted(uint256) (runs: 270, μ: 123526, ~: 108512) +LibMapTest:testUint32MapSetAndGet(uint256) (runs: 325, μ: 114392, ~: 124787) +LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 325, μ: 68716, ~: 69197) +LibMapTest:testUint32Maps(uint256) (runs: 325, μ: 68543, ~: 72253) +LibMapTest:testUint40MapSearchSorted(uint256) (runs: 325, μ: 125521, ~: 108033) LibMapTest:testUint40MapSetAndGet() (gas: 1127509) -LibMapTest:testUint40MapSetAndGet(uint256) (runs: 270, μ: 137184, ~: 146770) -LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 270, μ: 68319, ~: 69272) -LibMapTest:testUint64MapSearchSorted(uint256) (runs: 270, μ: 132983, ~: 108680) +LibMapTest:testUint40MapSetAndGet(uint256) (runs: 325, μ: 136729, ~: 146776) +LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 325, μ: 68558, ~: 69272) +LibMapTest:testUint64MapSearchSorted(uint256) (runs: 325, μ: 133307, ~: 108848) LibMapTest:testUint64MapSetAndGet() (gas: 1220444) -LibMapTest:testUint64MapSetAndGet(uint256) (runs: 270, μ: 147961, ~: 147374) -LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 270, μ: 68527, ~: 69261) -LibMapTest:testUint8MapSearchSorted(uint256) (runs: 270, μ: 98633, ~: 86157) +LibMapTest:testUint64MapSetAndGet(uint256) (runs: 325, μ: 149203, ~: 147408) +LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 325, μ: 68361, ~: 69261) +LibMapTest:testUint8MapSearchSorted(uint256) (runs: 325, μ: 100847, ~: 86281) LibMapTest:testUint8MapSetAndGet() (gas: 884299) -LibMapTest:testUint8MapSetAndGet(uint256) (runs: 270, μ: 59499, ~: 59571) -LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 270, μ: 68363, ~: 69180) +LibMapTest:testUint8MapSetAndGet(uint256) (runs: 325, μ: 59499, ~: 59566) +LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 325, μ: 68208, ~: 69180) LibMapTest:test__codesize() (gas: 12065) LibPRNGTest:testExponentialWad() (gas: 4394348) LibPRNGTest:testLCGGas() (gas: 20803) LibPRNGTest:testLazyShufflerGet() (gas: 298845) -LibPRNGTest:testLazyShufflerGetOutOfBoundsReverts(uint256,uint256) (runs: 270, μ: 26610, ~: 26667) +LibPRNGTest:testLazyShufflerGetOutOfBoundsReverts(uint256,uint256) (runs: 325, μ: 26620, ~: 26667) LibPRNGTest:testLazyShufflerNoStorageCollisions() (gas: 265353) -LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 270, μ: 204908, ~: 91132) +LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 325, μ: 202119, ~: 91074) LibPRNGTest:testLazyShufflerProducesShuffledRange2() (gas: 9059432) -LibPRNGTest:testLazyShufflerProducesShuffledRangeWithGrow(uint256,uint256) (runs: 270, μ: 185581, ~: 175676) +LibPRNGTest:testLazyShufflerProducesShuffledRangeWithGrow(uint256,uint256) (runs: 325, μ: 184634, ~: 176314) LibPRNGTest:testLazyShufflerRestart() (gas: 275425) LibPRNGTest:testLazyShufflerRevertsOnDoubleInit() (gas: 26824) -LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 270, μ: 64987, ~: 74386) -LibPRNGTest:testLazyShufflerRevertsOnGrowWithInvalidLength(uint256,uint256) (runs: 270, μ: 24684, ~: 24600) -LibPRNGTest:testLazyShufflerRevertsOnInitWithInvalidLength(uint256) (runs: 270, μ: 23012, ~: 23605) +LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 325, μ: 64008, ~: 56705) +LibPRNGTest:testLazyShufflerRevertsOnGrowWithInvalidLength(uint256,uint256) (runs: 325, μ: 24688, ~: 24708) +LibPRNGTest:testLazyShufflerRevertsOnInitWithInvalidLength(uint256) (runs: 325, μ: 22814, ~: 23673) LibPRNGTest:testLazyShufflerRevertsOnZeroLengthNext() (gas: 27623) LibPRNGTest:testPRNGGas() (gas: 25667) LibPRNGTest:testPRNGNext() (gas: 16162) @@ -790,259 +790,259 @@ LibPRNGTest:testPRNGShuffleGas() (gas: 1610927) LibPRNGTest:testPRNGUniform() (gas: 559430) LibPRNGTest:testStandardNormalWad() (gas: 4425913) LibPRNGTest:test__codesize() (gas: 14420) -LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 270, μ: 4433, ~: 4245) +LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 325, μ: 4473, ~: 4291) LibRLPTest:testComputeAddressForLargeNonces() (gas: 1760) LibRLPTest:testComputeAddressForSmallNonces() (gas: 1007) LibRLPTest:testComputeAddressOriginalForLargeNonces() (gas: 3766) LibRLPTest:testComputeAddressOriginalForSmallNonces() (gas: 2185) -LibRLPTest:testRLPEncodeAddressDifferential(address) (runs: 270, μ: 256123, ~: 26225) -LibRLPTest:testRLPEncodeAddressViaList(address,address) (runs: 270, μ: 190917, ~: 28079) -LibRLPTest:testRLPEncodeBool(bool) (runs: 270, μ: 27686, ~: 27818) +LibRLPTest:testRLPEncodeAddressDifferential(address) (runs: 325, μ: 234508, ~: 26224) +LibRLPTest:testRLPEncodeAddressViaList(address,address) (runs: 325, μ: 193006, ~: 28079) +LibRLPTest:testRLPEncodeBool(bool) (runs: 325, μ: 27681, ~: 27818) LibRLPTest:testRLPEncodeBytes() (gas: 382181) LibRLPTest:testRLPEncodeBytes2() (gas: 156293) -LibRLPTest:testRLPEncodeBytesDifferential(bytes32) (runs: 270, μ: 269422, ~: 29649) +LibRLPTest:testRLPEncodeBytesDifferential(bytes32) (runs: 325, μ: 275263, ~: 29815) LibRLPTest:testRLPEncodeList() (gas: 2738950) LibRLPTest:testRLPEncodeList2() (gas: 803256) -LibRLPTest:testRLPEncodeListDifferential(bytes,uint256) (runs: 270, μ: 422286, ~: 342356) +LibRLPTest:testRLPEncodeListDifferential(bytes,uint256) (runs: 325, μ: 431157, ~: 39250) LibRLPTest:testRLPEncodeUint() (gas: 1291481) -LibRLPTest:testRLPEncodeUint(uint256) (runs: 270, μ: 98802, ~: 25049) -LibRLPTest:testRLPEncodeUintDifferential(uint256) (runs: 270, μ: 256803, ~: 27125) -LibRLPTest:testRLPMemory(bytes32) (runs: 270, μ: 289847, ~: 32849) +LibRLPTest:testRLPEncodeUint(uint256) (runs: 325, μ: 99409, ~: 24993) +LibRLPTest:testRLPEncodeUintDifferential(uint256) (runs: 325, μ: 258532, ~: 27097) +LibRLPTest:testRLPMemory(bytes32) (runs: 325, μ: 298767, ~: 33387) LibRLPTest:testRLPPUint256() (gas: 364901) -LibRLPTest:testSmallLog256Equivalence(uint256) (runs: 270, μ: 23676, ~: 23700) +LibRLPTest:testSmallLog256Equivalence(uint256) (runs: 325, μ: 23678, ~: 23700) LibRLPTest:test__codesize() (gas: 15520) -LibSortTest:testClean(uint256) (runs: 270, μ: 3203, ~: 3428) -LibSortTest:testCopy(uint256) (runs: 270, μ: 79040, ~: 25742) -LibSortTest:testInsertionSortAddressesDifferential(uint256) (runs: 270, μ: 26172, ~: 24893) +LibSortTest:testClean(uint256) (runs: 325, μ: 3132, ~: 2891) +LibSortTest:testCopy(uint256) (runs: 325, μ: 69684, ~: 25754) +LibSortTest:testInsertionSortAddressesDifferential(uint256) (runs: 325, μ: 39297, ~: 24893) LibSortTest:testInsertionSortInts() (gas: 80617) LibSortTest:testInsertionSortPsuedorandom() (gas: 63580) -LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 270, μ: 62321, ~: 62319) -LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 270, μ: 34899, ~: 28018) -LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 270, μ: 36692, ~: 28763) -LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 270, μ: 31246, ~: 27511) -LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 270, μ: 42552, ~: 30007) -LibSortTest:testIsSortedDifferential(uint256) (runs: 270, μ: 40922, ~: 28544) -LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 270, μ: 51143, ~: 29939) +LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 325, μ: 62462, ~: 62467) +LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 325, μ: 38319, ~: 28883) +LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 325, μ: 35445, ~: 28772) +LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 325, μ: 32719, ~: 28360) +LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 325, μ: 39729, ~: 30045) +LibSortTest:testIsSortedDifferential(uint256) (runs: 325, μ: 39084, ~: 28204) +LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 325, μ: 46606, ~: 29763) LibSortTest:testReverse() (gas: 117043) LibSortTest:testSearchSorted() (gas: 118994) LibSortTest:testSearchSortedAddresses() (gas: 251972) LibSortTest:testSearchSortedBasicCases() (gas: 2200) -LibSortTest:testSearchSortedDifferential(uint256) (runs: 270, μ: 45313, ~: 30330) +LibSortTest:testSearchSortedDifferential(uint256) (runs: 325, μ: 47796, ~: 31422) LibSortTest:testSearchSortedEdgeCases() (gas: 1551) -LibSortTest:testSearchSortedElementInArray(uint256) (runs: 270, μ: 57374, ~: 31463) +LibSortTest:testSearchSortedElementInArray(uint256) (runs: 325, μ: 54364, ~: 31094) LibSortTest:testSearchSortedElementNotInArray() (gas: 6180) -LibSortTest:testSearchSortedElementNotInArray(uint256) (runs: 270, μ: 47942, ~: 33175) +LibSortTest:testSearchSortedElementNotInArray(uint256) (runs: 325, μ: 51326, ~: 33527) LibSortTest:testSearchSortedInts() (gas: 120728) -LibSortTest:testSearchSortedInts(int256[],int256) (runs: 270, μ: 12073, ~: 11691) +LibSortTest:testSearchSortedInts(int256[],int256) (runs: 325, μ: 12209, ~: 11949) LibSortTest:testSearchSortedWithEmptyArray() (gas: 731) -LibSortTest:testSort(uint256) (runs: 270, μ: 39157, ~: 28889) -LibSortTest:testSortAddressesDifferential(uint256) (runs: 270, μ: 69284, ~: 31181) +LibSortTest:testSort(uint256) (runs: 325, μ: 41257, ~: 29303) +LibSortTest:testSortAddressesDifferential(uint256) (runs: 325, μ: 56962, ~: 30792) LibSortTest:testSortAddressesPsuedorandom() (gas: 146943) -LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 270, μ: 147218, ~: 147157) +LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 325, μ: 147306, ~: 147402) LibSortTest:testSortAddressesPsuedorandomBrutalizeUpperBits() (gas: 198938) LibSortTest:testSortAddressesReversed() (gas: 45501) LibSortTest:testSortAddressesSorted() (gas: 41136) LibSortTest:testSortBasicCase() (gas: 1164) -LibSortTest:testSortChecksumed(uint256) (runs: 270, μ: 43475, ~: 30370) -LibSortTest:testSortDifferential(uint256) (runs: 270, μ: 58117, ~: 28548) +LibSortTest:testSortChecksumed(uint256) (runs: 325, μ: 48408, ~: 30202) +LibSortTest:testSortDifferential(uint256) (runs: 325, μ: 61213, ~: 28341) LibSortTest:testSortInts() (gas: 894005) LibSortTest:testSortMostlySame() (gas: 66080) LibSortTest:testSortOriginalMostlySame() (gas: 208007) LibSortTest:testSortOriginalPsuedorandom() (gas: 283682) -LibSortTest:testSortOriginalPsuedorandom(uint256) (runs: 270, μ: 287309, ~: 286482) +LibSortTest:testSortOriginalPsuedorandom(uint256) (runs: 325, μ: 287095, ~: 286517) LibSortTest:testSortOriginalReversed() (gas: 156304) LibSortTest:testSortOriginalSorted() (gas: 142285) LibSortTest:testSortPsuedorandom() (gas: 140146) -LibSortTest:testSortPsuedorandom(uint256) (runs: 270, μ: 140474, ~: 140499) +LibSortTest:testSortPsuedorandom(uint256) (runs: 325, μ: 140533, ~: 140537) LibSortTest:testSortPsuedorandomNonuniform() (gas: 145957) -LibSortTest:testSortPsuedorandomNonuniform(uint256) (runs: 270, μ: 146208, ~: 146134) +LibSortTest:testSortPsuedorandomNonuniform(uint256) (runs: 325, μ: 146164, ~: 146073) LibSortTest:testSortReversed() (gas: 38906) LibSortTest:testSortSorted() (gas: 34523) LibSortTest:testSortTestOverhead() (gas: 103364) LibSortTest:testSortedDifferenceDifferential() (gas: 183328) -LibSortTest:testSortedDifferenceDifferential(uint256) (runs: 270, μ: 34557, ~: 34030) -LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 270, μ: 36906, ~: 36481) -LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 270, μ: 59381, ~: 55353) +LibSortTest:testSortedDifferenceDifferential(uint256) (runs: 325, μ: 35143, ~: 35117) +LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 325, μ: 36852, ~: 35998) +LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 325, μ: 59118, ~: 53031) LibSortTest:testSortedIntersectionDifferential() (gas: 209315) -LibSortTest:testSortedIntersectionDifferential(uint256) (runs: 270, μ: 32750, ~: 32024) -LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 270, μ: 34779, ~: 34190) +LibSortTest:testSortedIntersectionDifferential(uint256) (runs: 325, μ: 33042, ~: 32497) +LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 325, μ: 35039, ~: 34570) LibSortTest:testSortedUnionDifferential() (gas: 217115) -LibSortTest:testSortedUnionDifferential(uint256) (runs: 270, μ: 35516, ~: 34850) -LibSortTest:testSortedUnionDifferentialInt(uint256) (runs: 270, μ: 37962, ~: 37668) -LibSortTest:testTwoComplementConversionSort(int256,int256) (runs: 270, μ: 450, ~: 452) +LibSortTest:testSortedUnionDifferential(uint256) (runs: 325, μ: 35682, ~: 35038) +LibSortTest:testSortedUnionDifferentialInt(uint256) (runs: 325, μ: 38374, ~: 37965) +LibSortTest:testTwoComplementConversionSort(int256,int256) (runs: 325, μ: 450, ~: 449) LibSortTest:testUniquifySorted() (gas: 1710) -LibSortTest:testUniquifySorted(uint256) (runs: 270, μ: 49219, ~: 28462) +LibSortTest:testUniquifySorted(uint256) (runs: 325, μ: 51859, ~: 29040) LibSortTest:testUniquifySortedAddress() (gas: 4039) -LibSortTest:testUniquifySortedAddress(uint256) (runs: 270, μ: 51480, ~: 28747) -LibSortTest:testUniquifySortedDifferential(uint256) (runs: 270, μ: 48608, ~: 32349) +LibSortTest:testUniquifySortedAddress(uint256) (runs: 325, μ: 47998, ~: 28792) +LibSortTest:testUniquifySortedDifferential(uint256) (runs: 325, μ: 50011, ~: 31973) LibSortTest:testUniquifySortedWithEmptyArray() (gas: 528) LibSortTest:test__codesize() (gas: 21949) -LibStringTest:testAddressToHexStringZeroRightPadded(address) (runs: 270, μ: 3414, ~: 3414) +LibStringTest:testAddressToHexStringZeroRightPadded(address) (runs: 325, μ: 3414, ~: 3414) LibStringTest:testBytesToHexString() (gas: 4801) -LibStringTest:testBytesToHexString(bytes) (runs: 270, μ: 724730, ~: 624194) +LibStringTest:testBytesToHexString(bytes) (runs: 325, μ: 751817, ~: 624248) LibStringTest:testBytesToHexStringNoPrefix() (gas: 4489) -LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 270, μ: 719540, ~: 623898) +LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 325, μ: 733580, ~: 623946) LibStringTest:testContains() (gas: 43988) LibStringTest:testFromAddressToHexString() (gas: 3137) LibStringTest:testFromAddressToHexStringChecksummed() (gas: 35217) -LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 270, μ: 704449, ~: 612898) +LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 325, μ: 694588, ~: 612919) LibStringTest:testFromAddressToHexStringWithLeadingZeros() (gas: 3113) -LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 270, μ: 735075, ~: 622575) +LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 325, μ: 767339, ~: 622673) LibStringTest:testNormalizeSmallString() (gas: 1387) -LibStringTest:testNormalizeSmallString(bytes32) (runs: 270, μ: 2921, ~: 3912) +LibStringTest:testNormalizeSmallString(bytes32) (runs: 325, μ: 3012, ~: 4213) LibStringTest:testStringConcat() (gas: 4003) -LibStringTest:testStringConcat(string,string) (runs: 270, μ: 692304, ~: 604392) +LibStringTest:testStringConcat(string,string) (runs: 325, μ: 698697, ~: 604396) LibStringTest:testStringConcatOriginal() (gas: 4654) LibStringTest:testStringDirectReturn() (gas: 6741) -LibStringTest:testStringDirectReturn(string) (runs: 270, μ: 3001, ~: 2916) +LibStringTest:testStringDirectReturn(string) (runs: 325, μ: 3001, ~: 2916) LibStringTest:testStringEndsWith() (gas: 2829) -LibStringTest:testStringEndsWith(uint256) (runs: 270, μ: 707832, ~: 636483) -LibStringTest:testStringEq(string,string) (runs: 270, μ: 1566, ~: 1567) +LibStringTest:testStringEndsWith(uint256) (runs: 325, μ: 698697, ~: 637115) +LibStringTest:testStringEq(string,string) (runs: 325, μ: 1567, ~: 1567) LibStringTest:testStringEqs() (gas: 2013) LibStringTest:testStringEscapeHTML() (gas: 8427) -LibStringTest:testStringEscapeHTML(uint256) (runs: 270, μ: 722532, ~: 641188) +LibStringTest:testStringEscapeHTML(uint256) (runs: 325, μ: 733465, ~: 641388) LibStringTest:testStringEscapeJSON() (gas: 39797) LibStringTest:testStringEscapeJSONHexEncode() (gas: 727636) LibStringTest:testStringIndexOf() (gas: 17375) -LibStringTest:testStringIndexOf(uint256) (runs: 270, μ: 761039, ~: 644450) +LibStringTest:testStringIndexOf(uint256) (runs: 325, μ: 761492, ~: 644907) LibStringTest:testStringIndicesOf() (gas: 11700) -LibStringTest:testStringIndicesOf(uint256) (runs: 270, μ: 791996, ~: 649014) +LibStringTest:testStringIndicesOf(uint256) (runs: 325, μ: 811591, ~: 648523) LibStringTest:testStringIs7BitASCII() (gas: 205346) -LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 270, μ: 705057, ~: 604340) +LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 325, μ: 726918, ~: 604216) LibStringTest:testStringIs7BitASCIIWithAllowedLookup() (gas: 4939) -LibStringTest:testStringIs7BitASCIIWithAllowedLookupDifferential(bytes,uint128) (runs: 270, μ: 701316, ~: 603924) +LibStringTest:testStringIs7BitASCIIWithAllowedLookupDifferential(bytes,uint128) (runs: 325, μ: 679587, ~: 603922) LibStringTest:testStringLastIndexOf() (gas: 24042) -LibStringTest:testStringLastIndexOf(uint256) (runs: 270, μ: 713928, ~: 646037) +LibStringTest:testStringLastIndexOf(uint256) (runs: 325, μ: 718874, ~: 646295) LibStringTest:testStringLowerDifferential() (gas: 3405674) -LibStringTest:testStringLowerDifferential(string) (runs: 270, μ: 8262, ~: 7991) +LibStringTest:testStringLowerDifferential(string) (runs: 325, μ: 8331, ~: 7991) LibStringTest:testStringLowerOriginal() (gas: 1219) LibStringTest:testStringPackAndUnpackOne() (gas: 756426) -LibStringTest:testStringPackAndUnpackOne(string) (runs: 270, μ: 700207, ~: 603174) -LibStringTest:testStringPackAndUnpackOneDifferential(string) (runs: 270, μ: 699203, ~: 603035) +LibStringTest:testStringPackAndUnpackOne(string) (runs: 325, μ: 681114, ~: 603179) +LibStringTest:testStringPackAndUnpackOneDifferential(string) (runs: 325, μ: 692621, ~: 603035) LibStringTest:testStringPackAndUnpackTwo() (gas: 916242) -LibStringTest:testStringPackAndUnpackTwo(string,string) (runs: 270, μ: 787970, ~: 604554) -LibStringTest:testStringPackAndUnpackTwoDifferential(string,string) (runs: 270, μ: 714566, ~: 603986) +LibStringTest:testStringPackAndUnpackTwo(string,string) (runs: 325, μ: 770624, ~: 604566) +LibStringTest:testStringPackAndUnpackTwoDifferential(string,string) (runs: 325, μ: 719324, ~: 603980) LibStringTest:testStringRepeat() (gas: 4986) -LibStringTest:testStringRepeat(string,uint256) (runs: 270, μ: 672513, ~: 606501) +LibStringTest:testStringRepeat(string,uint256) (runs: 325, μ: 689001, ~: 606462) LibStringTest:testStringRepeatOriginal() (gas: 9620) -LibStringTest:testStringReplace(uint256) (runs: 270, μ: 817286, ~: 649935) +LibStringTest:testStringReplace(uint256) (runs: 325, μ: 816129, ~: 651099) LibStringTest:testStringReplaceLong() (gas: 8573) LibStringTest:testStringReplaceMedium() (gas: 7581) LibStringTest:testStringReplaceShort() (gas: 12329) LibStringTest:testStringRuneCount() (gas: 3035897) -LibStringTest:testStringRuneCountDifferential(string) (runs: 270, μ: 6093, ~: 5878) +LibStringTest:testStringRuneCountDifferential(string) (runs: 325, μ: 6143, ~: 5889) LibStringTest:testStringSlice() (gas: 9257) -LibStringTest:testStringSlice(bytes,uint256,uint256) (runs: 270, μ: 734073, ~: 628188) -LibStringTest:testStringSlice(uint256) (runs: 270, μ: 842409, ~: 644852) +LibStringTest:testStringSlice(bytes,uint256,uint256) (runs: 325, μ: 737435, ~: 628279) +LibStringTest:testStringSlice(uint256) (runs: 325, μ: 846706, ~: 645071) LibStringTest:testStringSplit() (gas: 20309) -LibStringTest:testStringSplit(uint256) (runs: 270, μ: 773354, ~: 648041) +LibStringTest:testStringSplit(uint256) (runs: 325, μ: 762163, ~: 648059) LibStringTest:testStringStartsWith() (gas: 2544) -LibStringTest:testStringStartsWith(uint256) (runs: 270, μ: 793474, ~: 636861) +LibStringTest:testStringStartsWith(uint256) (runs: 325, μ: 801260, ~: 636762) LibStringTest:testStringUpperDifferential() (gas: 3084191) -LibStringTest:testStringUpperDifferential(string) (runs: 270, μ: 8261, ~: 7990) +LibStringTest:testStringUpperDifferential(string) (runs: 325, μ: 8330, ~: 7990) LibStringTest:testStringUpperOriginal() (gas: 1218) LibStringTest:testTo7BitASCIIAllowedLookup() (gas: 3113) LibStringTest:testToHexStringFixedLengthInsufficientLength() (gas: 3395) LibStringTest:testToHexStringFixedLengthPositiveNumberLong() (gas: 3699) LibStringTest:testToHexStringFixedLengthPositiveNumberShort() (gas: 940) LibStringTest:testToHexStringFixedLengthUint256Max() (gas: 3656) -LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 270, μ: 8350, ~: 6009) +LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 325, μ: 8258, ~: 6478) LibStringTest:testToHexStringPositiveNumber() (gas: 865) LibStringTest:testToHexStringUint256Max() (gas: 3398) LibStringTest:testToHexStringZero() (gas: 805) -LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 270, μ: 1947, ~: 1465) +LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 325, μ: 1930, ~: 1548) LibStringTest:testToMinimalHexStringNoPrefixPositiveNumber() (gas: 3426) LibStringTest:testToMinimalHexStringNoPrefixUint256Max() (gas: 3424) LibStringTest:testToMinimalHexStringNoPrefixZero() (gas: 831) -LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 270, μ: 1968, ~: 1487) +LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 325, μ: 1950, ~: 1570) LibStringTest:testToMinimalHexStringPositiveNumber() (gas: 3556) LibStringTest:testToMinimalHexStringUint256Max() (gas: 3470) LibStringTest:testToMinimalHexStringZero() (gas: 829) -LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 270, μ: 1995, ~: 1512) +LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 325, μ: 1978, ~: 1595) LibStringTest:testToSmallString() (gas: 4448) LibStringTest:testToStringPositiveNumber() (gas: 910) LibStringTest:testToStringPositiveNumberBrutalized() (gas: 603313) -LibStringTest:testToStringSignedDifferential(int256) (runs: 270, μ: 726986, ~: 606034) +LibStringTest:testToStringSignedDifferential(int256) (runs: 325, μ: 740316, ~: 606159) LibStringTest:testToStringSignedGas() (gas: 7305) -LibStringTest:testToStringSignedMemory(int256) (runs: 270, μ: 705079, ~: 604269) +LibStringTest:testToStringSignedMemory(int256) (runs: 325, μ: 693609, ~: 604280) LibStringTest:testToStringSignedOriginalGas() (gas: 9839) LibStringTest:testToStringUint256Max() (gas: 6687) LibStringTest:testToStringUint256MaxBrutalized() (gas: 614604) LibStringTest:testToStringZero() (gas: 699) LibStringTest:testToStringZeroBrutalized() (gas: 602785) -LibStringTest:testToStringZeroRightPadded(uint256) (runs: 270, μ: 737882, ~: 603642) +LibStringTest:testToStringZeroRightPadded(uint256) (runs: 325, μ: 735357, ~: 603690) LibStringTest:test__codesize() (gas: 43124) LibZipTest:testCdCompress() (gas: 126842) -LibZipTest:testCdCompressDecompress(bytes) (runs: 270, μ: 787305, ~: 657795) -LibZipTest:testCdCompressDecompress(uint256) (runs: 270, μ: 792219, ~: 676599) +LibZipTest:testCdCompressDecompress(bytes) (runs: 325, μ: 773616, ~: 657785) +LibZipTest:testCdCompressDecompress(uint256) (runs: 325, μ: 795569, ~: 677718) LibZipTest:testCdDecompressOnInvalidInput() (gas: 1397) LibZipTest:testCdFallback() (gas: 5622174) -LibZipTest:testCdFallback(bytes,uint256) (runs: 270, μ: 1170265, ~: 1061186) -LibZipTest:testCdFallbackDecompressor(bytes) (runs: 270, μ: 121089, ~: 117618) -LibZipTest:testCdFallbackDecompressor(uint256) (runs: 270, μ: 173157, ~: 159528) -LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 270, μ: 592, ~: 585) -LibZipTest:testDecompressWontRevert(bytes) (runs: 270, μ: 757506, ~: 637424) +LibZipTest:testCdFallback(bytes,uint256) (runs: 325, μ: 1159526, ~: 1062745) +LibZipTest:testCdFallbackDecompressor(bytes) (runs: 325, μ: 121390, ~: 117879) +LibZipTest:testCdFallbackDecompressor(uint256) (runs: 325, μ: 173538, ~: 157760) +LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 325, μ: 592, ~: 585) +LibZipTest:testDecompressWontRevert(bytes) (runs: 325, μ: 766425, ~: 637338) LibZipTest:testFlzCompressDecompress() (gas: 1254342) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 270, μ: 760839, ~: 677273) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 325, μ: 734443, ~: 669652) LibZipTest:testFlzCompressDecompress2() (gas: 763987) LibZipTest:test__codesize() (gas: 20417) -LifebuoyTest:testLifebuoyCreateDeployment(address,address,uint256) (runs: 270, μ: 3084014, ~: 3367280) -LifebuoyTest:testLifebuoyOwnedCloneRescuePermissions(bytes32) (runs: 270, μ: 1367578, ~: 1367483) -LifebuoyTest:testLifebuoyOwnedRescuePermissions(bytes32) (runs: 270, μ: 1370750, ~: 1362885) -LifebuoyTest:testLifebuoyRescuePermissions(bytes32) (runs: 270, μ: 1351326, ~: 1331144) +LifebuoyTest:testLifebuoyCreateDeployment(address,address,uint256) (runs: 325, μ: 3062099, ~: 3342222) +LifebuoyTest:testLifebuoyOwnedCloneRescuePermissions(bytes32) (runs: 325, μ: 1367554, ~: 1367483) +LifebuoyTest:testLifebuoyOwnedRescuePermissions(bytes32) (runs: 325, μ: 1371420, ~: 1362888) +LifebuoyTest:testLifebuoyRescuePermissions(bytes32) (runs: 325, μ: 1350276, ~: 1331048) LifebuoyTest:testLockEverything() (gas: 960877) LifebuoyTest:testLockRescue() (gas: 978964) LifebuoyTest:testLockRescueETH() (gas: 991228) -LifebuoyTest:testRescueAll(bytes32) (runs: 270, μ: 1707168, ~: 992836) +LifebuoyTest:testRescueAll(bytes32) (runs: 325, μ: 1586108, ~: 992543) LifebuoyTest:test__codesize() (gas: 45955) MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 985) -MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 270, μ: 719251, ~: 640693) -MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 270, μ: 38033, ~: 38470) -MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 270, μ: 6499, ~: 6467) -MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 270, μ: 895732, ~: 810894) +MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 325, μ: 732622, ~: 640807) +MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 325, μ: 37736, ~: 38119) +MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 325, μ: 6505, ~: 6490) +MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 325, μ: 919768, ~: 810270) MerkleProofLibTest:testVerifyMultiProofIsInvalid() (gas: 638379) MerkleProofLibTest:testVerifyMultiProofIsValid() (gas: 640255) MerkleProofLibTest:testVerifyMultiProofMalicious() (gas: 7918) -MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 270, μ: 859550, ~: 794526) -MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 270, μ: 4039, ~: 3906) +MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 325, μ: 885192, ~: 792409) +MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 325, μ: 4046, ~: 3906) MerkleProofLibTest:testVerifyProofBasicCaseIsInvalid() (gas: 3626) MerkleProofLibTest:testVerifyProofBasicCaseIsValid() (gas: 3590) -MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 270, μ: 2690, ~: 2968) +MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 325, μ: 2697, ~: 2968) MerkleProofLibTest:test__codesize() (gas: 11742) -MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 270, μ: 25473, ~: 25479) +MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 325, μ: 25470, ~: 25477) MetadataReaderLibTest:testReadBytes32String() (gas: 664725) MetadataReaderLibTest:testReadBytes32StringTruncated() (gas: 775178) -MetadataReaderLibTest:testReadString(uint256) (runs: 270, μ: 851919, ~: 719731) +MetadataReaderLibTest:testReadString(uint256) (runs: 325, μ: 841075, ~: 719663) MetadataReaderLibTest:testReadStringChopped() (gas: 272350) -MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 270, μ: 825173, ~: 707264) +MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 325, μ: 816106, ~: 707255) MetadataReaderLibTest:testReadUint() (gas: 921729) -MetadataReaderLibTest:testReadUint(uint256) (runs: 270, μ: 46846, ~: 47136) +MetadataReaderLibTest:testReadUint(uint256) (runs: 325, μ: 46654, ~: 47136) MetadataReaderLibTest:test__codesize() (gas: 8122) -MinHeapLibTest:testHeapEnqueue(uint256) (runs: 270, μ: 181420, ~: 181221) -MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 270, μ: 606986, ~: 496113) +MinHeapLibTest:testHeapEnqueue(uint256) (runs: 325, μ: 181067, ~: 181221) +MinHeapLibTest:testHeapEnqueue2(uint256) (runs: 325, μ: 586191, ~: 453625) MinHeapLibTest:testHeapEnqueueGas() (gas: 841356) -MinHeapLibTest:testHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 270, μ: 47258, ~: 28359) -MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 270, μ: 684, ~: 517) -MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 270, μ: 116962, ~: 124988) -MinHeapLibTest:testHeapPushPop(uint256) (runs: 270, μ: 258770, ~: 269956) -MinHeapLibTest:testHeapPushPopLength(uint256) (runs: 270, μ: 922639, ~: 838139) -MinHeapLibTest:testHeapReplace(uint256) (runs: 270, μ: 294983, ~: 293883) -MinHeapLibTest:testHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 270, μ: 44685, ~: 28717) -MinHeapLibTest:testHeapRoot(uint256) (runs: 270, μ: 48492, ~: 67348) -MinHeapLibTest:testHeapSmallest(uint256) (runs: 270, μ: 1317938, ~: 1116824) +MinHeapLibTest:testHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 325, μ: 47326, ~: 28359) +MinHeapLibTest:testHeapPSiftTrick(uint256,uint256,uint256) (runs: 325, μ: 687, ~: 517) +MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 325, μ: 117100, ~: 124980) +MinHeapLibTest:testHeapPushPop(uint256) (runs: 325, μ: 248652, ~: 235913) +MinHeapLibTest:testHeapPushPopLength(uint256) (runs: 325, μ: 926666, ~: 851400) +MinHeapLibTest:testHeapReplace(uint256) (runs: 325, μ: 292617, ~: 288455) +MinHeapLibTest:testHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 325, μ: 45593, ~: 50631) +MinHeapLibTest:testHeapRoot(uint256) (runs: 325, μ: 48379, ~: 67348) +MinHeapLibTest:testHeapSmallest(uint256) (runs: 325, μ: 1325543, ~: 1113409) MinHeapLibTest:testHeapSmallestGas() (gas: 50069382) -MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 270, μ: 1609883, ~: 932307) -MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 270, μ: 848501, ~: 758222) +MinHeapLibTest:testMemHeapEnqueue(uint256) (runs: 325, μ: 1668094, ~: 953566) +MinHeapLibTest:testMemHeapEnqueue2(uint256) (runs: 325, μ: 860250, ~: 753479) MinHeapLibTest:testMemHeapEnqueueGas() (gas: 249458) -MinHeapLibTest:testMemHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 270, μ: 24995, ~: 23899) -MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 270, μ: 954932, ~: 876042) +MinHeapLibTest:testMemHeapEnqueueZeroMaxLengthReverts(uint256) (runs: 325, μ: 24975, ~: 23896) +MinHeapLibTest:testMemHeapPushAndPop(uint256) (runs: 325, μ: 950996, ~: 841638) MinHeapLibTest:testMemHeapPushGas() (gas: 35596) -MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 270, μ: 1494707, ~: 1104348) -MinHeapLibTest:testMemHeapPushPopLength(uint256) (runs: 270, μ: 846575, ~: 713015) -MinHeapLibTest:testMemHeapReplace(uint256) (runs: 270, μ: 967721, ~: 792818) -MinHeapLibTest:testMemHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 270, μ: 25622, ~: 25248) -MinHeapLibTest:testMemHeapRoot(uint256) (runs: 270, μ: 822948, ~: 655932) -MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 270, μ: 977980, ~: 767633) +MinHeapLibTest:testMemHeapPushPop(uint256) (runs: 325, μ: 1466839, ~: 1096605) +MinHeapLibTest:testMemHeapPushPopLength(uint256) (runs: 325, μ: 845904, ~: 715320) +MinHeapLibTest:testMemHeapReplace(uint256) (runs: 325, μ: 955672, ~: 781921) +MinHeapLibTest:testMemHeapReplaceOrPopEmptyHeapReverts(uint256) (runs: 325, μ: 25651, ~: 25257) +MinHeapLibTest:testMemHeapRoot(uint256) (runs: 325, μ: 808574, ~: 655932) +MinHeapLibTest:testMemHeapSmallest(uint256) (runs: 325, μ: 978783, ~: 767924) MinHeapLibTest:testMemHeapSmallestGas() (gas: 2985537) MinHeapLibTest:testMemHeapWriteAndReadFromStorage() (gas: 67756) MinHeapLibTest:testMemHeapWriteAndReadFromStorage2() (gas: 67774) @@ -1051,66 +1051,66 @@ MulticallableTest:testMulticallableBenchmark() (gas: 29738) MulticallableTest:testMulticallableOriginalBenchmark() (gas: 38715) MulticallableTest:testMulticallablePreservesMsgSender() (gas: 11344) MulticallableTest:testMulticallableReturnDataIsProperlyEncoded() (gas: 407906) -MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 270, μ: 259972, ~: 399948) -MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 270, μ: 260572, ~: 404683) +MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 325, μ: 235778, ~: 43232) +MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 325, μ: 235882, ~: 34305) MulticallableTest:testMulticallableRevertWithCustomError() (gas: 11861) MulticallableTest:testMulticallableRevertWithMessage() (gas: 13511) -MulticallableTest:testMulticallableRevertWithMessage(string) (runs: 270, μ: 14122, ~: 13972) +MulticallableTest:testMulticallableRevertWithMessage(string) (runs: 325, μ: 14121, ~: 13972) MulticallableTest:testMulticallableRevertWithNothing() (gas: 11768) MulticallableTest:testMulticallableWithNoData() (gas: 6489) MulticallableTest:test__codesize() (gas: 9897) OwnableRolesTest:testBytecodeSize() (gas: 350635) -OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 270, μ: 41544, ~: 42162) -OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 270, μ: 28052, ~: 28554) +OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 325, μ: 41509, ~: 42162) +OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 325, μ: 27883, ~: 25317) OwnableRolesTest:testGrantRoles() (gas: 36348) OwnableRolesTest:testHandoverOwnership() (gas: 32807) -OwnableRolesTest:testHandoverOwnership(address) (runs: 270, μ: 32845, ~: 32832) +OwnableRolesTest:testHandoverOwnership(address) (runs: 325, μ: 32844, ~: 32832) OwnableRolesTest:testHandoverOwnershipAfterExpiration() (gas: 37152) OwnableRolesTest:testHandoverOwnershipBeforeExpiration() (gas: 28907) OwnableRolesTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35826) OwnableRolesTest:testHandoverOwnershipWithCancellation() (gas: 31309) -OwnableRolesTest:testHasAllRoles(address,uint256,uint256,uint256,bool) (runs: 270, μ: 34003, ~: 34006) -OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 270, μ: 33646, ~: 33793) +OwnableRolesTest:testHasAllRoles(address,uint256,uint256,uint256,bool) (runs: 325, μ: 34003, ~: 34006) +OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 325, μ: 33610, ~: 33793) OwnableRolesTest:testInitializeOwnerDirect() (gas: 16950) -OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 270, μ: 21086, ~: 30023) +OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 325, μ: 21032, ~: 30023) OwnableRolesTest:testOnlyOwnerOrRolesModifier() (gas: 36455) -OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 270, μ: 55694, ~: 55322) -OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 270, μ: 56356, ~: 58115) -OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 270, μ: 56639, ~: 57489) +OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 325, μ: 55754, ~: 55322) +OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 325, μ: 56325, ~: 58115) +OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 325, μ: 56715, ~: 57489) OwnableRolesTest:testOrdinalsFromRoles() (gas: 3756443) -OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 270, μ: 58876, ~: 39765) +OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 325, μ: 58202, ~: 40937) OwnableRolesTest:testOwnershipHandoverValidForDefaultValue() (gas: 5825) OwnableRolesTest:testRenounceOwnership() (gas: 12945) OwnableRolesTest:testRolesFromOrdinals() (gas: 652364) -OwnableRolesTest:testRolesFromOrdinals(uint8[]) (runs: 270, μ: 81110, ~: 84447) +OwnableRolesTest:testRolesFromOrdinals(uint8[]) (runs: 325, μ: 81508, ~: 84447) OwnableRolesTest:testSetOwnerDirect() (gas: 18073) -OwnableRolesTest:testSetOwnerDirect(address) (runs: 270, μ: 18175, ~: 18193) -OwnableRolesTest:testSetRolesDirect(uint256) (runs: 270, μ: 101553, ~: 101615) +OwnableRolesTest:testSetOwnerDirect(address) (runs: 325, μ: 18178, ~: 18193) +OwnableRolesTest:testSetRolesDirect(uint256) (runs: 325, μ: 101568, ~: 101614) OwnableRolesTest:testTransferOwnership() (gas: 19603) -OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 270, μ: 14448, ~: 12589) +OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 325, μ: 14398, ~: 12589) OwnableRolesTest:test__codesize() (gas: 21230) OwnableTest:testBytecodeSize() (gas: 235158) OwnableTest:testHandoverOwnership() (gas: 32540) -OwnableTest:testHandoverOwnership(address) (runs: 270, μ: 32560, ~: 32547) +OwnableTest:testHandoverOwnership(address) (runs: 325, μ: 32560, ~: 32547) OwnableTest:testHandoverOwnershipAfterExpiration() (gas: 36930) OwnableTest:testHandoverOwnershipBeforeExpiration() (gas: 28756) OwnableTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35560) OwnableTest:testHandoverOwnershipWithCancellation() (gas: 30952) OwnableTest:testInitializeOwnerDirect() (gas: 16825) -OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 270, μ: 21032, ~: 30001) +OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 325, μ: 20979, ~: 30001) OwnableTest:testOwnershipHandoverValidForDefaultValue() (gas: 5737) OwnableTest:testRenounceOwnership() (gas: 12779) OwnableTest:testSetOwnerDirect() (gas: 17983) -OwnableTest:testSetOwnerDirect(address) (runs: 270, μ: 18104, ~: 18104) +OwnableTest:testSetOwnerDirect(address) (runs: 325, μ: 18104, ~: 18104) OwnableTest:testTransferOwnership() (gas: 19446) -OwnableTest:testTransferOwnership(address,bool,bool) (runs: 270, μ: 14237, ~: 12395) +OwnableTest:testTransferOwnership(address,bool,bool) (runs: 325, μ: 14232, ~: 12395) OwnableTest:test__codesize() (gas: 10847) -P256Test:testP256Verify(uint256,bytes32) (runs: 270, μ: 493539, ~: 493423) +P256Test:testP256Verify(uint256,bytes32) (runs: 325, μ: 493470, ~: 493398) P256Test:testP256VerifyMalleableRIPPrecompile() (gas: 341155) P256Test:testP256VerifyMalleableVerifier() (gas: 341175) P256Test:testP256VerifyNonMalleableRIPPrecompile() (gas: 341117) P256Test:testP256VerifyNonMalleableVerifier() (gas: 341095) -P256Test:testP256VerifyNotDeployedReverts(bytes32,bytes32,bytes32,bytes32,bytes32,bool) (runs: 270, μ: 10815, ~: 10799) +P256Test:testP256VerifyNotDeployedReverts(bytes32,bytes32,bytes32,bytes32,bytes32,bool) (runs: 325, μ: 10815, ~: 10799) P256Test:testP256VerifyOutOfBounds() (gas: 201377) P256Test:testP256VerifyWycheproof() (gas: 3268) P256Test:test__codesize() (gas: 11373) @@ -1121,8 +1121,8 @@ ReceiverTest:testOnERC721Received() (gas: 65589) ReceiverTest:test__codesize() (gas: 3053) RedBlackTreeLibTest:testRedBlackTreeBenchUint160() (gas: 3428194) RedBlackTreeLibTest:testRedBlackTreeBenchUint256() (gas: 5841865) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 270, μ: 578806, ~: 566602) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 270, μ: 427673, ~: 426469) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 325, μ: 536861, ~: 535916) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 325, μ: 422079, ~: 431341) RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove3() (gas: 21564928) RedBlackTreeLibTest:testRedBlackTreeInsertBenchStep() (gas: 3702908) RedBlackTreeLibTest:testRedBlackTreeInsertBenchUint160() (gas: 3468526) @@ -1131,16 +1131,16 @@ RedBlackTreeLibTest:testRedBlackTreeInsertOneGas() (gas: 45558) RedBlackTreeLibTest:testRedBlackTreeInsertTenGas() (gas: 282691) RedBlackTreeLibTest:testRedBlackTreeInsertThreeGas() (gas: 96175) RedBlackTreeLibTest:testRedBlackTreeInsertTwoGas() (gas: 69785) -RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 270, μ: 246422, ~: 246509) -RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 270, μ: 250748, ~: 238786) -RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 270, μ: 285154, ~: 284010) +RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 325, μ: 256655, ~: 250257) +RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 325, μ: 238795, ~: 226911) +RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 325, μ: 272416, ~: 269887) RedBlackTreeLibTest:testRedBlackTreePointers() (gas: 91643) RedBlackTreeLibTest:testRedBlackTreeRejectsEmptyValue() (gas: 3232) RedBlackTreeLibTest:testRedBlackTreeRemoveViaPointer() (gas: 58157) RedBlackTreeLibTest:testRedBlackTreeTreeFullReverts() (gas: 50317) RedBlackTreeLibTest:testRedBlackTreeTryInsertAndRemove() (gas: 56062) RedBlackTreeLibTest:testRedBlackTreeValues() (gas: 188759) -RedBlackTreeLibTest:testRedBlackTreeValues(uint256) (runs: 270, μ: 376186, ~: 238696) +RedBlackTreeLibTest:testRedBlackTreeValues(uint256) (runs: 325, μ: 394991, ~: 244717) RedBlackTreeLibTest:test__codesize() (gas: 13174) ReentrancyGuardTest:testRecursiveDirectUnguardedCall() (gas: 34276) ReentrancyGuardTest:testRecursiveIndirectUnguardedCall() (gas: 47727) @@ -1150,109 +1150,109 @@ ReentrancyGuardTest:testRevertRecursiveDirectGuardedCall() (gas: 55123) ReentrancyGuardTest:testRevertRecursiveIndirectGuardedCall() (gas: 56529) ReentrancyGuardTest:testRevertRemoteCallback() (gas: 56230) ReentrancyGuardTest:test__codesize() (gas: 4403) -SSTORE2Test:testReadRevertsOnZeroCodeAddress(address) (runs: 270, μ: 101405, ~: 30000) +SSTORE2Test:testReadRevertsOnZeroCodeAddress(address) (runs: 325, μ: 91916, ~: 30000) SSTORE2Test:testReadSlicing() (gas: 48874) SSTORE2Test:testWriteRead() (gas: 35880) -SSTORE2Test:testWriteRead(uint256,uint256) (runs: 270, μ: 1042762, ~: 67190) -SSTORE2Test:testWriteReadCounterfactual(bytes,bytes32,address) (runs: 270, μ: 4772651, ~: 108268) +SSTORE2Test:testWriteRead(uint256,uint256) (runs: 325, μ: 1083236, ~: 67205) +SSTORE2Test:testWriteReadCounterfactual(bytes,bytes32,address) (runs: 325, μ: 4282013, ~: 108268) SSTORE2Test:testWriteReadCustomBounds() (gas: 33936) SSTORE2Test:testWriteReadCustomStartBound() (gas: 34020) SSTORE2Test:testWriteReadDeterministic() (gas: 70156) -SSTORE2Test:testWriteReadDeterministic(bytes,bytes32) (runs: 270, μ: 3325238, ~: 96934) +SSTORE2Test:testWriteReadDeterministic(bytes,bytes32) (runs: 325, μ: 4268340, ~: 96934) SSTORE2Test:testWriteReadEmptyBound() (gas: 33734) SSTORE2Test:testWriteReadFullBoundedRead() (gas: 35937) SSTORE2Test:testWriteReadFullStartBound() (gas: 33983) SSTORE2Test:testWriteWithTooBigDataReverts() (gas: 97303641) SSTORE2Test:test__codesize() (gas: 8624) -SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 270, μ: 19482, ~: 24780) +SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 325, μ: 19347, ~: 24774) SafeCastLibTest:testSafeCastInt256ToIntBench() (gas: 341694) -SafeCastLibTest:testSafeCastInt256ToIntTrickEquivalence(int256) (runs: 270, μ: 406, ~: 406) -SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 270, μ: 500, ~: 405) -SafeCastLibTest:testSafeCastToUint256(int256) (runs: 270, μ: 1322, ~: 428) -SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 270, μ: 26851, ~: 26139) +SafeCastLibTest:testSafeCastInt256ToIntTrickEquivalence(int256) (runs: 325, μ: 406, ~: 406) +SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 325, μ: 501, ~: 405) +SafeCastLibTest:testSafeCastToUint256(int256) (runs: 325, μ: 1293, ~: 428) +SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 325, μ: 26925, ~: 26165) SafeCastLibTest:testSafeCastUint256ToInt256Bench() (gas: 29380) SafeCastLibTest:testSafeCastUint256ToIntBench() (gas: 330222) SafeCastLibTest:testSafeCastUint256ToUintBench() (gas: 326262) -SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 270, μ: 19216, ~: 24808) +SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 325, μ: 19228, ~: 24811) SafeCastLibTest:test__codesize() (gas: 23416) -SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 270, μ: 112798, ~: 124082) +SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 325, μ: 111315, ~: 124077) SafeTransferLibTest:testApproveWithMissingReturn() (gas: 32462) -SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 270, μ: 32609, ~: 32682) +SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 325, μ: 32560, ~: 32682) SafeTransferLibTest:testApproveWithNonContract() (gas: 2967) -SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 270, μ: 3765, ~: 3825) -SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 270, μ: 81168, ~: 102088) +SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 325, μ: 3776, ~: 3825) +SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 325, μ: 81260, ~: 102088) SafeTransferLibTest:testApproveWithRetry() (gas: 790140) -SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 270, μ: 790137, ~: 790310) +SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 325, μ: 790049, ~: 790310) SafeTransferLibTest:testApproveWithRetryWithNonContract() (gas: 2990) -SafeTransferLibTest:testApproveWithRetryWithNonContract(address,address,uint256) (runs: 270, μ: 3784, ~: 3844) +SafeTransferLibTest:testApproveWithRetryWithNonContract(address,address,uint256) (runs: 325, μ: 3795, ~: 3844) SafeTransferLibTest:testApproveWithReturnsFalseReverts() (gas: 10122) -SafeTransferLibTest:testApproveWithReturnsFalseReverts(address,uint256) (runs: 270, μ: 10276, ~: 10275) +SafeTransferLibTest:testApproveWithReturnsFalseReverts(address,uint256) (runs: 325, μ: 10276, ~: 10275) SafeTransferLibTest:testApproveWithReturnsTooLittleReverts() (gas: 10026) -SafeTransferLibTest:testApproveWithReturnsTooLittleReverts(address,uint256) (runs: 270, μ: 10205, ~: 10204) +SafeTransferLibTest:testApproveWithReturnsTooLittleReverts(address,uint256) (runs: 325, μ: 10205, ~: 10204) SafeTransferLibTest:testApproveWithReturnsTooMuch() (gas: 32913) -SafeTransferLibTest:testApproveWithReturnsTooMuch(address,uint256) (runs: 270, μ: 32993, ~: 33066) -SafeTransferLibTest:testApproveWithReturnsTwoReverts(address,uint256) (runs: 270, μ: 10233, ~: 10232) +SafeTransferLibTest:testApproveWithReturnsTooMuch(address,uint256) (runs: 325, μ: 32945, ~: 33066) +SafeTransferLibTest:testApproveWithReturnsTwoReverts(address,uint256) (runs: 325, μ: 10233, ~: 10232) SafeTransferLibTest:testApproveWithRevertingReverts() (gas: 9983) -SafeTransferLibTest:testApproveWithRevertingReverts(address,uint256) (runs: 270, μ: 10194, ~: 10193) +SafeTransferLibTest:testApproveWithRevertingReverts(address,uint256) (runs: 325, μ: 10194, ~: 10193) SafeTransferLibTest:testApproveWithStandardERC20() (gas: 32348) -SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 270, μ: 32497, ~: 32570) +SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 325, μ: 32448, ~: 32570) SafeTransferLibTest:testBalanceOfStandardERC20() (gas: 7852) -SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 270, μ: 37625, ~: 38062) +SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 325, μ: 37685, ~: 38062) SafeTransferLibTest:testForceTransferETHToGriever() (gas: 1511587) -SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 270, μ: 536923, ~: 570885) +SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 325, μ: 535570, ~: 570885) SafeTransferLibTest:testPermit2() (gas: 90097) -SafeTransferLibTest:testPermit2InvalidAmount(uint256) (runs: 270, μ: 103408, ~: 103334) +SafeTransferLibTest:testPermit2InvalidAmount(uint256) (runs: 325, μ: 103412, ~: 103363) SafeTransferLibTest:testPermit2OnDAI() (gas: 90296) -SafeTransferLibTest:testPermit2TransferFromInvalidAmount(uint256) (runs: 270, μ: 137583, ~: 137830) +SafeTransferLibTest:testPermit2TransferFromInvalidAmount(uint256) (runs: 325, μ: 137556, ~: 137829) SafeTransferLibTest:testSimplePermit2AndPermit2TransferFrom() (gas: 1136342) SafeTransferLibTest:testSimplePermit2AndPermit2TransferFromGas() (gas: 141122) SafeTransferLibTest:testTransferAllETH() (gas: 34643) -SafeTransferLibTest:testTransferAllETH(bytes32) (runs: 270, μ: 57052, ~: 57052) +SafeTransferLibTest:testTransferAllETH(bytes32) (runs: 325, μ: 57052, ~: 57052) SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts() (gas: 10782) -SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts(uint256) (runs: 270, μ: 10869, ~: 10869) +SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts(uint256) (runs: 325, μ: 10869, ~: 10869) SafeTransferLibTest:testTransferAllFromWithStandardERC20() (gas: 33702) -SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 270, μ: 58288, ~: 58274) +SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 325, μ: 58285, ~: 58272) SafeTransferLibTest:testTransferAllWithStandardERC20() (gas: 31014) -SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 270, μ: 40084, ~: 40082) +SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 325, μ: 40084, ~: 40082) SafeTransferLibTest:testTransferETH() (gas: 34622) -SafeTransferLibTest:testTransferETH(bytes32,uint256) (runs: 270, μ: 56920, ~: 57320) +SafeTransferLibTest:testTransferETH(bytes32,uint256) (runs: 325, μ: 56904, ~: 57320) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts() (gas: 10851) -SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 270, μ: 10770, ~: 10888) -SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 270, μ: 750661, ~: 677776) +SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 325, μ: 10705, ~: 10888) +SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 325, μ: 756588, ~: 677906) SafeTransferLibTest:testTransferFromWithMissingReturn() (gas: 542572) -SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 270, μ: 621564, ~: 543467) +SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 325, μ: 620805, ~: 543448) SafeTransferLibTest:testTransferFromWithNonContract() (gas: 3066) -SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 270, μ: 4275, ~: 4288) -SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 270, μ: 769434, ~: 593681) +SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 325, μ: 4278, ~: 4288) +SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 325, μ: 748523, ~: 593667) SafeTransferLibTest:testTransferFromWithReturnsFalseReverts() (gas: 508990) -SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 270, μ: 594621, ~: 509289) +SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 325, μ: 595856, ~: 509343) SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts() (gas: 508723) -SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 270, μ: 620729, ~: 509124) +SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 325, μ: 623615, ~: 509124) SafeTransferLibTest:testTransferFromWithReturnsTooMuch() (gas: 543523) -SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 270, μ: 634568, ~: 544260) -SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 270, μ: 588935, ~: 509229) +SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 325, μ: 638784, ~: 544260) +SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 325, μ: 617248, ~: 509234) SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 501435) -SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 270, μ: 546705, ~: 501913) +SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 325, μ: 560657, ~: 501913) SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 541756) -SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 270, μ: 653379, ~: 541971) -SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 270, μ: 720725, ~: 621110) +SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 325, μ: 651827, ~: 541637) +SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 325, μ: 721941, ~: 623072) SafeTransferLibTest:testTransferWithMissingReturn() (gas: 529238) -SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 270, μ: 618172, ~: 529603) +SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 325, μ: 625039, ~: 529603) SafeTransferLibTest:testTransferWithNonContract() (gas: 3010) -SafeTransferLibTest:testTransferWithNonContract(bytes32,address,uint256) (runs: 270, μ: 26314, ~: 26313) -SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 270, μ: 683961, ~: 595210) +SafeTransferLibTest:testTransferWithNonContract(bytes32,address,uint256) (runs: 325, μ: 26314, ~: 26313) +SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 325, μ: 711953, ~: 576209) SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 506056) -SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 270, μ: 577590, ~: 506047) +SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 325, μ: 593116, ~: 506074) SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 505624) -SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 270, μ: 568831, ~: 505971) +SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 325, μ: 591064, ~: 505998) SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 530036) -SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 270, μ: 640524, ~: 530114) -SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 270, μ: 614230, ~: 506074) +SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 325, μ: 651007, ~: 530114) +SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 325, μ: 609242, ~: 506074) SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 776897) -SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 270, μ: 644503, ~: 506010) +SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 325, μ: 634984, ~: 506010) SafeTransferLibTest:testTransferWithStandardERC20() (gas: 530095) -SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 270, μ: 635473, ~: 530055) -SafeTransferLibTest:testTrySafeTransferFrom(address,address,uint256) (runs: 270, μ: 108866, ~: 112161) +SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 325, μ: 635969, ~: 530050) +SafeTransferLibTest:testTrySafeTransferFrom(address,address,uint256) (runs: 325, μ: 109297, ~: 112161) SafeTransferLibTest:testTryTransferAllETH() (gas: 148698) SafeTransferLibTest:testTryTransferETH() (gas: 148701) SafeTransferLibTest:testTryTransferETHWithNoGrief() (gas: 537025) @@ -1265,7 +1265,7 @@ SignatureCheckerLibTest:testERC6492PreDeploy() (gas: 1227033) SignatureCheckerLibTest:testERC6492WithoutRevertingVerifier() (gas: 61874) SignatureCheckerLibTest:testEmptyCalldataHelpers() (gas: 3987) SignatureCheckerLibTest:testEtchERC6492RevertingVerifier() (gas: 56459) -SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 270, μ: 55831, ~: 45511) +SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 325, μ: 55480, ~: 45511) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSignature() (gas: 21300) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSigner() (gas: 30800) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithMatchingSignerAndSignature() (gas: 17697) @@ -1276,13 +1276,13 @@ SignatureCheckerLibTest:testSignatureCheckerOnWalletWithInvalidSigner() (gas: 25 SignatureCheckerLibTest:testSignatureCheckerOnWalletWithMatchingSignerAndSignature() (gas: 64518) SignatureCheckerLibTest:testSignatureCheckerOnWalletWithWrongSignedMessageHash() (gas: 64597) SignatureCheckerLibTest:testSignatureCheckerOnWalletWithZeroAddressSigner() (gas: 12364) -SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes) (runs: 270, μ: 1284, ~: 1284) -SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes32) (runs: 270, μ: 481, ~: 481) +SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes) (runs: 325, μ: 1285, ~: 1284) +SignatureCheckerLibTest:testToEthSignedMessageHashDifferential(bytes32) (runs: 325, μ: 481, ~: 481) SignatureCheckerLibTest:test__codesize() (gas: 15448) SoladyTest:test__codesize() (gas: 840) TestPlus:test__codesize() (gas: 406) -TestPlusrTest:testRandomUnique(bytes32,bytes32) (runs: 270, μ: 113690, ~: 113688) -TestPlusrTest:testRandomUniqueAddress(bytes32,bytes32) (runs: 270, μ: 113402, ~: 113371) +TestPlusrTest:testRandomUnique(bytes32,bytes32) (runs: 325, μ: 113696, ~: 113692) +TestPlusrTest:testRandomUniqueAddress(bytes32,bytes32) (runs: 325, μ: 113407, ~: 113371) TestPlusrTest:test__codesize() (gas: 2162) UUPSUpgradeableTest:testNotDelegatedGuard() (gas: 15875) UUPSUpgradeableTest:testOnlyProxyGuard() (gas: 9217) @@ -1296,7 +1296,7 @@ UUPSUpgradeableTest:testUpgradeToRevertWithUpgradeFailed() (gas: 18819) UUPSUpgradeableTest:test__codesize() (gas: 6059) UpgradeableBeaconTest:testInitializeUpgradeableSolidityBeacon() (gas: 296434) UpgradeableBeaconTest:testInitializeUpgradeableYulBeacon() (gas: 335455) -UpgradeableBeaconTest:testUpgradeableBeacon(uint256) (runs: 270, μ: 246807, ~: 255860) +UpgradeableBeaconTest:testUpgradeableBeacon(uint256) (runs: 325, μ: 244999, ~: 255829) UpgradeableBeaconTest:testUpgradeableSolidityBeaconOnlyFnSelectorNotRecognised() (gas: 234560) UpgradeableBeaconTest:testUpgradeableSolidityBeaconOnlyOwnerFunctions() (gas: 260339) UpgradeableBeaconTest:testUpgradeableYulBeaconOnlyFnSelectorNotRecognised() (gas: 172796) @@ -1305,12 +1305,12 @@ UpgradeableBeaconTest:test__codesize() (gas: 8511) WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 10, calls: 150, reverts: 83) WETHInvariants:test__codesize() (gas: 5178) WETHTest:testDeposit() (gas: 62272) -WETHTest:testDeposit(uint256) (runs: 270, μ: 61602, ~: 62566) +WETHTest:testDeposit(uint256) (runs: 325, μ: 61200, ~: 62566) WETHTest:testFallbackDeposit() (gas: 61978) -WETHTest:testFallbackDeposit(uint256) (runs: 270, μ: 61263, ~: 62227) +WETHTest:testFallbackDeposit(uint256) (runs: 325, μ: 60861, ~: 62227) WETHTest:testMetadata() (gas: 9013) WETHTest:testPartialWithdraw() (gas: 70422) WETHTest:testWithdraw() (gas: 52047) -WETHTest:testWithdraw(uint256,uint256) (runs: 270, μ: 70315, ~: 71175) +WETHTest:testWithdraw(uint256,uint256) (runs: 325, μ: 69775, ~: 71175) WETHTest:testWithdrawToContractWithoutReceiveReverts() (gas: 90164) WETHTest:test__codesize() (gas: 9410) \ No newline at end of file diff --git a/src/utils/DynamicArrayLib.sol b/src/utils/DynamicArrayLib.sol index 36bb70877..9b79a7c8d 100644 --- a/src/utils/DynamicArrayLib.sol +++ b/src/utils/DynamicArrayLib.sol @@ -230,58 +230,63 @@ library DynamicArrayLib { p(result, uint256(data)); } - /// @dev Remove last element of `array.data`, without bounds checking. + /// @dev Removes and returns the last element of `array`. + /// Returns 0 and does not pop anything if the array is empty. function pop(DynamicArray memory array) internal pure returns (uint256 result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) - result := mload(add(o, shl(5, mload(o)))) - // update the array.length - mstore(o, sub(mload(o), 1)) + let n := mload(o) + result := mload(add(o, shl(5, n))) + mstore(o, sub(n, iszero(iszero(n)))) } } - /// @dev Remove last element of `array.data`, without bounds checking. + /// @dev Removes and returns the last element of `array`. + /// Returns 0 and does not pop anything if the array is empty. function popUint256(DynamicArray memory array) internal pure returns (uint256 result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) - result := mload(add(o, shl(5, mload(o)))) - // update the array.length - mstore(o, sub(mload(o), 1)) + let n := mload(o) + result := mload(add(o, shl(5, n))) + mstore(o, sub(n, iszero(iszero(n)))) } } - /// @dev Remove last element of `array.data`, without bounds checking. + /// @dev Removes and returns the last element of `array`. + /// Returns 0 and does not pop anything if the array is empty. function popAddress(DynamicArray memory array) internal pure returns (address result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) - result := mload(add(o, shl(5, mload(o)))) - // update the array.length - mstore(o, sub(mload(o), 1)) + let n := mload(o) + result := mload(add(o, shl(5, n))) + mstore(o, sub(n, iszero(iszero(n)))) } } - /// @dev Remove last element of `array.data`, without bounds checking. + /// @dev Removes and returns the last element of `array`. + /// Returns 0 and does not pop anything if the array is empty. function popBool(DynamicArray memory array) internal pure returns (bool result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) - result := mload(add(o, shl(5, mload(o)))) - // update the array.length - mstore(o, sub(mload(o), 1)) + let n := mload(o) + result := mload(add(o, shl(5, n))) + mstore(o, sub(n, iszero(iszero(n)))) } } - /// @dev Remove last element of `array.data`, without bounds checking. + /// @dev Removes and returns the last element of `array`. + /// Returns 0 and does not pop anything if the array is empty. function popBytes32(DynamicArray memory array) internal pure returns (bytes32 result) { /// @solidity memory-safe-assembly assembly { let o := mload(array) - result := mload(add(o, shl(5, mload(o)))) - // update the array.length - mstore(o, sub(mload(o), 1)) + let n := mload(o) + result := mload(add(o, shl(5, n))) + mstore(o, sub(n, iszero(iszero(n)))) } } diff --git a/test/DynamicArrayLib.t.sol b/test/DynamicArrayLib.t.sol index d239cc21c..93177d2ec 100644 --- a/test/DynamicArrayLib.t.sol +++ b/test/DynamicArrayLib.t.sol @@ -72,7 +72,7 @@ contract DynamicArrayLibTest is SoladyTest { uint256 newLength = _bound(_random(), 0, 50); a.resize(newLength); assertEq(a.length(), newLength); - _checkMemory(); + _checkMemory(a.data); for (uint256 i; i != newLength; ++i) { if (i < n) { assertEq(a.get(i), i ^ r); diff --git a/test/utils/Brutalizer.sol b/test/utils/Brutalizer.sol index ed0e28ee7..1c6447ae0 100644 --- a/test/utils/Brutalizer.sol +++ b/test/utils/Brutalizer.sol @@ -836,4 +836,53 @@ contract Brutalizer { function _checkMemory(string memory s) internal pure { _checkMemory(bytes(s)); } + + /// @dev Check if `a`: + /// - Has sufficient memory allocated. + function _checkMemory(uint256[] memory a) internal pure { + bool insufficientMalloc; + /// @solidity memory-safe-assembly + assembly { + // Write ones to the free memory, to make subsequent checks fail if + // insufficient memory is allocated. + mstore(mload(0x40), not(0)) + // Check if the memory allocated is sufficient. + insufficientMalloc := gt(add(add(a, 0x20), shl(5, mload(a))), mload(0x40)) + } + if (insufficientMalloc) revert("Insufficient memory allocation!"); + _checkMemory(); + } + + /// @dev Check if `a`: + /// - Has sufficient memory allocated. + function _checkMemory(bytes32[] memory a) internal pure { + uint256[] memory casted; + /// @solidity memory-safe-assembly + assembly { + casted := a + } + _checkMemory(casted); + } + + /// @dev Check if `a`: + /// - Has sufficient memory allocated. + function _checkMemory(address[] memory a) internal pure { + uint256[] memory casted; + /// @solidity memory-safe-assembly + assembly { + casted := a + } + _checkMemory(casted); + } + + /// @dev Check if `a`: + /// - Has sufficient memory allocated. + function _checkMemory(bool[] memory a) internal pure { + uint256[] memory casted; + /// @solidity memory-safe-assembly + assembly { + casted := a + } + _checkMemory(casted); + } } From 51335f3da0c5d97428bcfc037779245cf9a6e227 Mon Sep 17 00:00:00 2001 From: Vectorized Date: Mon, 16 Sep 2024 07:17:34 +0000 Subject: [PATCH 11/12] Refactor pop and strengthen tests --- .gas-snapshot | 4 ++-- test/DynamicArrayLib.t.sol | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index c7e1a9087..3e787a69e 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -84,9 +84,9 @@ DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 360733) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40211) DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65529) -DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 325, μ: 81008, ~: 81880) +DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 325, μ: 210249, ~: 105653) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11086) -DynamicArrayLibTest:test__codesize() (gas: 4131) +DynamicArrayLibTest:test__codesize() (gas: 4500) DynamicBufferLibTest:testClear(uint256) (runs: 325, μ: 34643, ~: 34744) DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 325, μ: 920251, ~: 800445) DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 325, μ: 852118, ~: 681461) diff --git a/test/DynamicArrayLib.t.sol b/test/DynamicArrayLib.t.sol index 93177d2ec..00c26e08c 100644 --- a/test/DynamicArrayLib.t.sol +++ b/test/DynamicArrayLib.t.sol @@ -40,6 +40,9 @@ contract DynamicArrayLibTest is SoladyTest { function testDynamicArrayPushPop(uint256 n, uint256 r) public { n = _bound(n, 0, 50); + if (_randomChance(2)) _misalignFreeMemoryPointer(); + if (_randomChance(8)) _brutalizeMemory(); + DynamicArrayLib.DynamicArray memory a; assertEq(a.data.length, 0); @@ -47,11 +50,16 @@ contract DynamicArrayLibTest is SoladyTest { for (uint256 i; i != n; ++i) { a.p(i ^ r); assertEq(a.length(), i + 1); - _checkMemory(); - if (_randomChance(2)) { + _checkMemory(a.data); + + if (_randomChance(8)) { a.reserve(_bound(_random(), 0, 50)); + _checkMemory(a.data); assertEq(a.length(), i + 1); } + if (_randomChance(8)) { + assertEq(keccak256(abi.encodePacked(a.data)), a.hash()); + } if (_randomChance(16)) { for (uint256 j; j != i; ++j) { assertEq(a.get(j), j ^ r); @@ -81,11 +89,10 @@ contract DynamicArrayLibTest is SoladyTest { } } } else { - uint256 length = a.length(); - for (uint256 i = 1; i == length; ++i) { - assertEq(a.pop(), (n - i) ^ r); - assertEq(a.length(), length - i); + for (uint256 i; i != n; ++i) { + assertEq(a.pop(), (n - 1 - i) ^ r); } + assertEq(a.pop(), 0); } } } From e7dcc3a2507c813ac11faac7330e90b8bc43701d Mon Sep 17 00:00:00 2001 From: Vectorized Date: Mon, 16 Sep 2024 07:18:40 +0000 Subject: [PATCH 12/12] T --- .gas-snapshot | 4 ++-- test/DynamicArrayLib.t.sol | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 3e787a69e..171d65082 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -84,9 +84,9 @@ DeploylessPredeployQueryerTest:testTargetGenerate() (gas: 360733) DeploylessPredeployQueryerTest:test__codesize() (gas: 8284) DynamicArrayLibTest:testDynamicArrayPushAfterReserve() (gas: 40211) DynamicArrayLibTest:testDynamicArrayPushAndPop() (gas: 65529) -DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 325, μ: 210249, ~: 105653) +DynamicArrayLibTest:testDynamicArrayPushPop(uint256,uint256) (runs: 325, μ: 216536, ~: 101118) DynamicArrayLibTest:testDynamicArraySlice() (gas: 11086) -DynamicArrayLibTest:test__codesize() (gas: 4500) +DynamicArrayLibTest:test__codesize() (gas: 4545) DynamicBufferLibTest:testClear(uint256) (runs: 325, μ: 34643, ~: 34744) DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 325, μ: 920251, ~: 800445) DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 325, μ: 852118, ~: 681461) diff --git a/test/DynamicArrayLib.t.sol b/test/DynamicArrayLib.t.sol index 00c26e08c..eba8cc917 100644 --- a/test/DynamicArrayLib.t.sol +++ b/test/DynamicArrayLib.t.sol @@ -47,6 +47,10 @@ contract DynamicArrayLibTest is SoladyTest { assertEq(a.data.length, 0); unchecked { + if (_randomChance(16)) { + assertEq(a.pop(), 0); + } + for (uint256 i; i != n; ++i) { a.p(i ^ r); assertEq(a.length(), i + 1); @@ -57,7 +61,7 @@ contract DynamicArrayLibTest is SoladyTest { _checkMemory(a.data); assertEq(a.length(), i + 1); } - if (_randomChance(8)) { + if (_randomChance(16)) { assertEq(keccak256(abi.encodePacked(a.data)), a.hash()); } if (_randomChance(16)) {