[WIP] Implement IRComparator in tests #12162
Draft
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.
Pull Request Description
All over the compiler tests, we are testing the compiled IR with something like
enso/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/pass/desugar/NestedPatternMatchTest.scala
Lines 155 to 183 in 24638b7
When working on #11717 and #12061, it struck me that it could be useful to have a better IR comparison functionality in tests. More specifically, we could provide an expected IR object, compare it to the actual IR, and in case of a failure, we could dump the difference to IGV with #12061. In this PR, I have attempted to provide such functionality.
The problem is that the difference dumped to IGV when there is a test failure on 24638b7 is not useful:
In these two graphs, there is actually a single node different -
Name.Literal('<internal-10>')
, but the diff shows us that the whole graph is different. To make this better and only highlight a single changed node, we need a functionality to replace children. More specifically, we need to duplicate the expected IR, and only replace a single node in the IR. That is, currently, impossible. But it could be possible after all our IR definitions are generated by an annotation processor.This PR is pushed to the repo, so that this idea is not forgotten.
Important Notes
Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:
Scala,
Java,
TypeScript,
and
Rust
style guides. In case you are using a language not listed above, follow the Rust style guide.
or the Snowflake database integration, a run of the Extra Tests has been scheduled.