lean4-htt/tests/elab_bench/big_do.lean
Garmelon 08eb78a5b2
chore: switch to new test/bench suite (#12590)
This PR sets up the new integrated test/bench suite. It then migrates
all benchmarks and some related tests to the new suite. There's also
some documentation and some linting.

For now, a lot of the old tests are left alone so this PR doesn't become
even larger than it already is. Eventually, all tests should be migrated
to the new suite though so there isn't a confusing mix of two systems.
2026-02-25 13:51:53 +00:00

459 lines
15 KiB
Text

/-!
This benchmark exercises
* general elaboration, likely from many nested lambdas
* code generation, ditto
-/
set_option maxRecDepth 10000
def addALot (x: Nat) : StateM Nat Nat := do
set x
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
modifyGet (λ y => ((), y + x))
let y <- get
pure y
#eval StateT.run' (addALot 2) 0