// 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")
}
})
}