; Tests for APL ⎕ system functions.

(define mkrv (fn (arr) (get arr :ravel)))
(define mksh (fn (arr) (get arr :shape)))

(apl-test "⎕IO returns 1" (mkrv (apl-quad-io)) (list 1))

(apl-test "⎕ML returns 1" (mkrv (apl-quad-ml)) (list 1))

(apl-test "⎕FR returns 1248" (mkrv (apl-quad-fr)) (list 1248))

(apl-test "⎕TS shape is 7" (mksh (apl-quad-ts)) (list 7))

(apl-test "⎕TS year is 1970 default" (first (mkrv (apl-quad-ts))) 1970)

(apl-test "⎕FMT scalar 42" (apl-quad-fmt (apl-scalar 42)) "42")

(apl-test "⎕FMT scalar negative" (apl-quad-fmt (apl-scalar -7)) "-7")

(apl-test
  "⎕FMT empty vector"
  (apl-quad-fmt (make-array (list 0) (list)))
  "")

(apl-test
  "⎕FMT singleton vector"
  (apl-quad-fmt (make-array (list 1) (list 42)))
  "42")

(apl-test
  "⎕FMT vector"
  (apl-quad-fmt (make-array (list 5) (list 1 2 3 4 5)))
  "1 2 3 4 5")

(apl-test
  "⎕FMT matrix 2x3"
  (apl-quad-fmt (make-array (list 2 3) (list 1 2 3 4 5 6)))
  "1 2 3\n4 5 6\n")

(apl-test
  "⎕← (print) returns its arg"
  (mkrv (apl-quad-print (apl-scalar 99)))
  (list 99))

(apl-test
  "⎕← preserves shape"
  (mksh (apl-quad-print (make-array (list 3) (list 1 2 3))))
  (list 3))
