(define rv (fn (arr) (get arr :ravel))) (define sh (fn (arr) (get arr :shape))) (apl-test "reduce +/ vector" (rv (apl-reduce apl-add (make-array (list 5) (list 1 2 3 4 5)))) (list 15)) (apl-test "reduce x/ vector" (rv (apl-reduce apl-mul (make-array (list 4) (list 1 2 3 4)))) (list 24)) (apl-test "reduce max/ vector" (rv (apl-reduce apl-max (make-array (list 5) (list 3 1 4 1 5)))) (list 5)) (apl-test "reduce min/ vector" (rv (apl-reduce apl-min (make-array (list 3) (list 3 1 4)))) (list 1)) (apl-test "reduce and/ all true" (rv (apl-reduce apl-and (make-array (list 3) (list 1 1 1)))) (list 1)) (apl-test "reduce or/ with true" (rv (apl-reduce apl-or (make-array (list 3) (list 0 0 1)))) (list 1)) (apl-test "reduce +/ single element" (rv (apl-reduce apl-add (make-array (list 1) (list 42)))) (list 42)) (apl-test "reduce +/ scalar no-op" (rv (apl-reduce apl-add (apl-scalar 7))) (list 7)) (apl-test "reduce +/ shape is scalar" (sh (apl-reduce apl-add (make-array (list 4) (list 1 2 3 4)))) (list)) (apl-test "reduce +/ matrix row sums shape" (sh (apl-reduce apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 2)) (apl-test "reduce +/ matrix row sums values" (rv (apl-reduce apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 6 15)) (apl-test "reduce max/ matrix row maxima" (rv (apl-reduce apl-max (make-array (list 2 3) (list 3 1 4 1 5 9)))) (list 4 9)) (apl-test "reduce-first +/ vector same as reduce" (rv (apl-reduce-first apl-add (make-array (list 5) (list 1 2 3 4 5)))) (list 15)) (apl-test "reduce-first +/ matrix col sums shape" (sh (apl-reduce-first apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 3)) (apl-test "reduce-first +/ matrix col sums values" (rv (apl-reduce-first apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 5 7 9)) (apl-test "reduce-first max/ matrix col maxima" (rv (apl-reduce-first apl-max (make-array (list 3 2) (list 1 9 2 8 3 7)))) (list 3 9)) (apl-test "scan +\\ vector" (rv (apl-scan apl-add (make-array (list 5) (list 1 2 3 4 5)))) (list 1 3 6 10 15)) (apl-test "scan x\\ vector cumulative product" (rv (apl-scan apl-mul (make-array (list 5) (list 1 2 3 4 5)))) (list 1 2 6 24 120)) (apl-test "scan max\\ vector running max" (rv (apl-scan apl-max (make-array (list 5) (list 3 1 4 1 5)))) (list 3 3 4 4 5)) (apl-test "scan min\\ vector running min" (rv (apl-scan apl-min (make-array (list 5) (list 3 1 4 1 5)))) (list 3 1 1 1 1)) (apl-test "scan +\\ single element" (rv (apl-scan apl-add (make-array (list 1) (list 42)))) (list 42)) (apl-test "scan +\\ scalar no-op" (rv (apl-scan apl-add (apl-scalar 7))) (list 7)) (apl-test "scan +\\ vector preserves shape" (sh (apl-scan apl-add (make-array (list 5) (list 1 2 3 4 5)))) (list 5)) (apl-test "scan +\\ matrix preserves shape" (sh (apl-scan apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 2 3)) (apl-test "scan +\\ matrix row-wise" (rv (apl-scan apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 1 3 6 4 9 15)) (apl-test "scan max\\ matrix row-wise running max" (rv (apl-scan apl-max (make-array (list 2 3) (list 3 1 4 1 5 9)))) (list 3 3 4 1 5 9)) (apl-test "scan-first +\\ vector same as scan" (rv (apl-scan-first apl-add (make-array (list 5) (list 1 2 3 4 5)))) (list 1 3 6 10 15)) (apl-test "scan-first +\\ scalar no-op" (rv (apl-scan-first apl-add (apl-scalar 9))) (list 9)) (apl-test "scan-first +\\ matrix preserves shape" (sh (apl-scan-first apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 2 3)) (apl-test "scan-first +\\ matrix col-wise" (rv (apl-scan-first apl-add (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 1 2 3 5 7 9)) (apl-test "scan-first max\\ matrix col-wise running max" (rv (apl-scan-first apl-max (make-array (list 3 2) (list 3 1 4 1 5 9)))) (list 3 1 4 1 5 9)) (apl-test "each negate vector" (rv (apl-each apl-neg-m (make-array (list 3) (list 1 2 3)))) (list -1 -2 -3)) (apl-test "each negate vector preserves shape" (sh (apl-each apl-neg-m (make-array (list 3) (list 1 2 3)))) (list 3)) (apl-test "each reciprocal vector" (rv (apl-each apl-recip (make-array (list 3) (list 1 2 4)))) (list 1 (/ 1 2) (/ 1 4))) (apl-test "each abs vector" (rv (apl-each apl-abs (make-array (list 4) (list -1 2 -3 4)))) (list 1 2 3 4)) (apl-test "each scalar" (rv (apl-each apl-neg-m (apl-scalar 5))) (list -5)) (apl-test "each scalar shape" (sh (apl-each apl-neg-m (apl-scalar 5))) (list)) (apl-test "each negate matrix shape" (sh (apl-each apl-neg-m (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list 2 3)) (apl-test "each negate matrix values" (rv (apl-each apl-neg-m (make-array (list 2 3) (list 1 2 3 4 5 6)))) (list -1 -2 -3 -4 -5 -6)) (apl-test "each-dyadic scalar+scalar" (rv (apl-each-dyadic apl-add (apl-scalar 3) (apl-scalar 4))) (list 7)) (apl-test "each-dyadic scalar+vector" (rv (apl-each-dyadic apl-add (apl-scalar 10) (make-array (list 3) (list 1 2 3)))) (list 11 12 13)) (apl-test "each-dyadic vector+scalar" (rv (apl-each-dyadic apl-add (make-array (list 3) (list 1 2 3)) (apl-scalar 10))) (list 11 12 13)) (apl-test "each-dyadic vector+vector" (rv (apl-each-dyadic apl-add (make-array (list 3) (list 1 2 3)) (make-array (list 3) (list 10 20 30)))) (list 11 22 33)) (apl-test "each-dyadic mul matrix+matrix shape" (sh (apl-each-dyadic apl-mul (make-array (list 2 2) (list 1 2 3 4)) (make-array (list 2 2) (list 5 6 7 8)))) (list 2 2)) (apl-test "each-dyadic mul matrix+matrix values" (rv (apl-each-dyadic apl-mul (make-array (list 2 2) (list 1 2 3 4)) (make-array (list 2 2) (list 5 6 7 8)))) (list 5 12 21 32))