perf(StdAssertions): avoid vm call for trivial conditions#693
Merged
DaniPopes merged 1 commit intofoundry-rs:masterfrom Jul 31, 2025
Merged
perf(StdAssertions): avoid vm call for trivial conditions#693DaniPopes merged 1 commit intofoundry-rs:masterfrom
DaniPopes merged 1 commit intofoundry-rs:masterfrom
Conversation
Avoid calling vm when the condition is trivial to check inline. This is a minor performance improvement as a couple of opcodes execute a lot faster than a full cheatcode pipeline (external call, EVM call bookkeeping, abi encoding/decoding, ...) that eventually does nothing.
There was a problem hiding this comment.
Pull Request Overview
This PR optimizes assertion functions by adding inline condition checks to avoid unnecessary VM calls when assertions would pass. The optimization adds conditional guards that only invoke the VM when an assertion is about to fail, improving performance for successful test cases.
- Adds inline condition checks to all basic assertion functions before calling VM methods
- Modifies
assertEq32andassertNotEq32functions to use direct VM calls instead of delegating to other assertion functions - Applies the optimization pattern consistently across boolean, numeric, and address comparison assertions
Member
|
This makes sense, a further improvement could be exposing an error invoker directly and avoiding the duplicate assertion check |
Member
Author
It would make sense in theory but in practice the check is free and it would just be adding a lot more cheatcodes for no gain |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Avoid calling vm when the condition is trivial to check inline. This is a minor performance improvement as a couple of opcodes execute a lot faster than a full cheatcode pipeline (external call, EVM call bookkeeping, abi encoding/decoding, ...) that eventually does nothing.
For example, Uniswap's v4-core spends ~28% of the entire
forge testCPU time in a couple of trivialassertfunctions (uint256, bytes32, true, false), ~13% forforge coverage. This is without accounting for the actual CALL/abi coding etc.These numbers are skewed due to profiling overhead, however making this change does have ~5% overall test performance improvement, for no compilation time change.