Author: yamakenz
Date: Sun Jul  1 06:15:21 2007
New Revision: 4645

Modified:
   sigscheme-trunk/lib/srfi-1.scm
   sigscheme-trunk/test/test-srfi1-another.scm

Log:
* lib/srfi-1.scm
  - (list=): Fix broken comparison on 3 or more lists
* test/test-srfi1-another.scm
  - Add tests for list= and complete tests for predicates


Modified: sigscheme-trunk/lib/srfi-1.scm
==============================================================================
--- sigscheme-trunk/lib/srfi-1.scm      (original)
+++ sigscheme-trunk/lib/srfi-1.scm      Sun Jul  1 06:15:21 2007
@@ -17,6 +17,7 @@
 ;; 2007-06-30 yamaken   - Fix broken arguments receiving of delete-duplicates!
 ;;                      - Fix broken lset-difference call of lset-xor and
 ;;                        lset-xor! (as like as Scheme48)
+;; 2007-07-01 yamaken   - Fix broken comparison of list= on 3 or more lists
 
 
 ;;; This is a library of list- and pair-processing functions. I wrote it after
@@ -429,13 +430,13 @@
                  (others (cdr others)))
              (if (eq? list-a list-b)   ; EQ? => LIST=
                  (lp1 list-b others)
-                 (let lp2 ((list-a list-a) (list-b list-b))
-                   (if (null-list? list-a)
-                       (and (null-list? list-b)
+                 (let lp2 ((tail-a list-a) (tail-b list-b))
+                   (if (null-list? tail-a)
+                       (and (null-list? tail-b)
                             (lp1 list-b others))
-                       (and (not (null-list? list-b))
-                            (= (car list-a) (car list-b))
-                            (lp2 (cdr list-a) (cdr list-b)))))))))))
+                       (and (not (null-list? tail-b))
+                            (= (car tail-a) (car tail-b))
+                            (lp2 (cdr tail-a) (cdr tail-b)))))))))))
                        
 
 

Modified: sigscheme-trunk/test/test-srfi1-another.scm
==============================================================================
--- sigscheme-trunk/test/test-srfi1-another.scm (original)
+++ sigscheme-trunk/test/test-srfi1-another.scm Sun Jul  1 06:15:21 2007
@@ -528,6 +528,136 @@
 (assert-eq? (tn) #t (not-pair? (vector 0 1 2)))
 
 ;; list=
+(tn "list= SRFI-1 examples")
+(assert-eq? (tn) #t (list= eq?))
+(assert-eq? (tn) #t (list= eq? '(a)))
+(tn "list= 1 list")
+(assert-eq? (tn) #t (list= eq?    '()))
+(assert-eq? (tn) #t (list= equal? '()))
+(assert-eq? (tn) #t (list= eq?    lst))
+(assert-eq? (tn) #t (list= equal? lst))
+(assert-eq? (tn) #t (list= eq?    (list elm0)))
+(assert-eq? (tn) #t (list= equal? (list elm0)))
+(assert-eq? (tn) #t (list= equal? '("a" "b" "c")))
+(assert-eq? (tn) #t (list= equal? (list "a" "b" "c")))
+(tn "list= 2 lists")
+(assert-eq? (tn) #t (list= eq?    '() '()))
+(assert-eq? (tn) #t (list= equal? '() '()))
+(assert-eq? (tn) #t (list= eq?    lst lst))
+(assert-eq? (tn) #t (list= equal? lst lst))
+(assert-eq? (tn) #t (list= eq?    (list elm0)           (list elm0)))
+(assert-eq? (tn) #t (list= equal? (list elm0)           (list elm0)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1)      (list elm0 elm1)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1)      (list elm0 elm1)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? '("a" "b" "c")        '("a" "b" "c")))
+(assert-eq? (tn) #t (list= equal? (list "a" "b" "c")    (list "a" "b" "c")))
+(tn "list= 2 lists unequal length")
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1)      (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1)      (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1)))
+(assert-eq? (tn) #f (list= eq?    '()                   (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? '()                   (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) '()))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) '()))
+(tn "list= 3 lists")
+(assert-eq? (tn) #t (list= eq?    '() '() '()))
+(assert-eq? (tn) #t (list= equal? '() '() '()))
+(assert-eq? (tn) #t (list= eq?    lst lst lst))
+(assert-eq? (tn) #t (list= equal? lst lst lst))
+(assert-eq? (tn) #t (list= eq?    (list elm0) (list elm0) (list elm0)))
+(assert-eq? (tn) #t (list= equal? (list elm0) (list elm0) (list elm0)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1) (list elm0 elm1)
+                                  (list elm0 elm1)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1) (list elm0 elm1)
+                                  (list elm0 elm1)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? '("a" "b" "c") '("a" "b" "c")
+                                  '("a" "b" "c")))
+;; This test is failed on the original srfi-1-reference.scm
+(assert-eq? (tn) #t (list= equal? (list "a" "b" "c") (list "a" "b" "c")
+                                  (list "a" "b" "c")))
+(tn "list= 3 lists unequal length")
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1)      (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1)      (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1)))
+(assert-eq? (tn) #f (list= eq?    '()                   (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? '()                   (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) '()             
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) '()             
+                                  (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  '()))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  '()))
+(tn "list= 4 lists")
+(assert-eq? (tn) #t (list= eq?    '() '() '() '()))
+(assert-eq? (tn) #t (list= equal? '() '() '() '()))
+(assert-eq? (tn) #t (list= eq?    lst lst lst lst))
+(assert-eq? (tn) #t (list= equal? lst lst lst lst))
+(assert-eq? (tn) #t (list= eq?    (list elm0) (list elm0)
+                                  (list elm0) (list elm0)))
+(assert-eq? (tn) #t (list= equal? (list elm0) (list elm0)
+                                  (list elm0) (list elm0)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1) (list elm0 elm1)
+                                  (list elm0 elm1) (list elm0 elm1)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1) (list elm0 elm1)
+                                  (list elm0 elm1) (list elm0 elm1)))
+(assert-eq? (tn) #t (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #t (list= equal? '("a" "b" "c") '("a" "b" "c")
+                                  '("a" "b" "c") '("a" "b" "c")))
+;; This test is failed on the original srfi-1-reference.scm
+(assert-eq? (tn) #t (list= equal? (list "a" "b" "c") (list "a" "b" "c")
+                                  (list "a" "b" "c") (list "a" "b" "c")))
+(tn "list= 4 lists unequal length")
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1)      (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1)      (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1)      (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1)      (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    '()                   (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? '()                   (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) '()             
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) '()             
+                                  (list elm0 elm1 elm2) (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  '()                   (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  '()                   (list elm0 elm1 elm2)))
+(assert-eq? (tn) #f (list= eq?    (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) '()))
+(assert-eq? (tn) #f (list= equal? (list elm0 elm1 elm2) (list elm0 elm1 elm2)
+                                  (list elm0 elm1 elm2) '()))
 
 
 ;;

Reply via email to