///|
fn main raise {
let m = @choice.decision_matrix(
["A", "B", "C"],
["quality", "cost"],
[@choice.Benefit, @choice.Cost],
[[7.0, 8.0], [9.0, 10.0], [6.0, 5.0]],
)
let grid = @choice.weight_grid([0.5, 0.5], 0, [0.0, 0.5, 1.0])
let report = @choice.weight_scenarios(
m,
grid,
@choice.Additive(@choice.MinMax),
)
assert_eq(report.winner_counts, [0, 2, 2])
assert_eq(report.universally_best, [])
let crossing = @choice.additive_break_even(m, [0.5, 0.5], 0, 1, 2)
assert_true(crossing.crossing is Some(x) && (x - 0.5).abs() < 1.0e-12)
let request = Json::object({
"schema": Json("moonchoice.request/1"),
"operation": Json("scenarios"),
"matrix": m.to_json(),
"scenarios": Json(grid),
"algorithm": Json::object({
"kind": Json("saw"),
"normalization": Json("minmax"),
}),
})
let response = @choice.parse_document(@choice.dispatch(request.stringify()))
assert_true(response is Object(fields) && fields.get("ok") is Some(True))
println(@choice.dispatch(request.stringify()))
}