changeset 5700:37479d841681

Fix subsetp based on patch by Benson and Steven Mitchell. Add appropriate short-circuits for null set arguments. Add tests (mostly from Steven Mitchell) to test suite.
author Stephen J. Turnbull <stephen@xemacs.org>
date Mon, 24 Dec 2012 14:12:51 +0900
parents a95c89dc9695
children ad35a0cd95f5
files src/ChangeLog src/sequence.c tests/ChangeLog tests/automated/lisp-tests.el
diffstat 4 files changed, 44 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Dec 24 04:16:31 2012 +0900
+++ b/src/ChangeLog	Mon Dec 24 14:12:51 2012 +0900
@@ -1,3 +1,11 @@
+2012-12-24  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	Based on patch by Benson and Steven Mitchell on XEmacs Beta
+	<50D16FF7.4090708@bnin.net>.
+
+	* sequence.c (venn): Fix bug in handling null arguments.
+	Add null set short circuits, conditional on caller is `subsetp'.
+
 2012-10-18  Stephen J. Turnbull  <stephen@xemacs.org>
 
 	* fontcolor-xlike-inc.c (xft_find_charset_font):
--- a/src/sequence.c	Mon Dec 24 04:16:31 2012 +0900
+++ b/src/sequence.c	Mon Dec 24 14:12:51 2012 +0900
@@ -7606,6 +7606,20 @@
   CHECK_LIST (liszt2);
 
   CHECK_KEY_ARGUMENT (key);
+ 
+  /* #### Consider refactoring these tests into callers, and/or optimizing
+     tests. */
+  if (EQ (caller, Qsubsetp))
+    {
+      if (NILP (liszt1))
+	{
+	  return Qt;
+	}
+      if (NILP (liszt2))
+        {
+	  return Qnil;
+        }
+    }
 
   if (NILP (liszt1) && intersectionp)
     {
--- a/tests/ChangeLog	Mon Dec 24 04:16:31 2012 +0900
+++ b/tests/ChangeLog	Mon Dec 24 14:12:51 2012 +0900
@@ -1,3 +1,8 @@
+2012-12-19  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* automated/lisp-tests.el: Add tests of #'subsetp.
+	Thanks Steven and Benson Mitchell <smitchell@bnin.net>.
+
 2012-12-14  Mats Lidell  <matsl@xemacs.org>
 
 	* automated/register-tests.el: New. Test for register.el. Test
--- a/tests/automated/lisp-tests.el	Mon Dec 24 04:16:31 2012 +0900
+++ b/tests/automated/lisp-tests.el	Mon Dec 24 14:12:51 2012 +0900
@@ -2435,6 +2435,23 @@
 	       (gethash hashed-bignum hashing))
 	      "checking hashing works correctly with #'eql tests and bignums"))))
 
+;; #'subsetp tests.
+;; Return non-nil if every element of LIST1 also appears in LIST2.
+;; A couple of non-nondegenerate false cases.
+(Assert (not (subsetp (list ?a ?b) (list ?c ?d))))
+(Assert (not (subsetp (list ?a ?b) (list ?b ?c ?d))))
+;; Next five thanks to Steven and Benson Mitchell on XEmacs Beta
+;; <50D16FF7.4090708@bnin.net>.
+;; Two non-degenerate true cases.
+(Assert (subsetp (list ?a) (list ?a ?b ?c ?d)))
+(Assert (subsetp (list ?a ?b) (list ?a ?b ?c ?d)))
+;; The three degenerate cases involving nil.
+(Assert (not (subsetp (list ?a) nil)))
+(Assert (subsetp nil (list ?a ?b ?c ?d)))
+(Assert (subsetp nil nil))
+;; #### We should also test the keywords.
+;; #### We should also test the error conditions.
+
 ;; 
 (when (decode-char 'ucs #x0192)
   (Check-Error