flan/test/programs/get-checked.flan

69 lines
2.0 KiB
Plaintext

;;;; get over an array, a slice, a string and a Vec is at that answers None
;;;; for an index out of range, negative included, one index per dimension.
;;;; Over a dyn it answers nil, and more keys walk a level each.
(defn show [o (Option i32)] ()
(match o (Some v) (println v) None (println "none")))
(defn three [] (Vec i32)
(let [v (vec-new i32)] (push v 10) (push v 20) (push v 30) v))
(defn dvec [] dyn [10 [20 21] 30])
(defn dmap [] dyn {:a 1 :b [5 6]})
(defn dtext [] dyn "héy")
(defn main [] ()
(let [a [1 2 3]
grid [[1 2 3] [4 5 6]]
s (slice a)
v (three)
n (length a)
vv (vec-new (Vec i32) context/temp)]
(push vv v)
;; -1, 0, len-1 and len on an array.
(show (get a -1))
(show (get a 0))
(show (get a (- n 1)))
(show (get a n))
;; Two dimensions, each tested.
(let [r 0 c 1]
(show (get grid (+ r 1) (- c 1)))
(show (get grid (- r 1) c))
(show (get grid r (+ c 2))))
(show (get grid 1 2))
(show (get grid 2 0))
;; A slice.
(show (get s 2))
(show (get s 3))
;; A Vec, and one a call answered.
(show (get v -1))
(show (get v 0))
(show (get v 2))
(show (get v 3))
(show (get (three) 1))
;; A Vec of Vecs: the inner length is tested only once the outer index is.
(show (get vv 0 2))
(show (get vv 0 3))
(show (get vv 1 0))
;; A string's byte.
(match (get "hey" 1) (Some b) (println b) None (println "none"))
(match (get "hey" 3) (Some b) (println b) None (println "none")))
;; Dyn.
(let [d (dvec) m (dmap)]
(println (get d -1))
(println (get d 0))
(println (get d 2))
(println (get d 3))
(println (get d 1 1))
(println (get d 1 2))
(println (get d 5 0))
(println (get m :a))
(println (get m :z))
(println (get m :b 1))
(println (get m :z 1))
(println (.a m))
;; Dyn text: get counts it as at does, by character.
(println (get (dtext) 1))
(println (get (dtext) 2))
(println (get (dtext) 3))))