// Isolates ordinary lexical binding reads after the post-#1009 Navier-Stokes
// profile identified Environment::get_with_strict as the largest caller of
// Map[String, Binding]::get. Setup and correctness checks stay outside timing.

///|
const BINDING_READ_NAME_COUNT : Int = 64

///|
const BINDING_READ_ROUNDS : Int = 16

///|
test "isolate/runtime/binding_read" (b : @bench.T) {
  let local_env = @runtime.Environment::new()
  let child_env = @runtime.Environment::new(parent=Some(local_env))
  let names : Array[String] = []
  let slots : Array[@runtime.EnvironmentSlot] = []
  for index in 0.. abort("current-environment binding read raised unexpectedly")
    }
  })
  b.bench(name="one-parent environment name lookup", fn() {
    try {
      let mut value = @runtime.Value::Undefined
      for _ in 0.. abort("parent-environment binding read raised unexpectedly")
    }
  })
  b.bench(name="resolved slot read control", fn() {
    try {
      let mut value = @runtime.Value::Undefined
      for _ in 0.. abort("resolved-slot binding read raised unexpectedly")
    }
  })
}