summaryrefslogtreecommitdiff
path: root/test-suite/tests/peval.test
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2020-05-13 15:51:58 +0200
committerAndy Wingo <wingo@pobox.com>2020-05-13 15:51:58 +0200
commit7df3f3414bfb19a1bd7fbe29bc30a1ab28bf4319 (patch)
tree18f10af90a2b0a8c822531059cc635d5d219165c /test-suite/tests/peval.test
parent498428fbef63d9159d84f18f719e02927341aa9a (diff)
downloadguile-7df3f3414bfb19a1bd7fbe29bc30a1ab28bf4319.tar.gz
More robust reduction of equal? and eqv?
* module/language/tree-il/primitives.scm (expand-eq): Just expand out to binary comparisons. Also expand eq?, which was missing. Leave strength reduction to peval. (character-comparison-expander): Move down, as it depends on <, <=, and so on. * module/language/tree-il/peval.scm (peval): Robustly reduce equal? and eqv?. * test-suite/tests/peval.test ("partial evaluation"): Expect fixnum comparison to reduce to eq?. ("eqv?", "equal?"): A new battery of tests. * test-suite/tests/tree-il.test ("primitives"): Remove reduction tests.
Diffstat (limited to 'test-suite/tests/peval.test')
-rw-r--r--test-suite/tests/peval.test62
1 files changed, 59 insertions, 3 deletions
diff --git a/test-suite/tests/peval.test b/test-suite/tests/peval.test
index 3805259f0..366d5186e 100644
--- a/test-suite/tests/peval.test
+++ b/test-suite/tests/peval.test
@@ -642,11 +642,11 @@
((3 2 1) 'a)
(else 'b))
(let (key) (_) ((toplevel foo))
- (if (if (primcall eqv? (lexical key _) (const 3))
+ (if (if (primcall eq? (lexical key _) (const 3))
(const #t)
- (if (primcall eqv? (lexical key _) (const 2))
+ (if (primcall eq? (lexical key _) (const 2))
(const #t)
- (primcall eqv? (lexical key _) (const 1))))
+ (primcall eq? (lexical key _) (const 1))))
(const a)
(const b))))
@@ -1441,3 +1441,59 @@
(call (lexical add1 _)
(const 1)
(const 2))))))))
+
+(with-test-prefix "eqv?"
+ (pass-if-peval (eqv? x #f)
+ (primcall eq? (toplevel x) (const #f)))
+
+ (pass-if-peval (eqv? x '())
+ (primcall eq? (toplevel x) (const ())))
+
+ (pass-if-peval (eqv? x #t)
+ (primcall eq? (toplevel x) (const #t)))
+
+ (pass-if-peval (eqv? x 'sym)
+ (primcall eq? (toplevel x) (const sym)))
+
+ (pass-if-peval (eqv? x 42)
+ (primcall eq? (toplevel x) (const 42)))
+
+ (pass-if-peval (eqv? x #\a)
+ (primcall eq? (toplevel x) (const #\a)))
+
+ (pass-if-peval (eqv? x 42.0)
+ (primcall eqv? (toplevel x) (const '42.0)))
+
+ (pass-if-peval (eqv? x #nil)
+ (primcall eq? (toplevel x) (const #nil)))
+
+ (pass-if-peval (eqv? x '(a . b))
+ (primcall eq? (toplevel x) (const (a . b)))))
+
+(with-test-prefix "equal?"
+ (pass-if-peval (equal? x #f)
+ (primcall eq? (toplevel x) (const #f)))
+
+ (pass-if-peval (equal? x '())
+ (primcall eq? (toplevel x) (const ())))
+
+ (pass-if-peval (equal? x #t)
+ (primcall eq? (toplevel x) (const #t)))
+
+ (pass-if-peval (equal? x 'sym)
+ (primcall eq? (toplevel x) (const sym)))
+
+ (pass-if-peval (equal? x 42)
+ (primcall eq? (toplevel x) (const 42)))
+
+ (pass-if-peval (equal? x #\a)
+ (primcall eq? (toplevel x) (const #\a)))
+
+ (pass-if-peval (equal? x 42.0)
+ (primcall eqv? (toplevel x) (const '42.0)))
+
+ (pass-if-peval (equal? x #nil)
+ (primcall eq? (toplevel x) (const #nil)))
+
+ (pass-if-peval (equal? x '(a . b))
+ (primcall equal? (toplevel x) (const (a . b)))))