///|
const FEATURE_COUNT : Int = 1000
///|
const ITERATIONS : Int = 100
///|
const MIN_FEATURES_PER_SECOND : UInt64 = 10000UL
///|
const MAX_FIXTURE_BYTES : Int = 25000
///|
fn main {
run() catch {
error => abort("MoonMVT benchmark failed: \{error}")
}
}
///|
fn build_fixture() -> @model.Tile raise {
let layer = @builder.LayerBuilder::new("benchmark")
for i in 0.. UInt64 {
let safe_ms = if elapsed_ms == 0UL { 1UL } else { elapsed_ms }
FEATURE_COUNT.to_uint64() * ITERATIONS.to_uint64() * 1000UL / safe_ms
}
///|
fn run() -> Unit raise {
let tile = build_fixture()
let warmup = @codec.encode_tile(tile)
ignore(@codec.decode_tile(warmup))
let encode_start = @env.now()
let mut bytes = warmup
for _ in 0.. MAX_FIXTURE_BYTES {
abort("encoded fixture exceeded 25000-byte acceptance ceiling")
}
if encode_rate < MIN_FEATURES_PER_SECOND {
abort("encode throughput fell below 10000 features/second")
}
if decode_rate < MIN_FEATURES_PER_SECOND {
abort("decode throughput fell below 10000 features/second")
}
println("fixture_features=\{FEATURE_COUNT}")
println("fixture_bytes=\{bytes.length()}")
println("iterations=\{ITERATIONS}")
println("encode_elapsed_ms=\{encode_ms}")
println("decode_elapsed_ms=\{decode_ms}")
println("encode_features_per_second=\{encode_rate}")
println("decode_features_per_second=\{decode_rate}")
println("acceptance_threshold=10000_features_per_second_and_25000_bytes")
println("result=pass")
}