Draft
Conversation
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.
Overview
Folks in Discord noticed that the
testhelper is much slower when running many tests than just loading all those tests into a single scratch file and running them there.A look under the hood revealed we were creating an independent Unison File and runtime kick-off for each test independently; which meant a lot of duplicated overhead; and meant we were loading a lot of the same dependent code multiple times.
Instead we can create a single virtual Unison File with many Test Watches in it, run them all in one go; this is much faster.
For a project like typed-json; running
debug.clear-cacheand thentestgoes from 104s -> 30sImplementation approach and notes
How does it accomplish it, in broad strokes? i.e. How does it change the Haskell codebase?
Interesting/controversial decisions
Add
batchversions of the unison Term evaluation functions, these load many terms into the runtime as watches all at once, execute them in a single go, then unpack the results back into a map.Test coverage
TODO