summaryrefslogtreecommitdiffstats
path: root/tests/016/arith.tl
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-09-23 06:21:30 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-09-23 06:21:30 -0700
commit7e36a3f2a6501a0bc6d24836610746f59427b496 (patch)
tree27530ff29c4a99612bac17199dd0c98a2397751a /tests/016/arith.tl
parentbbd2e86fa76d4afb0ca39a28682f5a0da62aa1a0 (diff)
downloadtxr-7e36a3f2a6501a0bc6d24836610746f59427b496.tar.gz
txr-7e36a3f2a6501a0bc6d24836610746f59427b496.tar.bz2
txr-7e36a3f2a6501a0bc6d24836610746f59427b496.zip
New variants of each operator for sum and product.
* lisplib.c (arith_each_instantiate, arith_each_set_entries): New functions. (each_prod_set_entries): Add sum-each-prod, sum-each-prod*, mul-each-prod and mul-each-prod* as autoload triggers for each-prod.tl, where those macros are now defined. (lisplib_init): Register autoloading of arith-each.tl via the two new functions. * stdlib/arith-each.tl: New file. * stdlib/each-prod.tl (sys:expand-each-prod*): Handle sum-each-prod* and mul-each-prod* in the same way, by mapping to their parallel binding counterparts. (sys:expand-arith-each-prod): New function. (sym-each-prod, mul-each-prod, sum-each-prod*, mul-each-prod*): New macros. * tests/016/arith.tl: New tests. * txr.1: Documented. * stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'tests/016/arith.tl')
-rw-r--r--tests/016/arith.tl58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/016/arith.tl b/tests/016/arith.tl
index 34a82c7f..367b0c32 100644
--- a/tests/016/arith.tl
+++ b/tests/016/arith.tl
@@ -253,3 +253,61 @@
3.0 3.0 3.0 3.0 3.0)])
(0.0 0.0 0.0 0.0 0.0
1.5 2.25 2.625 2.8125 2.90625))
+
+(mtest
+ (sum-each ((x '(1 2 3))
+ (y '(4 5 6)))
+ (* x y))
+ 32
+ (mul-each ((x '(1 2 3))
+ (y '(4 5 6)))
+ (+ x y))
+ 315
+ (sum-each* ((x '(1 2 3))
+ (y (cdr x)))
+ (* x y))
+ 8
+ (mul-each* ((x '(1 2 3))
+ (y (cdr x)))
+ (+ x y))
+ 15
+ (sum-each ((x '(1 2 3))
+ (y (cdr x)))
+ (* x y))
+ :error
+ (mul-each ((x '(1 2 3))
+ (y (cdr x)))
+ (+ x y))
+ :error)
+
+(mtest
+ (sum-each-prod ((x '(1 2 3))
+ (y '(4 3 2)))
+ (* x y))
+ 54
+ (sum-each-prod* ((x '(1 2 3 4))
+ (y (cdr x)))
+ (* x y))
+ 90
+ (sum-each-prod ((x '(1 2 3 4))
+ (y (cdr x)))
+ (* x y))
+ :error)
+
+(mvtest
+ (mul-each-prod ((x '(1 2 3))
+ (y '(4 3 2)))
+ (+ x y))
+ (* (+ 1 4) (+ 1 3) (+ 1 2)
+ (+ 2 4) (+ 2 3) (+ 2 2)
+ (+ 3 4) (+ 3 3) (+ 3 2))
+ (mul-each-prod* ((x '(1 2 3))
+ (y (cdr x)))
+ (+ x y))
+ (* (+ 1 2) (+ 1 3)
+ (+ 2 2) (+ 2 3)
+ (+ 3 2) (+ 3 3))
+ (sum-each-prod ((x '(1 2 3))
+ (y (cdr x)))
+ (* x y))
+ :error)