module
import Lean
meta import Lean.Data.FuzzyMatching
open Lean Elab

def TURNS : Nat := 20

def bench (pattern : String) : TermElabM Unit := do
  let env ← getEnv
  -- IO.println s!"{env.constants.size} decls"
  let list := env.constants.toList |>.map fun (n, _) => n.toString
  let bench := (← IO.getEnv "TEST_BENCH") == some "1"
  let turns := if bench then TURNS else 1
  IO.println s!"Matching {list.length * turns} decls"
  for _ in 0...turns do
    let mut n := 0
    for name in list do
      if pattern.charactersIn name then n := n + 1
    IO.println s!"{n} matches"

set_option profiler true
#eval! bench "L"
#eval! bench "Lean."
#eval! bench "Lean.Expr"
#eval! bench "Lean.Expr.const"
