diff options
Diffstat (limited to 'archive/2.vm/063array.mu')
-rw-r--r-- | archive/2.vm/063array.mu | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/archive/2.vm/063array.mu b/archive/2.vm/063array.mu deleted file mode 100644 index a56e87f0..00000000 --- a/archive/2.vm/063array.mu +++ /dev/null @@ -1,181 +0,0 @@ -scenario array-from-args [ - run [ - local-scope - x:&:@:num <- new-array 0, 1, 2 - 10:@:num/raw <- copy *x - ] - memory-should-contain [ - 10 <- 3 # array length - 11 <- 0 - 12 <- 1 - 13 <- 2 - ] -] - -# create an array out of a list of args -def new-array -> result:&:@:_elem [ - local-scope - capacity:num <- copy 0 - { - # while read curr-value - curr-value:_elem, exists?:bool <- next-input - break-unless exists? - capacity <- add capacity, 1 - loop - } - result <- new _elem:type, capacity - rewind-inputs - i:num <- copy 0 - { - # while read curr-value - done?:bool <- greater-or-equal i, capacity - break-if done? - curr-value:_elem, exists?:bool <- next-input - assert exists?, [error in rewinding inputs to new-array] - *result <- put-index *result, i, curr-value - i <- add i, 1 - loop - } - return result -] - -# fill an existing array with a set of numbers -# (contributed by Caleb Couch) -def fill array:&:@:num -> array:&:@:num [ - local-scope - load-inputs - loopn:num <- copy 0 - length:num <- length *array - { - length?:bool <- equal loopn, length - break-if length? - object:num, arg-received?:bool <- next-input - break-unless arg-received? - *array <- put-index *array, loopn, object - loopn <- add loopn, 1 - loop - } -] - -scenario fill-on-an-empty-array [ - local-scope - array:&:@:num <- new number:type, 3 - run [ - array <- fill array, 1 2 3 - 10:@:num/raw <- copy *array - ] - memory-should-contain [ - 10 <- 3 - 11 <- 1 - 12 <- 2 - 13 <- 3 - ] -] - -scenario fill-overwrites-existing-values [ - local-scope - array:&:@:num <- new number:type, 3 - *array <- put-index *array, 0, 4 - run [ - array <- fill array, 1 2 3 - 10:@:num/raw <- copy *array - ] - memory-should-contain [ - 10 <- 3 - 11 <- 1 - 12 <- 2 - 13 <- 3 - ] -] - -scenario fill-exits-gracefully-when-given-no-inputs [ - local-scope - array:&:@:num <- new number:type, 3 - run [ - array <- fill array - 10:@:num/raw <- copy *array - ] - memory-should-contain [ - 10 <- 3 - 11 <- 0 - 12 <- 0 - 13 <- 0 - ] -] - -# swap two elements of an array -# (contributed by Caleb Couch) -def swap array:&:@:num, index1:num, index2:num -> array:&:@:num [ - local-scope - load-inputs - object1:num <- index *array, index1 - object2:num <- index *array, index2 - *array <- put-index *array, index1, object2 - *array <- put-index *array, index2, object1 -] - -scenario swap-works [ - local-scope - array:&:@:num <- new number:type, 4 - array <- fill array, 4 3 2 1 - run [ - array <- swap array, 0, 2 - 10:num/raw <- index *array, 0 - 11:num/raw <- index *array, 2 - ] - memory-should-contain [ - 10 <- 2 - 11 <- 4 - ] -] - -# reverse the elements of an array -# (contributed by Caleb Couch) -def reverse array:&:@:_elem -> array:&:@:_elem [ - local-scope - load-inputs - start:num <- copy 0 - length:num <- length *array - end:num <- subtract length, 1 - { - done?:bool <- greater-or-equal start, end - break-if done? - array <- swap array, start, end - start <- add start, 1 - end <- subtract end, 1 - loop - } -] - -scenario reverse-array-odd-length [ - local-scope - array:&:@:num <- new number:type, 3 - array <- fill array, 3 2 1 - run [ - array <- reverse array - 10:@:num/raw <- copy *array - ] - memory-should-contain [ - 10 <- 3 - 11 <- 1 - 12 <- 2 - 13 <- 3 - ] -] - -scenario reverse-array-even-length [ - local-scope - array:&:@:num <- new number:type, 4 - array <- fill array, 4 3 2 1 - run [ - array <- reverse array - 10:@:num/raw <- copy *array - ] - memory-should-contain [ - 10 <- 4 - 11 <- 1 - 12 <- 2 - 13 <- 3 - 14 <- 4 - ] -] |