Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,213 @@
|
||||
type BufferState { values: List<Int>
|
||||
count: Int }
|
||||
|
||||
bufferStep(value: Int, state: BufferState) (next: BufferState) {
|
||||
values = append(state.values, value)
|
||||
next = BufferState { values = values
|
||||
count = state.count + 1 }
|
||||
}
|
||||
|
||||
bufferLengthStep(value: Int, state: BufferState) (next: BufferState) {
|
||||
count = length(state.values) + 1
|
||||
values = append(state.values, value)
|
||||
next = BufferState { values = values
|
||||
count = count }
|
||||
}
|
||||
|
||||
bufferBuild(values: Bytes) (answer: BufferState) {
|
||||
answer = reduce(bufferStep, values, BufferState { values = []
|
||||
count = 0 })
|
||||
}
|
||||
|
||||
bufferInspect(values: Bytes) (answer: BufferState) {
|
||||
answer = reduce(bufferLengthStep, values, BufferState { values = []
|
||||
count = 0 })
|
||||
}
|
||||
|
||||
type ScalarRow { first: Int
|
||||
second: Int
|
||||
third: Int }
|
||||
|
||||
scalarTotal(row: ScalarRow) (answer: Int) {
|
||||
answer = row.first + row.second + row.third
|
||||
}
|
||||
|
||||
readScalarRows(values: List<ScalarRow>) (answer: Int) {
|
||||
answer = sum(scalarTotal, values)
|
||||
}
|
||||
|
||||
type Key {
|
||||
First
|
||||
Second
|
||||
}
|
||||
|
||||
type Row {
|
||||
name: Text
|
||||
count: Int
|
||||
}
|
||||
|
||||
type Problem {
|
||||
error Denied(message: Text)
|
||||
}
|
||||
|
||||
number(value: Int) (answer: Int) {
|
||||
answer = value
|
||||
}
|
||||
number(value: null) (answer: Int) {
|
||||
answer = 0
|
||||
}
|
||||
|
||||
readKey(key: Int, values: Map<Int, Int>) (answer: Int) {
|
||||
answer = number(get(values, key))
|
||||
}
|
||||
|
||||
lookup(values: Map<Int, Int>, keys: List<Int>) (answer: Int) {
|
||||
answer = sum(readKey, keys, values)
|
||||
}
|
||||
|
||||
readTextKey(key: Text, values: Map<Text, Int>) (answer: Int) {
|
||||
answer = number(get(values, key))
|
||||
}
|
||||
|
||||
lookupText(values: Map<Text, Int>, keys: List<Text>) (answer: Int) {
|
||||
answer = sum(readTextKey, keys, values)
|
||||
}
|
||||
|
||||
entryValue(entry: MapEntry<Int, Int>) (answer: Int) {
|
||||
answer = entry.value
|
||||
}
|
||||
|
||||
scan(values: Map<Int, Int>) (answer: Int) {
|
||||
answer = sum(entryValue, entries(values))
|
||||
}
|
||||
|
||||
insert(item: Int, state: Map<Int, Int>) (next: Map<Int, Int>) {
|
||||
next = put(state, item, item)
|
||||
}
|
||||
|
||||
buildMap(values: List<Int>) (answer: Map<Int, Int>) {
|
||||
answer = reduce(insert, values, {})
|
||||
}
|
||||
|
||||
buildEntries(values: List<Int>) (answer: List<MapEntry<Int, Int>>) {
|
||||
answer = entries(buildMap(values))
|
||||
}
|
||||
|
||||
add(item: Int, state: List<Int>) (next: List<Int>) {
|
||||
next = append(state, item)
|
||||
}
|
||||
|
||||
buildList(values: List<Int>) (answer: List<Int>) {
|
||||
answer = reduce(add, values, [])
|
||||
}
|
||||
|
||||
rewrite(entry: MapEntry<Text, Row>) (answer: MapEntry<Text, Row>) {
|
||||
answer = entry
|
||||
answer.key = "new"
|
||||
answer.value.name = "changed"
|
||||
}
|
||||
|
||||
rowValue(entry: MapEntry<Text, Row>) (answer: Row) {
|
||||
answer = entry.value
|
||||
}
|
||||
|
||||
duplicate(first_key: Text, second_key: Text) (answer: Map<Text, Int>) {
|
||||
answer = { first_key = 1
|
||||
second_key = 2 }
|
||||
}
|
||||
|
||||
duplicateEntry() (answer: Map<Text, Int>) {
|
||||
answer = duplicate("same", "same")
|
||||
}
|
||||
|
||||
denyText() (answer: Text) {
|
||||
fail(Problem.Denied("first"))
|
||||
}
|
||||
|
||||
faultText(value: Int) (answer: Text) {
|
||||
checked = value + 1
|
||||
answer = "key"
|
||||
}
|
||||
|
||||
failureEntry() (answer: Map<Text, Text>) {
|
||||
answer = { denyText() = faultText(9223372036854775807) }
|
||||
}
|
||||
|
||||
faultEntry() (answer: Map<Text, Text>) {
|
||||
answer = { faultText(9223372036854775807) = denyText() }
|
||||
}
|
||||
|
||||
lookupFailure() (answer: Text?) {
|
||||
answer = get({ "item" = denyText() }, faultText(9223372036854775807))
|
||||
}
|
||||
|
||||
lookupFault() (answer: Text?) {
|
||||
answer = get({ "item" = faultText(9223372036854775807) }, denyText())
|
||||
}
|
||||
|
||||
optional(values: Map<Text, Int?>) (answer: Int?) {
|
||||
answer = get(values, "present")
|
||||
}
|
||||
|
||||
verify() (answer: Bool) {
|
||||
original = { "a" = 1
|
||||
"b" = 2 }
|
||||
changed = put(original, "a", 3)
|
||||
extended = put(changed, "c", 4)
|
||||
removed = remove(extended, "a")
|
||||
reinserted = put(removed, "a", 5)
|
||||
answer = original == { "a" = 1
|
||||
"b" = 2 } and changed == { "a" = 3
|
||||
"b" = 2 }
|
||||
answer = answer and original != { "b" = 2
|
||||
"a" = 1 } and reinserted == { "b" = 2
|
||||
"c" = 4
|
||||
"a" = 5 }
|
||||
answer = answer and get(original, "none") == null and get(original, "a") == 1
|
||||
answer = answer and optional({ "present" = null }) == null and optional({ "present" = 7 }) == 7
|
||||
answer = answer and length(remove(original, "missing")) == 2
|
||||
rows = { "old" = Row { name = "雪"
|
||||
count = 4 } }
|
||||
rewritten = each(rewrite, entries(rows))
|
||||
answer = answer and each(rowValue, rewritten) == [Row { name = "changed"
|
||||
count = 4 }]
|
||||
answer = answer and get(rows, "old") == Row { name = "雪"
|
||||
count = 4 }
|
||||
choices = { Key.First = 7
|
||||
Key.Second = 9 }
|
||||
booleans = { true = "yes"
|
||||
false = "no" }
|
||||
answer = answer and get(choices, Key.Second) == 9 and get(booleans, false) == "no"
|
||||
list = [1, 2]
|
||||
appended = append(list, 3)
|
||||
answer = answer and list == [1, 2] and appended == [1, 2, 3] and first(list) == 1
|
||||
answer = answer and buildList([3, 1, 4]) == [3, 1, 4] and length(buildList([])) == 0
|
||||
built = buildMap([3, 1, 4, 1])
|
||||
answer = answer and built == { 3 = 3
|
||||
1 = 1
|
||||
4 = 4 } and lookup(built, [4, 1, 99]) == 5 and scan(built) == 8
|
||||
answer = answer and length(buildMap([])) == 0
|
||||
answer = answer and buildEntries([3, 1, 4, 1]) == entries(built)
|
||||
}
|
||||
|
||||
staticLookupFailure() (answer: Text?) {
|
||||
answer = get({ "selected" = "kept"
|
||||
"other" = denyText() }, "selected")
|
||||
}
|
||||
|
||||
staticMissingFailure() (answer: Text?) {
|
||||
answer = get({ "other" = denyText() }, "missing")
|
||||
}
|
||||
|
||||
traceMapValue(value: Text) (answer: Text) {
|
||||
dever.io.println(value)
|
||||
answer = value
|
||||
}
|
||||
|
||||
traceLiteralLookup() (answer: Bool) {
|
||||
value = get({ "a" = traceMapValue("first")
|
||||
"b" = traceMapValue("second")
|
||||
"c" = traceMapValue("third") }, "a")
|
||||
listed = first([traceMapValue("fourth"), traceMapValue("fifth")])
|
||||
answer = value == "first" and listed == "fourth"
|
||||
}
|
||||
Reference in new issue
Block a user