Files
core/test/rust/fixtures/map_update.dever
T
2026-11-03 03:32:07 +00:00

49 lines
1.5 KiB
Plaintext

type Problem {
error Denied(message: Text)
}
key(item: 0) (answer: Text) { fail(Problem.Denied("key first")) }
key(item: other) (answer: Text) { answer = "ok" }
checkedValue(value: Int) (answer: Int) { answer = value + 1 }
write(item: Int, state: Map<Text, Int>) (answer: Map<Text, Int>) {
answer = put(state, key(item), checkedValue(9223372036854775807))
}
present(value: Int) (answer: Int) { answer = value }
present(value: null) (answer: Int) { answer = 0 }
bump(item: Id, state: Map<Id, Int>) (answer: Map<Id, Int>) {
answer = put(state, item, present(get(state, item)) + 1)
}
add(item: Int, state: Int) (answer: Int) { answer = state + item }
nestedValue(item: Int, state: Map<Int, Int>) (answer: Map<Int, Int>) {
answer = put(state, item, reduce(add, [item, 1], present(get(state, item))))
}
keyFailure() (answer: Map<Text, Int>) {
answer = reduce(write, [0], {})
}
valueFault() (answer: Map<Text, Int>) {
answer = reduce(write, [1], {})
}
seedFailure() (answer: Map<Text, Int>) {
answer = reduce(write, [], put({}, key(0), 0))
}
verify() (answer: Bool) {
seed = { dever.id.fromText("a") = 4 }
ids = each(dever.id.fromText, ["a", "b", "a"])
values = reduce(bump, ids, seed)
answer = get(values, dever.id.fromText("a")) == 6 and get(values, dever.id.fromText("b")) == 1
answer = answer and get(seed, dever.id.fromText("a")) == 4 and length(seed) == 1
answer = answer and reduce(bump, [], seed) == seed
answer = answer and length(reduce(write, [], {})) == 0
answer = answer and get(reduce(nestedValue, [2, 2], {}), 2) == 6
}