///|
fn main raise {
let alphabet = ["acquire", "release"]
let recorded : Array[Json] = []
let baseline = @lens.learn(
@lens.Experiment::new(@limit.quota_system(2), alphabet),
@lens.Oracle::wp_method(3),
).model.unwrap()
let cold = @lens.learn_with(
@lens.Experiment::new(@limit.quota_system(3), alphabet),
@lens.Oracle::wp_method(4),
LStar,
)
let guided = @lens.learn_with(
@lens.Experiment::new(@limit.quota_system(3), alphabet),
@lens.Oracle::wp_method(4),
LStar,
seed=baseline,
on_event=e => recorded.push(e),
)
let token = @lens.learn(
@lens.Experiment::new(@limit.token_system(), ["request", "tick"]),
@lens.Oracle::wp_method(3),
)
let cache = @lens.learn(
@lens.Experiment::new(@lru.system(), @lru.alphabet()),
@lens.Oracle::wp_method(10),
)
guard guided.status is Supported(_) &&
cold.status is Supported(_) &&
token.status is Supported(_) &&
cache.status is Supported(_) else {
fail("actual component inference incomplete")
}
assert_true(
@lens.distinguish(cold.model.unwrap(), guided.model.unwrap()) is None,
)
let word = @lens.distinguish(baseline, guided.model.unwrap()).unwrap().inputs
assert_true(!recorded.is_empty())
assert_true(
@lens.backward_compatibility(baseline, baseline)
is { "status": "compatible-on-old-inputs", .. },
)
let confirmation = @lens.confirm_difference(
@lens.Experiment::new(@limit.quota_system(2), alphabet),
@lens.Experiment::new(@limit.quota_system(3), alphabet),
word,
).unwrap()
println(
Json::object({
"format": Json("moonstatelens.evolution-demo"),
"version": Json(1),
"new_api_acceptance": Json(true),
"scope": Json(
"actual MoonLimit/MoonLarder public APIs; quota configuration 2 to 3, not an upstream defect",
),
"baseline": Json(baseline),
"cold": Json(cold),
"guided": Json(guided),
"token_bucket": Json(token),
"moonlarder": Json(cache),
"confirmed_difference": Json(confirmation),
"junit": Json(
@lens.regression_junit(
baseline
.regression_suite()
.plan()
.run(@lens.Experiment::new(@limit.quota_system(3), alphabet)),
),
),
}).stringify(),
)
}