50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
type Port {
|
|
value: Int >= 1 and <= 65535
|
|
}
|
|
|
|
type Rate {
|
|
value: Decimal >= 0.0 and <= 1.0
|
|
}
|
|
|
|
type Row { value: Int }
|
|
|
|
choose(value: Int >= 1 and <= 65535) (answer: Port) pure {
|
|
answer = Port { value = value }
|
|
}
|
|
choose(value: other) (answer: Port) pure {
|
|
answer = Port { value = 8080 }
|
|
}
|
|
|
|
step(value: Port) (answer: Int >= 2 and <= 65536) pure {
|
|
answer = value.value + 1
|
|
}
|
|
|
|
scaled(value: Rate) (answer: Decimal >= 0.0 and <= 100.0) pure {
|
|
answer = value.value * 100.0
|
|
}
|
|
|
|
total(values: List<Port>) (answer: Int) pure {
|
|
answer = sum(step, values)
|
|
}
|
|
|
|
rates(values: List<Rate>) (answer: Decimal) pure {
|
|
answer = sum(scaled, values)
|
|
}
|
|
|
|
apply(route: handler(value: Int >= 1) (answer: Int >= 2)) (answer: Int >= 2) {
|
|
answer = route(1)
|
|
}
|
|
|
|
constant(value: Int) (answer: Int) pure { answer = 2 }
|
|
|
|
snapshot() (answer: Int >= 1) pure {
|
|
original = Row { value = 3 }
|
|
saved = original
|
|
original.value = 0
|
|
answer = saved.value
|
|
}
|
|
|
|
verify() (answer: Bool) {
|
|
answer = choose(0).value == 8080 and step(choose(65535)) == 65536 and total([choose(1), choose(2)]) == 5 and rates([Rate { value = 0.25 }, Rate { value = 0.5 }]) == 75.0 and snapshot() == 3 and apply(constant) == 2
|
|
}
|