100 lines
2.1 KiB
Plaintext
100 lines
2.1 KiB
Plaintext
import ../stdlib/stdlib.sl
|
|
import ../stdlib/io.sl
|
|
import ../stdlib/arr.sl
|
|
|
|
word main
|
|
# arr_new / arr_len / arr_cap / arr_data
|
|
0 arr_new
|
|
|
|
dup arr_len puti cr
|
|
dup arr_cap puti cr
|
|
dup arr_data over 24 + == puti cr
|
|
|
|
# arr_push
|
|
dup 10 arr_push
|
|
dup 20 arr_push
|
|
dup 30 arr_push
|
|
|
|
# arr_len / arr_cap after growth
|
|
dup arr_len puti cr
|
|
dup arr_cap puti cr
|
|
|
|
# dyn_arr_get
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
|
|
# dyn_arr_set
|
|
dup 99 1 dyn_arr_set
|
|
dup 1 dyn_arr_get puti cr
|
|
|
|
# arr_reserve (with len > 0 so element copy path is exercised)
|
|
dup 8 arr_reserve
|
|
dup arr_cap puti cr
|
|
dup arr_len puti cr
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
|
|
# arr_pop (including empty pop)
|
|
arr_pop puti cr
|
|
arr_pop puti cr
|
|
arr_pop puti cr
|
|
arr_pop puti cr
|
|
dup arr_len puti cr
|
|
|
|
dyn_arr_free
|
|
|
|
# arr_to_dyn (convert std list to dynamic array)
|
|
[ 7 8 9 ] dup arr_to_dyn
|
|
dup arr_len puti cr
|
|
dup arr_cap puti cr
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
dyn_arr_free
|
|
|
|
# free list allocation: bytes = (len + 1) * 8
|
|
dup @ 1 + 8 * free
|
|
|
|
# dyn_arr_sorted (copy) should not mutate source
|
|
5 arr_new
|
|
dup 3 arr_push
|
|
dup 1 arr_push
|
|
dup 2 arr_push
|
|
|
|
dup dyn_arr_sorted
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
dyn_arr_free
|
|
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
|
|
# dyn_arr_sort (alias) sorts in place
|
|
dyn_arr_sort
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
dyn_arr_free
|
|
|
|
# dyn_arr_sorted (alias) returns a sorted copy
|
|
5 arr_new
|
|
dup 4 arr_push
|
|
dup 9 arr_push
|
|
dup 6 arr_push
|
|
|
|
dup dyn_arr_sorted
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
dyn_arr_free
|
|
|
|
dup 0 dyn_arr_get puti cr
|
|
dup 1 dyn_arr_get puti cr
|
|
dup 2 dyn_arr_get puti cr
|
|
dyn_arr_free
|
|
end
|