Test suites for SRFIs
svn: r1630
This commit is contained in:
parent
723876317a
commit
7ce6693974
459
collects/tests/srfi/1/alist-test.ss
Normal file
459
collects/tests/srfi/1/alist-test.ss
Normal file
|
@ -0,0 +1,459 @@
|
||||||
|
;;;
|
||||||
|
;;; <alist-test.ss> ---- Association list tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:14:22 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module alist-test mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "alist.ss" "srfi" "1") assoc)
|
||||||
|
(rename (lib "alist.ss" "srfi" "1") s:assoc assoc))
|
||||||
|
|
||||||
|
(provide alist-tests)
|
||||||
|
|
||||||
|
(define alist-tests
|
||||||
|
(make-test-suite
|
||||||
|
"Association list tests"
|
||||||
|
|
||||||
|
;; ALIST-CONS
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-cons:null-list"
|
||||||
|
(assert-equal? (alist-cons 'Manawa 'Manchester '())
|
||||||
|
'((Manawa . Manchester))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-cons:singleton-list"
|
||||||
|
(let* ((base '((Manilla . Manly)))
|
||||||
|
(result (alist-cons 'Manning 'Manson base)))
|
||||||
|
(assert-equal? result '((Manning . Manson)
|
||||||
|
(Manilla . Manly)))
|
||||||
|
(assert-eq? (cdr result) base)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-cons:longer-list"
|
||||||
|
(let* ((base '((Manteno . Mapleside)
|
||||||
|
(Mapleton . Maquoketa)
|
||||||
|
(Marathon . Marcus)
|
||||||
|
(Marengo . Marietta)
|
||||||
|
(Marion . Mark)))
|
||||||
|
(result (alist-cons 'Marne 'Marquette base)))
|
||||||
|
(assert-equal? result
|
||||||
|
'((Marne . Marquette)
|
||||||
|
(Manteno . Mapleside)
|
||||||
|
(Mapleton . Maquoketa)
|
||||||
|
(Marathon . Marcus)
|
||||||
|
(Marengo . Marietta)
|
||||||
|
(Marion . Mark)))
|
||||||
|
(assert-eq? (cdr result) base)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-cons:longer-list-with-duplicate-key"
|
||||||
|
(let* ((base '((Marquisville . Marsh)
|
||||||
|
(Marshalltown . Martelle)
|
||||||
|
(Martensdale . Martinsburg)
|
||||||
|
(Martinstown . Marysville)
|
||||||
|
(Masonville . Massena)
|
||||||
|
(Massey . Massilon)
|
||||||
|
(Matlock . Maud)))
|
||||||
|
(result (alist-cons 'Masonville 'Maurice base)))
|
||||||
|
(assert-equal? result '((Masonville . Maurice)
|
||||||
|
(Marquisville . Marsh)
|
||||||
|
(Marshalltown . Martelle)
|
||||||
|
(Martensdale . Martinsburg)
|
||||||
|
(Martinstown . Marysville)
|
||||||
|
(Masonville . Massena)
|
||||||
|
(Massey . Massilon)
|
||||||
|
(Matlock . Maud)))
|
||||||
|
(assert-eq? (cdr result) base)))
|
||||||
|
|
||||||
|
;; ALIST-COPY
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-copy:null-list"
|
||||||
|
(assert-true (null? (alist-copy '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-copy:flat-list"
|
||||||
|
(let* ((original '((Maxon . Maxwell)
|
||||||
|
(Maynard . Maysville)
|
||||||
|
(McCallsburg . McCausland)
|
||||||
|
(McClelland . McGregor)
|
||||||
|
(McIntire . McNally)))
|
||||||
|
(result (alist-copy original)))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? result original)
|
||||||
|
(not (eq? result original))
|
||||||
|
(not (eq? (car result) (car original)))
|
||||||
|
(not (eq? (cdr result) (cdr original)))
|
||||||
|
(not (eq? (cadr result) (cadr original)))
|
||||||
|
(not (eq? (cddr result) (cddr original)))
|
||||||
|
(not (eq? (caddr result) (caddr original)))
|
||||||
|
(not (eq? (cdddr result) (cdddr original)))
|
||||||
|
(not (eq? (cadddr result) (cadddr original)))
|
||||||
|
(not (eq? (cddddr result) (cddddr original)))
|
||||||
|
(not (eq? (car (cddddr result))
|
||||||
|
(car (cddddr original))))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-copy:bush"
|
||||||
|
(let* ((first '(McPaul))
|
||||||
|
(second '(McPherson
|
||||||
|
Mechanicsville
|
||||||
|
Mederville
|
||||||
|
(Mediapolis Medora)
|
||||||
|
((Mekee Melbourne Melcher))))
|
||||||
|
(third 'Melrose)
|
||||||
|
(original (list (cons 'Meltonville first)
|
||||||
|
(cons 'Melvin second)
|
||||||
|
(cons 'Menlo third)))
|
||||||
|
(result (alist-copy original)))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? result original)
|
||||||
|
(not (eq? result original))
|
||||||
|
(not (eq? (car result) (car original)))
|
||||||
|
(eq? (cdar result) first)
|
||||||
|
(not (eq? (cdr result) (cdr original)))
|
||||||
|
(not (eq? (cadr result) (cadr original)))
|
||||||
|
(eq? (cdadr result) second)
|
||||||
|
(not (eq? (cddr result) (cddr original)))
|
||||||
|
(not (eq? (caddr result) (caddr original)))
|
||||||
|
(eq? (cdaddr result) third)))))
|
||||||
|
|
||||||
|
;; ALIST-DELETE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:null-list"
|
||||||
|
(assert-true (null? (alist-delete 'Mercer '() (lambda (x y) #t)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete 'Meriden
|
||||||
|
'((Merrill . Merrimac)))
|
||||||
|
'((Merrill . Merrimac))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null? (alist-delete 'Meservey
|
||||||
|
'((Metz . Meyer)
|
||||||
|
(Middleburg . Middletwon)
|
||||||
|
(Midvale . Midway)
|
||||||
|
(Miles . Milford)
|
||||||
|
(Miller . Millersburg))
|
||||||
|
(lambda (x y) #t)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete 561
|
||||||
|
'((562 . 563)
|
||||||
|
(565 . 564)
|
||||||
|
(566 . 567)
|
||||||
|
(569 . 568)
|
||||||
|
(570 . 571))
|
||||||
|
(lambda (x y) (odd? (+ x y))))
|
||||||
|
'((565 . 564) (569 . 568))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete 'Millerton
|
||||||
|
'((Millman . Millnerville)
|
||||||
|
(Millville . Milo)
|
||||||
|
(Milton . Minburn)
|
||||||
|
(Minden . Mineola)
|
||||||
|
(Minerva . Mingo))
|
||||||
|
(lambda (x y) #f))
|
||||||
|
'((Millman . Millnerville)
|
||||||
|
(Millville . Milo)
|
||||||
|
(Milton . Minburn)
|
||||||
|
(Minden . Mineola)
|
||||||
|
(Minerva . Mingo))))
|
||||||
|
|
||||||
|
;; ALIST-DELETE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:null-list"
|
||||||
|
(assert-true (null? (alist-delete! 'Mitchell '() (lambda (x y) #t)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! 'Mitchellville
|
||||||
|
(list (cons 'Modale 'Moingona)))
|
||||||
|
'((Modale . Moingona))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(alist-delete! 'Mona
|
||||||
|
(list (cons 'Mondamin 'Moneta)
|
||||||
|
(cons 'Moningers 'Monmouth)
|
||||||
|
(cons 'Monona 'Monroe)
|
||||||
|
(cons 'Monteith 'Monterey)
|
||||||
|
(cons 'Montezuma 'Montgomery))
|
||||||
|
(lambda (x y) #t)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! 572
|
||||||
|
(list (cons 573 574)
|
||||||
|
(cons 576 575)
|
||||||
|
(cons 577 578)
|
||||||
|
(cons 580 579)
|
||||||
|
(cons 581 582))
|
||||||
|
(lambda (x y) (even? (+ x y))))
|
||||||
|
'((573 . 574) (577 . 578) (581 . 582))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! 'Monti
|
||||||
|
(list (cons 'Monticello 'Montour)
|
||||||
|
(cons 'Montpelier 'Montrose)
|
||||||
|
(cons 'Mooar 'Moorhead)
|
||||||
|
(cons 'Moorland 'Moran)
|
||||||
|
(cons 'Moravia 'Morley)))
|
||||||
|
'((Monticello . Montour)
|
||||||
|
(Montpelier . Montrose)
|
||||||
|
(Mooar . Moorhead)
|
||||||
|
(Moorland . Moran)
|
||||||
|
(Moravia . Morley))))
|
||||||
|
|
||||||
|
;; ALIST-DELETE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:null-list"
|
||||||
|
(assert-true (null? (alist-delete '(Reasnor . Redding) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:in-singleton-list"
|
||||||
|
(assert-true (null?
|
||||||
|
(alist-delete '(Redfield . Reeceville)
|
||||||
|
'(((Redfield . Reeceville) . Reinbeck))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:not-in-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Rembrandt . Remsen)
|
||||||
|
'(((Renwick . Republic) . Rhodes)))
|
||||||
|
'(((Renwick . Republic) . Rhodes))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:at-beginning-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Riceville . Richard)
|
||||||
|
'(((Riceville . Richard) . Richfield)
|
||||||
|
((Richland . Richmond) . Rickardsville)
|
||||||
|
((Ricketts . Rider) . Ridgeport)
|
||||||
|
((Ridgeway . Riggs) . Rinard)
|
||||||
|
((Ringgold . Ringsted) . Rippey)))
|
||||||
|
'(((Richland . Richmond) . Rickardsville)
|
||||||
|
((Ricketts . Rider) . Ridgeport)
|
||||||
|
((Ridgeway . Riggs) . Rinard)
|
||||||
|
((Ringgold . Ringsted) . Rippey))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:in-middle-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Ritter . Riverdale)
|
||||||
|
'(((Riverside . Riverton) . Roberts)
|
||||||
|
((Robertson . Robins) . Robinson)
|
||||||
|
((Rochester . Rockdale) . Rockford)
|
||||||
|
((Rockville . Rockwell) . Rodman)
|
||||||
|
((Ritter . Riverdale) . Rodney)
|
||||||
|
((Roelyn . Rogers) . Roland)
|
||||||
|
((Rolfe . Rome) . Roscoe)))
|
||||||
|
'(((Riverside . Riverton) . Roberts)
|
||||||
|
((Robertson . Robins) . Robinson)
|
||||||
|
((Rochester . Rockdale) . Rockford)
|
||||||
|
((Rockville . Rockwell) . Rodman)
|
||||||
|
((Roelyn . Rogers) . Roland)
|
||||||
|
((Rolfe . Rome) . Roscoe))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:at-end-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Rose . Roselle)
|
||||||
|
'(((Roseville . Ross) . Rosserdale)
|
||||||
|
((Rossie . Rossville) . Rowan)
|
||||||
|
((Rowley . Royal) . Rubio)
|
||||||
|
((Ruble . Rudd) . Runnells)
|
||||||
|
((Rose . Roselle) . Russell)))
|
||||||
|
'(((Roseville . Ross) . Rosserdale)
|
||||||
|
((Rossie . Rossville) . Rowan)
|
||||||
|
((Rowley . Royal) . Rubio)
|
||||||
|
((Ruble . Rudd) . Runnells))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:not-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Ruthven . Rutland)
|
||||||
|
'(((Rutledge . Ryan) . Sabula)
|
||||||
|
((Sageville . Salem) . Salina)
|
||||||
|
((Salix . Sanborn) . Sandusky)
|
||||||
|
((Sandyville . Santiago) . Saratoga)
|
||||||
|
((Sattre . Saude) . Savannah)))
|
||||||
|
'(((Rutledge . Ryan) . Sabula)
|
||||||
|
((Sageville . Salem) . Salina)
|
||||||
|
((Salix . Sanborn) . Sandusky)
|
||||||
|
((Sandyville . Santiago) . Saratoga)
|
||||||
|
((Sattre . Saude) . Savannah))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete:several-matches-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete '(Sawyer . Saylor)
|
||||||
|
'(((Saylorville . Scarville) . Schaller)
|
||||||
|
((Schleswig . Schley) . Sciola)
|
||||||
|
((Sawyer . Saylor) . Scranton)
|
||||||
|
((Searsboro . Sedan) . Selma)
|
||||||
|
((Sawyer . Saylor) . Seneca)
|
||||||
|
((Seney . Sewal) . Sexton)
|
||||||
|
((Sawyer . Saylor) . Seymour)))
|
||||||
|
'(((Saylorville . Scarville) . Schaller)
|
||||||
|
((Schleswig . Schley) . Sciola)
|
||||||
|
((Searsboro . Sedan) . Selma)
|
||||||
|
((Seney . Sewal) . Sexton))))
|
||||||
|
|
||||||
|
;; ALIST-DELETE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:null-list"
|
||||||
|
(assert-true (null? (alist-delete! (cons 'Unionville 'Unique) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:in-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(alist-delete! (cons 'Updegraff 'Urbana)
|
||||||
|
(list (cons (cons 'Updegraff 'Urbana)
|
||||||
|
'Summitville))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:not-in-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Urbandale 'Ute)
|
||||||
|
(list (cons (cons 'Utica 'Vail) 'Valeria)))
|
||||||
|
'(((Utica . Vail) . Valeria))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:at-beginning-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Valley 'Vandalia)
|
||||||
|
(list (cons (cons 'Valley 'Vandalia) 'Varina)
|
||||||
|
(cons (cons 'Ventura 'Vernon) 'Victor)
|
||||||
|
(cons (cons 'Viele 'Villisca) 'Vincennes)
|
||||||
|
(cons (cons 'Vincent 'Vining) 'Vinje)
|
||||||
|
(cons (cons 'Vinton 'Viola) 'Volga)))
|
||||||
|
'(((Ventura . Vernon) . Victor)
|
||||||
|
((Viele . Villisca) . Vincennes)
|
||||||
|
((Vincent . Vining) . Vinje)
|
||||||
|
((Vinton . Viola) . Volga))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:in-middle-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Volney 'Voorhies)
|
||||||
|
(list (cons (cons 'Wadena 'Wahpeton) 'Walcott)
|
||||||
|
(cons (cons 'Wald 'Wales) 'Walford)
|
||||||
|
(cons (cons 'Walker 'Wallin) 'Wallingford)
|
||||||
|
(cons (cons 'Walnut 'Wapello) 'Ward)
|
||||||
|
(cons (cons 'Volney 'Voorhies) 'Ware)
|
||||||
|
(cons (cons 'Washburn 'Washington) 'Washta)
|
||||||
|
(cons (cons 'Waterloo 'Waterville)
|
||||||
|
'Watkins)))
|
||||||
|
'(((Wadena . Wahpeton) . Walcott)
|
||||||
|
((Wald . Wales) . Walford)
|
||||||
|
((Walker . Wallin) . Wallingford)
|
||||||
|
((Walnut . Wapello) . Ward)
|
||||||
|
((Washburn . Washington) . Washta)
|
||||||
|
((Waterloo . Waterville) . Watkins))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:at-end-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Watson 'Watterson)
|
||||||
|
(list (cons (cons 'Waubeek 'Waucoma) 'Waukee)
|
||||||
|
(cons (cons 'Waukon 'Waupeton) 'Waverly)
|
||||||
|
(cons (cons 'Wayland 'Webb) 'Webster)
|
||||||
|
(cons (cons 'Weldon 'Weller) 'Wellman)
|
||||||
|
(cons (cons 'Watson 'Watterson) 'Wellsburg)))
|
||||||
|
'(((Waubeek . Waucoma) . Waukee)
|
||||||
|
((Waukon . Waupeton) . Waverly)
|
||||||
|
((Wayland . Webb) . Webster)
|
||||||
|
((Weldon . Weller) . Wellman))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:not-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Welton 'Wesley)
|
||||||
|
(list (cons (cons 'Western 'Westerville)
|
||||||
|
'Westfield)
|
||||||
|
(cons (cons 'Westgate 'Weston) 'Westphalia)
|
||||||
|
(cons (cons 'Westside 'Westview) 'Wever)
|
||||||
|
(cons (cons 'Wheatland 'Whiting)
|
||||||
|
'Whittemore)
|
||||||
|
(cons (cons 'Whitten 'Whittier) 'Wichita)))
|
||||||
|
'(((Western . Westerville) . Westfield)
|
||||||
|
((Westgate . Weston) . Westphalia)
|
||||||
|
((Westside . Westview) . Wever)
|
||||||
|
((Wheatland . Whiting) . Whittemore)
|
||||||
|
((Whitten . Whittier) . Wichita))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"alist-delete!:several-matches-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(alist-delete! (cons 'Wick 'Wightman)
|
||||||
|
(list (cons (cons 'Wilke 'Willey) 'Williams)
|
||||||
|
(cons (cons 'Williamsburg 'Williamson)
|
||||||
|
'Williamstown)
|
||||||
|
(cons (cons 'Wick 'Wightman) 'Wilmar)
|
||||||
|
(cons (cons 'Wilton 'Winchester) 'Windham)
|
||||||
|
(cons (cons 'Wick 'Wightman) 'Winfield)
|
||||||
|
(cons (cons 'Winkelmans 'Winterset)
|
||||||
|
'Winthrop)
|
||||||
|
(cons (cons 'Wick 'Wightman) 'Wiota)))
|
||||||
|
'(((Wilke . Willey) . Williams)
|
||||||
|
((Williamsburg . Williamson)
|
||||||
|
. Williamstown)
|
||||||
|
((Wilton . Winchester) . Windham)
|
||||||
|
((Winkelmans . Winterset) . Winthrop))))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
|
||||||
|
;;; alist-test.ss ends here
|
31
collects/tests/srfi/1/all-1-tests.ss
Normal file
31
collects/tests/srfi/1/all-1-tests.ss
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
(module all-1-tests mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require "alist-test.ss"
|
||||||
|
"cons-test.ss"
|
||||||
|
"delete-test.ss"
|
||||||
|
"filter-test.ss"
|
||||||
|
"fold-test.ss"
|
||||||
|
"lset-test.ss"
|
||||||
|
"misc-test.ss"
|
||||||
|
"predicate-test.ss"
|
||||||
|
"search-test.ss"
|
||||||
|
"selector-test.ss")
|
||||||
|
|
||||||
|
(provide all-1-tests)
|
||||||
|
|
||||||
|
(define all-1-tests
|
||||||
|
(make-test-suite
|
||||||
|
"all-1-tests"
|
||||||
|
alist-tests
|
||||||
|
cons-tests
|
||||||
|
delete-tests
|
||||||
|
filter-tests
|
||||||
|
fold-tests
|
||||||
|
lset-tests
|
||||||
|
misc-tests
|
||||||
|
predicate-tests
|
||||||
|
search-tests
|
||||||
|
selector-tests
|
||||||
|
))
|
||||||
|
)
|
222
collects/tests/srfi/1/cons-test.ss
Normal file
222
collects/tests/srfi/1/cons-test.ss
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
;;;
|
||||||
|
;;; <cons-test.ss> ---- List constructor tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:14:31 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module cons-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(lib "cons.ss" "srfi" "1"))
|
||||||
|
|
||||||
|
(provide cons-tests)
|
||||||
|
|
||||||
|
(define cons-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List constructor tests"
|
||||||
|
|
||||||
|
;; XCONS
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"xcons:null-cdr"
|
||||||
|
(assert-equal? (xcons '() 'Andromeda) '(Andromeda)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"xcons:pair-cdr"
|
||||||
|
(let* ((base '(Antlia))
|
||||||
|
(result (xcons base 'Apus)))
|
||||||
|
(assert-equal? result '(Apus Antlia))
|
||||||
|
(assert-eq? (cdr result) base)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"xcons:datum-cdr"
|
||||||
|
(assert-equal? (xcons 'Aquarius 'Aquila) '(Aquila . Aquarius)))
|
||||||
|
|
||||||
|
;; MAKE-LIST
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"make-list:zero-length"
|
||||||
|
(assert-true (null? (make-list 0))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"make-list:default-element"
|
||||||
|
(assert-equal? (make-list 5) '(#f #f #f #f #f)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"make-list:fill-element"
|
||||||
|
(assert-equal? (make-list 7 'Circinus)
|
||||||
|
'(Circinus Circinus Circinus Circinus
|
||||||
|
Circinus Circinus Circinus)))
|
||||||
|
|
||||||
|
;; LIST-TABULATE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-tabulate:zero-length"
|
||||||
|
(assert-true (null? (list-tabulate 0 (lambda (position) #f)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-tabulate:identity"
|
||||||
|
(assert-equal? (list-tabulate 5 (lambda (position) position))
|
||||||
|
'(0 1 2 3 4)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-tabulate:factorial"
|
||||||
|
(assert-equal? (list-tabulate 7 (lambda (position)
|
||||||
|
(do ((multiplier 1 (+ multiplier 1))
|
||||||
|
(product 1 (* product multiplier)))
|
||||||
|
((< position multiplier) product))))
|
||||||
|
'(1 1 2 6 24 120 720)))
|
||||||
|
|
||||||
|
;; LIST*
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list*:one-argument"
|
||||||
|
(assert-eq? (list* 'Columba)
|
||||||
|
'Columba))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list*:two-arguments"
|
||||||
|
(assert-equal? (list* 'Corvus 'Crater)
|
||||||
|
'(Corvus . Crater)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list*:many-arguments"
|
||||||
|
(assert-equal? (list* 'Crux 'Cygnus 'Delphinus 'Dorado 'Draco)
|
||||||
|
'(Crux Cygnus Delphinus Dorado . Draco)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list*:last-argument-null"
|
||||||
|
(assert-equal? (list* 'Equuleus 'Fornax '())
|
||||||
|
'(Equuleus Fornax)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list*:last-argument-non-empty-list"
|
||||||
|
(let* ((base '(Gemini Grus))
|
||||||
|
(result (list* 'Hercules 'Horologium 'Hydra 'Hydrus base)))
|
||||||
|
(assert-equal? result
|
||||||
|
'(Hercules Horologium Hydra Hydrus Gemini Grus))
|
||||||
|
(assert-eq? (cddddr result) base)))
|
||||||
|
|
||||||
|
;; LIST-COPY
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-copy:null-list"
|
||||||
|
(assert-true (null? (list-copy '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-copy:flat-list"
|
||||||
|
(let* ((original '(Indus Lacerta Leo Lepus Libra))
|
||||||
|
(result (list-copy original)))
|
||||||
|
(assert-equal? result original)
|
||||||
|
(assert-true (not (eq? result original)))
|
||||||
|
(assert-true (not (eq? (cdr result) (cdr original))))
|
||||||
|
(assert-true (not (eq? (cddr result) (cddr original))))
|
||||||
|
(assert-true (not (eq? (cdddr result) (cdddr original))))
|
||||||
|
(assert-true (not (eq? (cddddr result) (cddddr original))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-copy:bush"
|
||||||
|
(let* ((first '(Lupus))
|
||||||
|
(second '(Lynx Malus Mensa (Microscopium Monoceros)
|
||||||
|
((Musca Norma Octans))))
|
||||||
|
(third 'Ophiuchus)
|
||||||
|
(original (list first second third))
|
||||||
|
(result (list-copy original)))
|
||||||
|
(assert-equal? result original)
|
||||||
|
(assert-true (not (eq? result original)))
|
||||||
|
(assert-eq? (car result) first)
|
||||||
|
(assert-true (not (eq? (cdr result) (cdr original))))
|
||||||
|
(assert-eq? (cadr result) second)
|
||||||
|
(assert-true (not (eq? (cddr result) (cddr original))))
|
||||||
|
(assert-eq? (caddr result) third)))
|
||||||
|
|
||||||
|
;; CIRCULAR-LIST
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list:one-element"
|
||||||
|
(let ((result (circular-list 'Orion)))
|
||||||
|
(assert-true (and (pair? result)
|
||||||
|
(eq? (car result) 'Orion)
|
||||||
|
(eq? (cdr result) result)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list:many-elements"
|
||||||
|
(let ((result (circular-list 'Pavo 'Pegasus 'Perseus 'Phoenix 'Pictor)))
|
||||||
|
(assert-true (and (pair? result)
|
||||||
|
(eq? (car result) 'Pavo)
|
||||||
|
(pair? (cdr result))
|
||||||
|
(eq? (cadr result) 'Pegasus)
|
||||||
|
(pair? (cddr result))
|
||||||
|
(eq? (caddr result) 'Perseus)
|
||||||
|
(pair? (cdddr result))
|
||||||
|
(eq? (cadddr result) 'Phoenix)
|
||||||
|
(pair? (cddddr result))
|
||||||
|
(eq? (car (cddddr result)) 'Pictor)
|
||||||
|
(eq? (cdr (cddddr result)) result)))))
|
||||||
|
|
||||||
|
;; IOTA
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:zero-count"
|
||||||
|
(assert-equal? (iota 0) (list)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:zero-count-and-step"
|
||||||
|
(assert-equal? (iota 0 0) (list)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:count-only"
|
||||||
|
(assert-equal? (iota 4) (list 0 1 2 3)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:count-and-start"
|
||||||
|
(assert-equal? (iota 3 1) (list 1 2 3)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:count-start-and-step"
|
||||||
|
(assert-equal? (iota 4 3 2) (list 3 5 7 9)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:negative-step"
|
||||||
|
(assert-equal? (iota 4 0 -1) (list 0 -1 -2 -3)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota:non-integer-step"
|
||||||
|
(assert-equal? (iota 5 0 1/2) (list 0 1/2 1 3/2 2)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"iota;negative-count"
|
||||||
|
(assert-equal? (iota -1) (list)))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
;;; cons-test.ss ends here
|
359
collects/tests/srfi/1/delete-test.ss
Normal file
359
collects/tests/srfi/1/delete-test.ss
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
;;;
|
||||||
|
;;; <delete-test.ss> ---- List deletion function tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:16:28 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module delete-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "delete.ss" "srfi" "1") member))
|
||||||
|
|
||||||
|
(provide delete-tests)
|
||||||
|
|
||||||
|
(define delete-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List deletion tests"
|
||||||
|
|
||||||
|
;; DELETE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:null-list"
|
||||||
|
(assert-true
|
||||||
|
(null? (delete '(Fraser . Frederic) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:in-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(delete '(Fredericksburg . Frederika)
|
||||||
|
'((Fredericksburg . Frederika))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:not-in-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Fredonia . Fredsville) '((Freeman . Freeport)))
|
||||||
|
'((Freeman . Freeport))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:at-beginning-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Fremont . Froelich) '((Fremont . Froelich)
|
||||||
|
(Fruitland . Fulton)
|
||||||
|
(Furay . Galbraith)
|
||||||
|
(Galesburg . Galland)
|
||||||
|
(Galt . Galva)))
|
||||||
|
'((Fruitland . Fulton)
|
||||||
|
(Furay . Galbraith)
|
||||||
|
(Galesburg . Galland)
|
||||||
|
(Galt . Galva))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:in-middle-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Gambrill . Garber) '((Gardiner . Gardner)
|
||||||
|
(Garfield . Garland)
|
||||||
|
(Garnavillo . Garner)
|
||||||
|
(Garrison . Garwin)
|
||||||
|
(Gambrill . Garber)
|
||||||
|
(Gaza . Geneva)
|
||||||
|
(Genoa . George)))
|
||||||
|
'((Gardiner . Gardner)
|
||||||
|
(Garfield . Garland)
|
||||||
|
(Garnavillo . Garner)
|
||||||
|
(Garrison . Garwin)
|
||||||
|
(Gaza . Geneva)
|
||||||
|
(Genoa . George))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:at-end-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Georgetown . Gerled) '((Germantown . Germanville)
|
||||||
|
(Giard . Gibbsville)
|
||||||
|
(Gibson . Gifford)
|
||||||
|
(Gilbert . Gilbertville)
|
||||||
|
(Georgetown . Gerled)))
|
||||||
|
'((Germantown . Germanville)
|
||||||
|
(Giard . Gibbsville)
|
||||||
|
(Gibson . Gifford)
|
||||||
|
(Gilbert . Gilbertville))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:not-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Gilliatt . Gilman) '((Givin . Gladbrook)
|
||||||
|
(Gladstone . Gladwin)
|
||||||
|
(Glasgow . Glendon)
|
||||||
|
(Glenwood . Glidden)
|
||||||
|
(Goddard . Goldfield)))
|
||||||
|
'((Givin . Gladbrook)
|
||||||
|
(Gladstone . Gladwin)
|
||||||
|
(Glasgow . Glendon)
|
||||||
|
(Glenwood . Glidden)
|
||||||
|
(Goddard . Goldfield))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete:several-matches-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete '(Goodell . Gosport) '((Gowrie . Goddard)
|
||||||
|
(Grable . Graettinger)
|
||||||
|
(Goodell . Gosport)
|
||||||
|
(Graf . Grafton)
|
||||||
|
(Goodell . Gosport)
|
||||||
|
(Grandview . Granger)
|
||||||
|
(Goodell . Gosport)))
|
||||||
|
'((Gowrie . Goddard)
|
||||||
|
(Grable . Graettinger)
|
||||||
|
(Graf . Grafton)
|
||||||
|
(Grandview . Granger))))
|
||||||
|
|
||||||
|
;; DELETE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:null-list"
|
||||||
|
(assert-true (null? (delete! (cons 'Henshaw 'Hentons) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:in-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(delete! (cons 'Hepburn 'Herndon)
|
||||||
|
(list (cons 'Hepburn 'Herndon))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:not-in-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Hesper 'Hiattsville)
|
||||||
|
(list (cons 'Hiawatha 'Hicks)))
|
||||||
|
'((Hiawatha . Hicks))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:at-beginning-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Highland 'Highlandville)
|
||||||
|
(list (cons 'Highland 'Highlandville)
|
||||||
|
(cons 'Highview 'Hills)
|
||||||
|
(cons 'Hillsboro 'Hillsdale)
|
||||||
|
(cons 'Hilltop 'Hinton)
|
||||||
|
(cons 'Hiteman 'Hobarton)))
|
||||||
|
'((Highview . Hills)
|
||||||
|
(Hillsboro . Hillsdale)
|
||||||
|
(Hilltop . Hinton)
|
||||||
|
(Hiteman . Hobarton))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:in-middle-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Hocking 'Holbrook)
|
||||||
|
(list (cons 'Holland 'Holmes)
|
||||||
|
(cons 'Holstein 'Homer)
|
||||||
|
(cons 'Homestead 'Hopeville)
|
||||||
|
(cons 'Hopkinton 'Hornick)
|
||||||
|
(cons 'Hocking 'Holbrook)
|
||||||
|
(cons 'Horton 'Hospers)
|
||||||
|
(cons 'Houghton 'Howardville)))
|
||||||
|
'((Holland . Holmes)
|
||||||
|
(Holstein . Homer)
|
||||||
|
(Homestead . Hopeville)
|
||||||
|
(Hopkinton . Hornick)
|
||||||
|
(Horton . Hospers)
|
||||||
|
(Houghton . Howardville))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:at-end-of-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Howe 'Hubbard)
|
||||||
|
(list (cons 'Hudson 'Hugo)
|
||||||
|
(cons 'Hull 'Humboldt)
|
||||||
|
(cons 'Humeston 'Huntington)
|
||||||
|
(cons 'Hurley 'Huron)
|
||||||
|
(cons 'Howe 'Hubbard)))
|
||||||
|
'((Hudson . Hugo)
|
||||||
|
(Hull . Humboldt)
|
||||||
|
(Humeston . Huntington)
|
||||||
|
(Hurley . Huron))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:not-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Hurstville 'Hutchins)
|
||||||
|
(list (cons 'Huxley 'Iconium)
|
||||||
|
(cons 'Illyria 'Imogene)
|
||||||
|
(cons 'Independence 'Indianapolis)
|
||||||
|
(cons 'Indianola 'Industry)
|
||||||
|
(cons 'Inwood 'Ion)))
|
||||||
|
'((Huxley . Iconium)
|
||||||
|
(Illyria . Imogene)
|
||||||
|
(Independence . Indianapolis)
|
||||||
|
(Indianola . Industry)
|
||||||
|
(Inwood . Ion))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete!:several-matches-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete! (cons 'Ionia 'Ira)
|
||||||
|
(list (cons 'Ireton 'Ironhills)
|
||||||
|
(cons 'Irving 'Irvington)
|
||||||
|
(cons 'Ionia 'Ira)
|
||||||
|
(cons 'Irwin 'Ivester)
|
||||||
|
(cons 'Ionia 'Ira)
|
||||||
|
(cons 'Iveyville 'Ivy)
|
||||||
|
(cons 'Ionia 'Ira)))
|
||||||
|
'((Ireton . Ironhills)
|
||||||
|
(Irving . Irvington)
|
||||||
|
(Irwin . Ivester)
|
||||||
|
(Iveyville . Ivy))))
|
||||||
|
|
||||||
|
;; DELETE-DUPLICATES
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:null-list"
|
||||||
|
(assert-true (null? (delete-duplicates '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates '((Knierim . Knittel)))
|
||||||
|
'((Knierim . Knittel))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:in-doubleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates '((Knoke . Knowlton) (Knoke . Knowlton)))
|
||||||
|
'((Knoke . Knowlton))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:none-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates '((Knox . Knoxville)
|
||||||
|
(Konigsmark . Kossuth)
|
||||||
|
(Koszta . Lacelle)
|
||||||
|
(Lacey . Lacona)
|
||||||
|
(Ladoga . Ladora)))
|
||||||
|
'((Knox . Knoxville)
|
||||||
|
(Konigsmark . Kossuth)
|
||||||
|
(Koszta . Lacelle)
|
||||||
|
(Lacey . Lacona)
|
||||||
|
(Ladoga . Ladora))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:some-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates '((Lafayette . Lainsville)
|
||||||
|
(Lakeside . Lakewood)
|
||||||
|
(Lakeside . Lakewood)
|
||||||
|
(Lakonta . Lakota)
|
||||||
|
(Lafayette . Lainsville)
|
||||||
|
(Lamoille . Lamoni)
|
||||||
|
(Lakeside . Lakewood)
|
||||||
|
(Lamont . Lancaster)
|
||||||
|
(Lakeside . Lakewood)))
|
||||||
|
'((Lafayette . Lainsville)
|
||||||
|
(Lakeside . Lakewood)
|
||||||
|
(Lakonta . Lakota)
|
||||||
|
(Lamoille . Lamoni)
|
||||||
|
(Lamont . Lancaster))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates:all-but-one-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates '((Lanesboro . Langdon)
|
||||||
|
(Lanesboro . Langdon)
|
||||||
|
(Lanesboro . Langdon)
|
||||||
|
(Lanesboro . Langdon)
|
||||||
|
(Lanesboro . Langdon)))
|
||||||
|
'((Lanesboro . Langdon))))
|
||||||
|
|
||||||
|
;; DELETE-DUPLICATES!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:null-list"
|
||||||
|
(assert-true (null? (delete-duplicates! (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates! (list (cons 'Lester 'Letts)))
|
||||||
|
'((Lester . Letts))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:in-doubleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates! (list (cons 'Leverette 'Levey)
|
||||||
|
(cons 'Leverette 'Levey)))
|
||||||
|
'((Leverette . Levey))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:none-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates! (list (cons 'Lewis 'Lexington)
|
||||||
|
(cons 'Liberty 'Libertyville)
|
||||||
|
(cons 'Lidderdale 'Lima)
|
||||||
|
(cons 'Linby 'Lincoln)
|
||||||
|
(cons 'Linden 'Lineville)))
|
||||||
|
'((Lewis . Lexington)
|
||||||
|
(Liberty . Libertyville)
|
||||||
|
(Lidderdale . Lima)
|
||||||
|
(Linby . Lincoln)
|
||||||
|
(Linden . Lineville))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:some-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates! (list (cons 'Lisbon 'Liscomb)
|
||||||
|
(cons 'Littleport 'Littleton)
|
||||||
|
(cons 'Littleport 'Littleton)
|
||||||
|
(cons 'Livermore 'Livingston)
|
||||||
|
(cons 'Lisbon 'Liscomb)
|
||||||
|
(cons 'Lockman 'Lockridge)
|
||||||
|
(cons 'Littleport 'Littleton)
|
||||||
|
(cons 'Locust 'Logan)
|
||||||
|
(cons 'Littleport 'Littleton)))
|
||||||
|
'((Lisbon . Liscomb)
|
||||||
|
(Littleport . Littleton)
|
||||||
|
(Livermore . Livingston)
|
||||||
|
(Lockman . Lockridge)
|
||||||
|
(Locust . Logan))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"delete-duplicates!:all-but-one-removed-in-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(delete-duplicates! (list (cons 'Logansport 'Lohrville)
|
||||||
|
(cons 'Logansport 'Lohrville)
|
||||||
|
(cons 'Logansport 'Lohrville)
|
||||||
|
(cons 'Logansport 'Lohrville)
|
||||||
|
(cons 'Logansport 'Lohrville)))
|
||||||
|
'((Logansport . Lohrville))))
|
||||||
|
))
|
||||||
|
|
||||||
|
)
|
||||||
|
;;; delete-test.ss ends here
|
274
collects/tests/srfi/1/filter-test.ss
Normal file
274
collects/tests/srfi/1/filter-test.ss
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
;;;
|
||||||
|
;;; <filter-test.ss> ---- List filtering and partitioning tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:16:28 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module filter-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "filter.ss" "srfi" "1") member))
|
||||||
|
|
||||||
|
(provide filter-tests)
|
||||||
|
|
||||||
|
(define filter-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List filtering tests"
|
||||||
|
|
||||||
|
;; FILTER
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter:null-list"
|
||||||
|
(assert-true (null? (filter (lambda (x) #t) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(filter (lambda (x) #t) '(Agency))
|
||||||
|
'(Agency)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null? (filter (lambda (x) #f)
|
||||||
|
'(Ainsworth Akron Albany Albaton Albia)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter even? '(86 87 88 89 90))
|
||||||
|
'(86 88 90)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter (lambda (x) #t)
|
||||||
|
'(Albion Alburnett Alden Alexander Algona))
|
||||||
|
'(Albion Alburnett Alden Alexander Algona)))
|
||||||
|
|
||||||
|
;; FILTER!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter!:null-list"
|
||||||
|
(assert-true
|
||||||
|
(null? (filter! (lambda (x) #t) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter!:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(filter! (lambda (x) #t) (list 'Alice))
|
||||||
|
'(Alice)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter!:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null? (filter! (lambda (x) #f)
|
||||||
|
(list 'Alleman 'Allendorf 'Allerton 'Allison 'Almont)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter!:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter! even? (list 91 92 93 94 95))
|
||||||
|
'(92 94)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter!:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter! (lambda (x) #t)
|
||||||
|
(list 'Almoral 'Alpha 'Alta 'Alton 'Altoona))
|
||||||
|
'(Almoral Alpha Alta Alton Altoona)))
|
||||||
|
|
||||||
|
;; REMOVE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove:null-list"
|
||||||
|
(assert-true
|
||||||
|
(null? (remove (lambda (x) #t) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(remove (lambda (x) #f) '(Alvord))
|
||||||
|
'(Alvord)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null? (remove (lambda (x) #t) '(Amana Amber Ames Amish Anamosa)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(remove even? '(96 97 98 99 100))
|
||||||
|
'(97 99)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(remove (lambda (x) #f)
|
||||||
|
'(Anderson Andover Andrew Andrews Angus))
|
||||||
|
'(Anderson Andover Andrew Andrews Angus)))
|
||||||
|
|
||||||
|
;; REMOVE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove!:null-list"
|
||||||
|
(assert-true (null? (remove! (lambda (x) #t) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove!:singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(remove! (lambda (x) #f) (list 'Anita))
|
||||||
|
'(Anita)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove!:all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(remove! (lambda (x) #t)
|
||||||
|
(list 'Ankeny 'Anthon 'Aplington 'Arcadia 'Archer)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove!:some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(remove! even? (list 101 102 103 104 105))
|
||||||
|
'(101 103 105)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"remove!:no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(remove! (lambda (x) #f)
|
||||||
|
(list 'Ardon 'Aredale 'Argo 'Argyle 'Arion))
|
||||||
|
'(Ardon Aredale Argo Argyle Arion)))
|
||||||
|
|
||||||
|
;; PARTITION
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:null-list"
|
||||||
|
(let-values (((in out) (partition (lambda (x) #f) '())))
|
||||||
|
(assert-true (and (null? in) (null? out)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:singleton-list"
|
||||||
|
(let-values (((in out) (partition (lambda (x) #f) '(Arispe))))
|
||||||
|
(assert-true (and (null? in) (equal? out '(Arispe))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:all-satisfying"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition (lambda (x) #t)
|
||||||
|
'(Arlington Armstrong Arnold Artesian Arthur))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? in
|
||||||
|
'(Arlington Armstrong Arnold Artesian Arthur))
|
||||||
|
(null? out)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:mixed-starting-in"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition even? '(106 108 109 111 113 114 115 117 118 120))))
|
||||||
|
(assert-true (and (equal? in '(106 108 114 118 120))
|
||||||
|
(equal? out '(109 111 113 115 117))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:mixed-starting-out"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition even? '(121 122 124 126))))
|
||||||
|
(assert-true (and (equal? in '(122 124 126))
|
||||||
|
(equal? out '(121))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition:none-satisfying"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition (lambda (x) #f)
|
||||||
|
'(Asbury Ashawa Ashland Ashton Aspinwall))))
|
||||||
|
(assert-true (and (null? in)
|
||||||
|
(equal? out
|
||||||
|
'(Asbury Ashawa Ashland Ashton Aspinwall))))))
|
||||||
|
|
||||||
|
;; PARTITION!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:null-list"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! (lambda (x) #f) (list))))
|
||||||
|
(assert-true (and (null? in) (null? out)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:singleton-list"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! (lambda (x) #f) (list 'Astor))))
|
||||||
|
(lambda (in out) (and (null? in) (equal? out '(Astor))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:all-satisfying"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! (lambda (x) #t)
|
||||||
|
(list 'Atalissa 'Athelstan 'Atkins 'Atlantic
|
||||||
|
'Attica))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? in
|
||||||
|
'(Atalissa Athelstan Atkins Atlantic Attica))
|
||||||
|
(null? out)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:mixed-starting-in"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! odd?
|
||||||
|
(list 127 129 130 132 134 135 136 138 139 141))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? in '(127 129 135 139 141))
|
||||||
|
(equal? out '(130 132 134 136 138))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:mixed-starting-out"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! odd? (list 142 143 145 147))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? in '(143 145 147))
|
||||||
|
(equal? out '(142))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"partition!:none-satisfying"
|
||||||
|
(let-values (((in out)
|
||||||
|
(partition! (lambda (x) #f)
|
||||||
|
(list 'Auburn 'Audubon 'Augusta 'Aurelia
|
||||||
|
'Aureola))))
|
||||||
|
(assert-true
|
||||||
|
(and (null? in)
|
||||||
|
(equal? out
|
||||||
|
'(Auburn Audubon Augusta Aurelia Aureola))))))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
|
||||||
|
;;; filter-test.ss ends here
|
958
collects/tests/srfi/1/fold-test.ss
Normal file
958
collects/tests/srfi/1/fold-test.ss
Normal file
|
@ -0,0 +1,958 @@
|
||||||
|
;;;
|
||||||
|
;;; <fold-test.ss> ---- Tests for list folds
|
||||||
|
;;; Time-stamp: <05/12/16 21:19:37 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module fold-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require
|
||||||
|
(planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "fold.ss" "srfi" "1") map for-each)
|
||||||
|
(rename (lib "fold.ss" "srfi" "1") s:map map)
|
||||||
|
(rename (lib "fold.ss" "srfi" "1") s:for-each for-each))
|
||||||
|
|
||||||
|
(provide fold-tests)
|
||||||
|
|
||||||
|
(define fold-tests
|
||||||
|
(make-test-suite
|
||||||
|
"Folding list procedures tests"
|
||||||
|
|
||||||
|
;; UNFOLD
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unfold:predicate-always-satisfied"
|
||||||
|
(assert-true (null?
|
||||||
|
(unfold (lambda (seed) #t)
|
||||||
|
(lambda (seed) (* seed 2))
|
||||||
|
(lambda (seed) (* seed 3))
|
||||||
|
1))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unfold:normal-case"
|
||||||
|
(assert-equal?
|
||||||
|
(unfold (lambda (seed) (= seed 729))
|
||||||
|
(lambda (seed) (* seed 2))
|
||||||
|
(lambda (seed) (* seed 3))
|
||||||
|
1)
|
||||||
|
'(2 6 18 54 162 486)))
|
||||||
|
|
||||||
|
;; UNFOLD-RIGHT
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unfold-right:predicate-always-satisfied"
|
||||||
|
(assert-equal?
|
||||||
|
(unfold-right (lambda (seed) #t)
|
||||||
|
(lambda (seed) (* seed 2))
|
||||||
|
(lambda (seed) (* seed 3))
|
||||||
|
(lambda (seed) (* seed 5))
|
||||||
|
1)
|
||||||
|
(list 1)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unfold-right:normal-case"
|
||||||
|
(assert-equal?
|
||||||
|
(unfold-right (lambda (seed) (= seed 729))
|
||||||
|
(lambda (seed) (* seed 2))
|
||||||
|
(lambda (seed) (* seed 3))
|
||||||
|
1
|
||||||
|
1)
|
||||||
|
'(486 162 54 18 6 2 1)))
|
||||||
|
|
||||||
|
;; FOLD
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:one-null-list"
|
||||||
|
(assert = (fold (lambda (alpha beta) (* alpha (+ beta 1))) 13 '()) 13))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:one-singleton-list"
|
||||||
|
(assert = (fold (lambda (alpha beta) (* alpha (+ beta 1))) 13 '(15)) 210))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:one-longer-list"
|
||||||
|
(assert =
|
||||||
|
(fold (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
13
|
||||||
|
'(15 17 19 21 23))
|
||||||
|
32927582))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:several-null-lists"
|
||||||
|
(assert-eq? (fold vector 'Chad '() '() '() '() '()) 'Chad))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(fold vector 'Chile '(China) '(Colombia) '(Comoros) '(Congo)
|
||||||
|
'(Croatia))
|
||||||
|
'#(China Colombia Comoros Congo Croatia Chile)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(fold (lambda (alpha beta gamma delta epsilon zeta)
|
||||||
|
(cons (vector alpha beta gamma delta epsilon) zeta))
|
||||||
|
'()
|
||||||
|
'(Cuba Cyprus Denmark Djibouti Dominica Ecuador Egypt)
|
||||||
|
'(Eritrea Estonia Ethiopia Fiji Finland France Gabon)
|
||||||
|
'(Gambia Georgia Germany Ghana Greece Grenada
|
||||||
|
Guatemala)
|
||||||
|
'(Guinea Guyana Haiti Honduras Hungary Iceland India)
|
||||||
|
'(Indonesia Iran Iraq Ireland Israel Italy Jamaica))
|
||||||
|
'(#(Egypt Gabon Guatemala India Jamaica)
|
||||||
|
#(Ecuador France Grenada Iceland Italy)
|
||||||
|
#(Dominica Finland Greece Hungary Israel)
|
||||||
|
#(Djibouti Fiji Ghana Honduras Ireland)
|
||||||
|
#(Denmark Ethiopia Germany Haiti Iraq)
|
||||||
|
#(Cyprus Estonia Georgia Guyana Iran)
|
||||||
|
#(Cuba Eritrea Gambia Guinea Indonesia))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold:lists-of-different-lengths"
|
||||||
|
(assert-equal?
|
||||||
|
(fold (lambda (alpha beta gamma delta)
|
||||||
|
(cons (vector alpha beta gamma) delta))
|
||||||
|
'()
|
||||||
|
'(Japan Jordan Kazakhstan Kenya)
|
||||||
|
'(Kiribati Kuwait)
|
||||||
|
'(Kyrgyzstan Laos Latvia))
|
||||||
|
'(#(Jordan Kuwait Laos)
|
||||||
|
#(Japan Kiribati Kyrgyzstan))))
|
||||||
|
|
||||||
|
;; FOLD-RIGHT
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:one-null-list"
|
||||||
|
(assert = (fold-right (lambda (alpha beta) (* alpha (+ beta 1))) 13 '())
|
||||||
|
13))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:one-singleton-list"
|
||||||
|
(assert = (fold-right (lambda (alpha beta) (* alpha (+ beta 1))) 13 '(15))
|
||||||
|
210))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:one-longer-list"
|
||||||
|
(assert = (fold-right (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
13
|
||||||
|
'(15 17 19 21 23))
|
||||||
|
32868750))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:several-null-lists"
|
||||||
|
(assert-eq? (fold-right vector 'Lebanon '() '() '() '() '())
|
||||||
|
'Lebanon))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(fold-right vector 'Lesotho '(Liberia) '(Libya) '(Liechtenstein)
|
||||||
|
'(Lithuania) '(Luxembourg))
|
||||||
|
#(Liberia Libya Liechtenstein Lithuania Luxembourg Lesotho)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(fold-right (lambda (alpha beta gamma delta epsilon zeta)
|
||||||
|
(cons (vector alpha beta gamma delta epsilon) zeta))
|
||||||
|
'()
|
||||||
|
'(Macedonia Madagascar Malawi Malaysia Maldives Mali
|
||||||
|
Malta)
|
||||||
|
'(Mauritania Mauritius Mexico Micronesia Moldova Monaco
|
||||||
|
Mongolia)
|
||||||
|
'(Morocco Mozambique Myanmar Namibia Nauru Nepal
|
||||||
|
Netherlands)
|
||||||
|
'(Nicaragua Niger Nigeria Norway Oman Pakistan Palau)
|
||||||
|
'(Panama Paraguay Peru Philippines Poland Portugal
|
||||||
|
Qatar))
|
||||||
|
|
||||||
|
'(#(Macedonia Mauritania Morocco Nicaragua Panama)
|
||||||
|
#(Madagascar Mauritius Mozambique Niger Paraguay)
|
||||||
|
#(Malawi Mexico Myanmar Nigeria Peru)
|
||||||
|
#(Malaysia Micronesia Namibia Norway Philippines)
|
||||||
|
#(Maldives Moldova Nauru Oman Poland)
|
||||||
|
#(Mali Monaco Nepal Pakistan Portugal)
|
||||||
|
#(Malta Mongolia Netherlands Palau Qatar))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fold-right:lists-of-different-lengths"
|
||||||
|
(assert-equal?
|
||||||
|
(fold-right (lambda (alpha beta gamma delta)
|
||||||
|
(cons (vector alpha beta gamma) delta))
|
||||||
|
'()
|
||||||
|
'(Romania Russia Rwanda Senegal)
|
||||||
|
'(Seychelles Singapore)
|
||||||
|
'(Slovakia Slovenia Somalia))
|
||||||
|
'(#(Romania Seychelles Slovakia)
|
||||||
|
#(Russia Singapore Slovenia))))
|
||||||
|
|
||||||
|
;; PAIR-FOLD
|
||||||
|
|
||||||
|
(let* ((revappend (lambda (reversend base)
|
||||||
|
(do ((rest reversend (cdr rest))
|
||||||
|
(result base (cons (car rest) result)))
|
||||||
|
((null? rest) result))))
|
||||||
|
(revappall (lambda (first . rest)
|
||||||
|
(let loop ((first first) (rest rest))
|
||||||
|
(if (null? rest)
|
||||||
|
first
|
||||||
|
(revappend first
|
||||||
|
(loop (car rest)
|
||||||
|
(cdr rest))))))))
|
||||||
|
(make-test-suite
|
||||||
|
"Pair-fold tests"
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:one-null-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappend '(Spain Sudan) '())
|
||||||
|
'(Spain Sudan)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappend '(Suriname Swaziland) '(Sweden))
|
||||||
|
'(Sweden Suriname Swaziland)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappend
|
||||||
|
'(Switzerland Syria)
|
||||||
|
'(Taiwan Tajikistan Tanzania Thailand Togo))
|
||||||
|
'(Togo Togo Thailand Togo Thailand Tanzania Togo
|
||||||
|
Thailand Tanzania Tajikistan Togo Thailand
|
||||||
|
Tanzania Tajikistan Taiwan Switzerland Syria)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:several-null-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappall '(Tonga Tunisia) '() '() '() '() '())
|
||||||
|
'(Tonga Tunisia)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappall
|
||||||
|
'(Turkey Turkmenistan)
|
||||||
|
'(Tuvalu)
|
||||||
|
'(Uganda)
|
||||||
|
'(Ukraine)
|
||||||
|
'(Uruguay)
|
||||||
|
'(Uzbekistan))
|
||||||
|
'(Tuvalu Uganda Ukraine Uruguay Uzbekistan Turkey
|
||||||
|
Turkmenistan)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappall
|
||||||
|
'(Vanuatu Venezuela)
|
||||||
|
'(Vietnam Yemen Yugoslavia Zaire Zambia Zimbabwe
|
||||||
|
Agnon)
|
||||||
|
'(Aleixandre Andric Asturias Beckett Bellow
|
||||||
|
Benavente Bergson)
|
||||||
|
'(Bjornson Brodsky Buck Bunin Camus Canetti
|
||||||
|
Carducci)
|
||||||
|
'(Cela Churchill Deledda Echegary Eliot Elytis
|
||||||
|
Eucken)
|
||||||
|
'(Faulkner Galsworthy Gide Gjellerup Golding
|
||||||
|
Gordimer Hamsun))
|
||||||
|
'(Agnon Bergson Carducci Eucken Hamsun Agnon
|
||||||
|
Zimbabwe Bergson Benavente Carducci Canetti
|
||||||
|
Eucken Elytis Hamsun Gordimer Agnon Zimbabwe
|
||||||
|
Zambia Bergson Benavente Bellow Carducci Canetti
|
||||||
|
Camus Eucken Elytis Eliot Hamsun Gordimer
|
||||||
|
Golding Agnon Zimbabwe Zambia Zaire Bergson
|
||||||
|
Benavente Bellow Beckett Carducci Canetti Camus
|
||||||
|
Bunin Eucken Elytis Eliot Echegary Hamsun
|
||||||
|
Gordimer Golding Gjellerup Agnon Zimbabwe Zambia
|
||||||
|
Zaire Yugoslavia Bergson Benavente Bellow
|
||||||
|
Beckett Asturias Carducci Canetti Camus Bunin
|
||||||
|
Buck Eucken Elytis Eliot Echegary Deledda Hamsun
|
||||||
|
Gordimer Golding Gjellerup Gide Agnon Zimbabwe
|
||||||
|
Zambia Zaire Yugoslavia Yemen Bergson Benavente
|
||||||
|
Bellow Beckett Asturias Andric Carducci Canetti
|
||||||
|
Camus Bunin Buck Brodsky Eucken Elytis Eliot
|
||||||
|
Echegary Deledda Churchill Hamsun Gordimer
|
||||||
|
Golding Gjellerup Gide Galsworthy Agnon Zimbabwe
|
||||||
|
Zambia Zaire Yugoslavia Yemen Vietnam Bergson
|
||||||
|
Benavente Bellow Beckett Asturias Andric
|
||||||
|
Aleixandre Carducci Canetti Camus Bunin Buck
|
||||||
|
Brodsky Bjornson Eucken Elytis Eliot Echegary
|
||||||
|
Deledda Churchill Cela Hamsun Gordimer Golding
|
||||||
|
Gjellerup Gide Galsworthy Faulkner Vanuatu
|
||||||
|
Venezuela)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold:lists-of-different-lengths"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold revappall
|
||||||
|
'(Hauptmann Hemingway Hesse)
|
||||||
|
'(Heyse Jensen Jimenez Johnson)
|
||||||
|
'(Karlfeldt Kawabata)
|
||||||
|
'(Kipling Lagerkvist Lagerlof Laxness Lewis))
|
||||||
|
'(Johnson Jimenez Jensen Kawabata Lewis Laxness
|
||||||
|
Lagerlof Lagerkvist Johnson Jimenez Jensen Heyse
|
||||||
|
Kawabata Karlfeldt Lewis Laxness Lagerlof
|
||||||
|
Lagerkvist Kipling Hauptmann Hemingway
|
||||||
|
Hesse)))
|
||||||
|
))
|
||||||
|
|
||||||
|
;; PAIR-FOLD-RIGHT
|
||||||
|
|
||||||
|
(let* ((revappend (lambda (reversend base)
|
||||||
|
(do ((rest reversend (cdr rest))
|
||||||
|
(result base (cons (car rest) result)))
|
||||||
|
((null? rest) result))))
|
||||||
|
(revappall (lambda (first . rest)
|
||||||
|
(let loop ((first first) (rest rest))
|
||||||
|
(if (null? rest)
|
||||||
|
first
|
||||||
|
(revappend first
|
||||||
|
(loop (car rest)
|
||||||
|
(cdr rest))))))))
|
||||||
|
(make-test-suite
|
||||||
|
"Pair-fold-right tests"
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:one-null-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappend '(Maeterlinck Mahfouz) '())
|
||||||
|
'(Maeterlinck Mahfouz)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappend '(Mann Martinson) '(Mauriac))
|
||||||
|
'(Mauriac Mann Martinson)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappend
|
||||||
|
'(Milosz Mistral)
|
||||||
|
'(Mommsen Montale Morrison Neruda Oe))
|
||||||
|
'(Oe Neruda Morrison Montale Mommsen Oe Neruda
|
||||||
|
Morrison Montale Oe Neruda Morrison Oe Neruda Oe
|
||||||
|
Milosz Mistral)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:several-null-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappall '(Pasternak Paz) '() '() '() '() '())
|
||||||
|
'(Pasternak Paz)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappall
|
||||||
|
'(Perse Pirandello)
|
||||||
|
'(Pontoppidan)
|
||||||
|
'(Quasimodo)
|
||||||
|
'(Reymont)
|
||||||
|
'(Rolland)
|
||||||
|
'(Russell))
|
||||||
|
'(Pontoppidan Quasimodo Reymont Rolland Russell
|
||||||
|
Perse Pirandello)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappall
|
||||||
|
'(Sachs Sartre)
|
||||||
|
'(Seferis Shaw Sholokov Siefert Sienkiewicz
|
||||||
|
Sillanpaa Simon)
|
||||||
|
'(Singer Solzhenitsyn Soyinka Spitteler
|
||||||
|
Steinbeck Tagore Undset)
|
||||||
|
'(Walcott White Yeats Anderson Andrews Angelina
|
||||||
|
Aransas)
|
||||||
|
'(Archer Armstrong Alascosa Austin Bailey
|
||||||
|
Bandera Bastrop)
|
||||||
|
'(Baylor Bee Bell Bexar Blanco Borden Bosque
|
||||||
|
Bowie))
|
||||||
|
'(Simon Sillanpaa Sienkiewicz Siefert Sholokov
|
||||||
|
Shaw Seferis Undset Tagore Steinbeck Spitteler
|
||||||
|
Soyinka Solzhenitsyn Singer Aransas Angelina
|
||||||
|
Andrews Anderson Yeats White Walcott Bastrop
|
||||||
|
Bandera Bailey Austin Alascosa Armstrong Archer
|
||||||
|
Bowie Bosque Borden Blanco Bexar Bell Bee Baylor
|
||||||
|
Simon Sillanpaa Sienkiewicz Siefert Sholokov
|
||||||
|
Shaw Undset Tagore Steinbeck Spitteler Soyinka
|
||||||
|
Solzhenitsyn Aransas Angelina Andrews Anderson
|
||||||
|
Yeats White Bastrop Bandera Bailey Austin
|
||||||
|
Alascosa Armstrong Bowie Bosque Borden Blanco
|
||||||
|
Bexar Bell Bee Simon Sillanpaa Sienkiewicz
|
||||||
|
Siefert Sholokov Undset Tagore Steinbeck
|
||||||
|
Spitteler Soyinka Aransas Angelina Andrews
|
||||||
|
Anderson Yeats Bastrop Bandera Bailey Austin
|
||||||
|
Alascosa Bowie Bosque Borden Blanco Bexar Bell
|
||||||
|
Simon Sillanpaa Sienkiewicz Siefert Undset
|
||||||
|
Tagore Steinbeck Spitteler Aransas Angelina
|
||||||
|
Andrews Anderson Bastrop Bandera Bailey Austin
|
||||||
|
Bowie Bosque Borden Blanco Bexar Simon Sillanpaa
|
||||||
|
Sienkiewicz Undset Tagore Steinbeck Aransas
|
||||||
|
Angelina Andrews Bastrop Bandera Bailey Bowie
|
||||||
|
Bosque Borden Blanco Simon Sillanpaa Undset
|
||||||
|
Tagore Aransas Angelina Bastrop Bandera Bowie
|
||||||
|
Bosque Borden Simon Undset Aransas Bastrop Bowie
|
||||||
|
Bosque Sachs Sartre)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-fold-right:lists-of-different-lengths"
|
||||||
|
(assert-equal?
|
||||||
|
(pair-fold-right revappall
|
||||||
|
'(Brazoria Brazos Brewster)
|
||||||
|
'(Briscoe Brooks Brown Burleson)
|
||||||
|
'(Burnet Caldwell)
|
||||||
|
'(Calhoun Callahan Cameron Camp Carson))
|
||||||
|
'(Burleson Brown Brooks Briscoe Caldwell Burnet
|
||||||
|
Carson Camp Cameron Callahan Calhoun Burleson
|
||||||
|
Brown Brooks Caldwell Carson Camp Cameron
|
||||||
|
Callahan Brazoria Brazos Brewster)))
|
||||||
|
))
|
||||||
|
|
||||||
|
;; REDUCE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce:null-list"
|
||||||
|
(assert-true (zero? (reduce (lambda (alpha beta) (* alpha (+ beta 1))) 0 '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce:singleton-list"
|
||||||
|
(assert = (reduce (lambda (alpha beta) (* alpha (+ beta 1))) 0 '(25)) 25))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce:doubleton-list"
|
||||||
|
(assert =
|
||||||
|
(reduce (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
0
|
||||||
|
'(27 29))
|
||||||
|
812))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce:longer-list"
|
||||||
|
(assert =
|
||||||
|
(reduce (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
0
|
||||||
|
'(31 33 35 37 39 41 43))
|
||||||
|
94118227527))
|
||||||
|
|
||||||
|
;; REDUCE-RIGHT
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce-right:null-list"
|
||||||
|
(assert-true (zero? (reduce-right (lambda (alpha beta) (* alpha (+ beta 1))) 0 '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce-right:singleton-list"
|
||||||
|
(assert =
|
||||||
|
(reduce-right (lambda (alpha beta) (* alpha (+ beta 1))) 0 '(25))
|
||||||
|
25))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce-right:doubleton-list"
|
||||||
|
(assert =
|
||||||
|
(reduce-right (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
0
|
||||||
|
'(27 29))
|
||||||
|
810))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reduce-right:longer-list"
|
||||||
|
(assert =
|
||||||
|
(reduce-right (lambda (alpha beta) (* alpha (+ beta 1)))
|
||||||
|
0
|
||||||
|
'(31 33 35 37 39 41 43))
|
||||||
|
93259601719))
|
||||||
|
|
||||||
|
;; APPEND-MAP
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:one-null-list"
|
||||||
|
(assert-true (null? (append-map (lambda (element) (list element element)) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:one-singleton-list"
|
||||||
|
(assert-equal? (append-map (lambda (element) (list element element)) '(Cass))
|
||||||
|
'(Cass Cass)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:one-longer-list"
|
||||||
|
(assert-equal? (append-map (lambda (element) (list element element))
|
||||||
|
'(Castro Chambers Cherokee Childress Clay))
|
||||||
|
'(Castro Castro Chambers Chambers Cherokee Cherokee
|
||||||
|
Childress Childress Clay Clay)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:several-null-lists"
|
||||||
|
(assert-true (null? (append-map (lambda elements (reverse elements))
|
||||||
|
'() '() '() '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:several-singleton-lists"
|
||||||
|
(assert-equal? (append-map (lambda elements (reverse elements))
|
||||||
|
'(Cochran)
|
||||||
|
'(Coke)
|
||||||
|
'(Coleman)
|
||||||
|
'(Collin)
|
||||||
|
'(Collingsworth))
|
||||||
|
'(Collingsworth Collin Coleman Coke Cochran)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(append-map (lambda elements (reverse elements))
|
||||||
|
'(Colorado Comal Comanche Concho Cooke Coryell
|
||||||
|
Cottle)
|
||||||
|
'(Crane Crockett Crosby Culberson Dallam Dallas
|
||||||
|
Dawson)
|
||||||
|
'(Delta Denton Dewitt Dickens Dimmit Donley Duval)
|
||||||
|
'(Eastland Ector Edwards Ellis Erath Falls Fannin)
|
||||||
|
'(Fayette Fisher Floyd Foard Franklin Freestone
|
||||||
|
Frio))
|
||||||
|
'(Fayette Eastland Delta Crane Colorado Fisher Ector
|
||||||
|
Denton Crockett Comal Floyd Edwards Dewitt Crosby
|
||||||
|
Comanche Foard Ellis Dickens Culberson Concho
|
||||||
|
Franklin Erath Dimmit Dallam Cooke Freestone Falls
|
||||||
|
Donley Dallas Coryell Frio Fannin Duval Dawson
|
||||||
|
Cottle)))
|
||||||
|
|
||||||
|
;; APPEND-MAP!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:one-null-list"
|
||||||
|
(assert-true (null? (append-map! (lambda (element) (list element element))
|
||||||
|
(list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(append-map! (lambda (element) (list element element))
|
||||||
|
(list 'Gaines))
|
||||||
|
'(Gaines Gaines)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(append-map! (lambda (element) (list element element))
|
||||||
|
(list 'Galveston 'Garza 'Gillespie 'Glasscock
|
||||||
|
'Goliad))
|
||||||
|
'(Galveston Galveston Garza Garza Gillespie
|
||||||
|
Gillespie Glasscock Glasscock Goliad Goliad)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:several-null-lists"
|
||||||
|
(assert-true (null? (append-map! (lambda elements (reverse elements))
|
||||||
|
(list)
|
||||||
|
(list)
|
||||||
|
(list)
|
||||||
|
(list)
|
||||||
|
(list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(append-map! (lambda elements (reverse elements))
|
||||||
|
(list 'Gonzales)
|
||||||
|
(list 'Gray)
|
||||||
|
(list 'Grayson)
|
||||||
|
(list 'Gregg)
|
||||||
|
(list 'Grimes))
|
||||||
|
'(Grimes Gregg Grayson Gray Gonzales)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-map!:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(append-map! (lambda elements (reverse elements))
|
||||||
|
(list 'Guadalupe 'Hale 'Hall 'Hamilton 'Hansford
|
||||||
|
'Hardeman 'Hardin)
|
||||||
|
(list 'Harris 'Harrison 'Hartley 'Haskell 'Hays
|
||||||
|
'Hemphill 'Henderson)
|
||||||
|
(list 'Hidalgo 'Hill 'Hockley 'Hood 'Hopkins
|
||||||
|
'Houston 'Howard)
|
||||||
|
(list 'Hudspeth 'Hunt 'Hutchinson 'Irion 'Jack
|
||||||
|
'Jackson 'Jasper)
|
||||||
|
(list 'Jefferson 'Johnson 'Jones 'Karnes 'Kaufman
|
||||||
|
'Kendall 'Kenedy))
|
||||||
|
'(Jefferson Hudspeth Hidalgo Harris Guadalupe
|
||||||
|
Johnson Hunt Hill Harrison Hale Jones Hutchinson
|
||||||
|
Hockley Hartley Hall Karnes Irion Hood Haskell
|
||||||
|
Hamilton Kaufman Jack Hopkins Hays Hansford
|
||||||
|
Kendall Jackson Houston Hemphill Hardeman Kenedy
|
||||||
|
Jasper Howard Henderson Hardin)))
|
||||||
|
|
||||||
|
;; MAP!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:one-null-list"
|
||||||
|
(assert-true (null? (map! vector (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:one-singleton-list"
|
||||||
|
(assert-equal? (map! vector (list 'Kent))
|
||||||
|
'(#(Kent))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(map! vector (list 'Kerr 'Kimble 'King 'Kinney 'Kleberg))
|
||||||
|
'(#(Kerr) #(Kimble) #(King) #(Kinney) #(Kleberg))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:several-null-lists"
|
||||||
|
(assert-true (null? (map! vector (list) (list) (list) (list) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(map! vector
|
||||||
|
(list 'Knox)
|
||||||
|
(list 'Lamar)
|
||||||
|
(list 'Lamb)
|
||||||
|
(list 'Lampasas)
|
||||||
|
(list 'Lavaca))
|
||||||
|
'(#(Knox Lamar Lamb Lampasas Lavaca))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map!:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(map! vector
|
||||||
|
(list 'Lee 'Leon 'Liberty 'Limestone 'Lipscomb 'Llano
|
||||||
|
'Loving)
|
||||||
|
(list 'Lubbock 'Lynn 'McCulloch 'McLennan 'McMullen
|
||||||
|
'Madison 'Marion)
|
||||||
|
(list 'Martin 'Mason 'Matagorda 'Maverick 'Medina
|
||||||
|
'Menard 'Midland)
|
||||||
|
(list 'Milam 'Mills 'Mitchell 'Montague 'Montgomery
|
||||||
|
'Moore 'Morris)
|
||||||
|
(list 'Motley 'Nacogdoches 'Navarro 'Newton 'Nolan
|
||||||
|
'Nueces 'Ochiltree))
|
||||||
|
'(#(Lee Lubbock Martin Milam Motley)
|
||||||
|
#(Leon Lynn Mason Mills Nacogdoches)
|
||||||
|
#(Liberty McCulloch Matagorda Mitchell Navarro)
|
||||||
|
#(Limestone McLennan Maverick Montague Newton)
|
||||||
|
#(Lipscomb McMullen Medina Montgomery Nolan)
|
||||||
|
#(Llano Madison Menard Moore Nueces)
|
||||||
|
#(Loving Marion Midland Morris Ochiltree))))
|
||||||
|
|
||||||
|
;; MAP-IN-ORDER
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:one-null-list"
|
||||||
|
(assert-true (null? (let ((counter 0))
|
||||||
|
(map-in-order (lambda (element)
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(cons counter element))
|
||||||
|
'())))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((counter 0))
|
||||||
|
(map-in-order (lambda (element)
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(cons counter element))
|
||||||
|
'(Oldham)))
|
||||||
|
'((1 . Oldham))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((counter 0))
|
||||||
|
(map-in-order (lambda (element)
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(cons counter element))
|
||||||
|
'(Orange Panola Parker Parmer Pecos)))
|
||||||
|
'((1 . Orange)
|
||||||
|
(2 . Panola)
|
||||||
|
(3 . Parker)
|
||||||
|
(4 . Parmer)
|
||||||
|
(5 . Pecos))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:several-null-lists"
|
||||||
|
(assert-true (null? (let ((counter 0))
|
||||||
|
(map-in-order (lambda elements
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(apply vector counter elements))
|
||||||
|
'() '() '() '() '())))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((counter 0))
|
||||||
|
(map-in-order (lambda elements
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(apply vector counter elements))
|
||||||
|
'(Polk)
|
||||||
|
'(Potter)
|
||||||
|
'(Presidio)
|
||||||
|
'(Rains)
|
||||||
|
'(Randall)))
|
||||||
|
'(#(1 Polk Potter Presidio Rains Randall))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"map-in-order:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((counter 0))
|
||||||
|
(map-in-order (lambda elements
|
||||||
|
(set! counter (+ counter 1))
|
||||||
|
(apply vector counter elements))
|
||||||
|
'(Reagan Real Reeves Refugio Roberts Robertson
|
||||||
|
Rockwall)
|
||||||
|
'(Runnels Rusk Sabine Schleicher Scurry
|
||||||
|
Shackelford Shelby)
|
||||||
|
'(Sherman Smith Somervell Starr Stephens
|
||||||
|
Sterling Stonewall)
|
||||||
|
'(Sutton Swisher Tarrant Taylor Terrell Terry
|
||||||
|
Throckmorton)
|
||||||
|
'(Titus Travis Trinity Tyler Upshur Upton
|
||||||
|
Uvalde)))
|
||||||
|
'(#(1 Reagan Runnels Sherman Sutton Titus)
|
||||||
|
#(2 Real Rusk Smith Swisher Travis)
|
||||||
|
#(3 Reeves Sabine Somervell Tarrant Trinity)
|
||||||
|
#(4 Refugio Schleicher Starr Taylor Tyler)
|
||||||
|
#(5 Roberts Scurry Stephens Terrell Upshur)
|
||||||
|
#(6 Robertson Shackelford Sterling Terry Upton)
|
||||||
|
#(7 Rockwall Shelby Stonewall Throckmorton
|
||||||
|
Uvalde))))
|
||||||
|
|
||||||
|
;; PAIR-FOR-EACH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:one-null-list"
|
||||||
|
(assert-true
|
||||||
|
(null? (let ((base '()))
|
||||||
|
(pair-for-each (lambda (tail)
|
||||||
|
(set! base (append tail base)))
|
||||||
|
'())
|
||||||
|
base))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((base '()))
|
||||||
|
(pair-for-each (lambda (tail)
|
||||||
|
(set! base (append tail base)))
|
||||||
|
'(Victoria))
|
||||||
|
base)
|
||||||
|
'(Victoria)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((base '()))
|
||||||
|
(pair-for-each (lambda (tail)
|
||||||
|
(set! base (append tail base)))
|
||||||
|
'(Walker Waller Ward Washington Webb))
|
||||||
|
base)
|
||||||
|
'(Webb Washington Webb Ward Washington Webb Waller
|
||||||
|
Ward Washington Webb Walker Waller Ward
|
||||||
|
Washington Webb)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:several-null-lists"
|
||||||
|
(assert-true
|
||||||
|
(null? (let ((base '()))
|
||||||
|
(pair-for-each (lambda tails
|
||||||
|
(set! base
|
||||||
|
(cons (apply vector tails) base)))
|
||||||
|
'() '() '() '() '())
|
||||||
|
base))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((base '()))
|
||||||
|
(pair-for-each (lambda tails
|
||||||
|
(set! base
|
||||||
|
(cons (apply vector tails) base)))
|
||||||
|
'(Wharton)
|
||||||
|
'(Wheeler)
|
||||||
|
'(Wichita)
|
||||||
|
'(Wilbarger)
|
||||||
|
'(Willacy))
|
||||||
|
base)
|
||||||
|
'(#((Wharton) (Wheeler) (Wichita) (Wilbarger)
|
||||||
|
(Willacy)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"pair-for-each:several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(let ((base '()))
|
||||||
|
(pair-for-each (lambda tails
|
||||||
|
(set! base
|
||||||
|
(cons (apply vector tails) base)))
|
||||||
|
'(Williamson Wilson Winkler Wise Wood Yoakum
|
||||||
|
Young)
|
||||||
|
'(Zapata Zavala Admiral Advil Ajax Anacin
|
||||||
|
Arrid)
|
||||||
|
'(Arnold Ban Barbie Beech Blockbuster Bounce
|
||||||
|
Breck)
|
||||||
|
'(Budweiser Bufferin BVD Carrier Celeste
|
||||||
|
Charmin Cheer)
|
||||||
|
'(Cheerios Cinemax Clairol Clorets Combat
|
||||||
|
Comet Coppertone))
|
||||||
|
base)
|
||||||
|
'(#((Young) (Arrid) (Breck) (Cheer) (Coppertone))
|
||||||
|
#((Yoakum Young) (Anacin Arrid) (Bounce Breck)
|
||||||
|
(Charmin Cheer) (Comet Coppertone))
|
||||||
|
#((Wood Yoakum Young)
|
||||||
|
(Ajax Anacin Arrid)
|
||||||
|
(Blockbuster Bounce Breck)
|
||||||
|
(Celeste Charmin Cheer)
|
||||||
|
(Combat Comet Coppertone))
|
||||||
|
#((Wise Wood Yoakum Young)
|
||||||
|
(Advil Ajax Anacin Arrid)
|
||||||
|
(Beech Blockbuster Bounce Breck)
|
||||||
|
(Carrier Celeste Charmin Cheer)
|
||||||
|
(Clorets Combat Comet Coppertone))
|
||||||
|
#((Winkler Wise Wood Yoakum Young)
|
||||||
|
(Admiral Advil Ajax Anacin Arrid)
|
||||||
|
(Barbie Beech Blockbuster Bounce Breck)
|
||||||
|
(BVD Carrier Celeste Charmin Cheer)
|
||||||
|
(Clairol Clorets Combat Comet Coppertone))
|
||||||
|
#((Wilson Winkler Wise Wood Yoakum Young)
|
||||||
|
(Zavala Admiral Advil Ajax Anacin Arrid)
|
||||||
|
(Ban Barbie Beech Blockbuster Bounce Breck)
|
||||||
|
(Bufferin BVD Carrier Celeste Charmin Cheer)
|
||||||
|
(Cinemax Clairol Clorets Combat Comet
|
||||||
|
Coppertone))
|
||||||
|
#((Williamson Wilson Winkler Wise Wood Yoakum
|
||||||
|
Young)
|
||||||
|
(Zapata Zavala Admiral Advil Ajax Anacin Arrid)
|
||||||
|
(Arnold Ban Barbie Beech Blockbuster Bounce
|
||||||
|
Breck)
|
||||||
|
(Budweiser Bufferin BVD Carrier Celeste Charmin
|
||||||
|
Cheer)
|
||||||
|
(Cheerios Cinemax Clairol Clorets Combat Comet
|
||||||
|
Coppertone)))))
|
||||||
|
|
||||||
|
;; FILTER-MAP
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:one-null-list"
|
||||||
|
(assert-true (null? (filter-map values '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map values '(Crest))
|
||||||
|
'(Crest)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:one-list-all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null? (filter-map (lambda (x) #f)
|
||||||
|
'(Crisco Degree Doritos Dristan Efferdent)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:one-list-some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map (lambda (n) (and (even? n) n))
|
||||||
|
'(44 45 46 47 48 49 50))
|
||||||
|
'(44 46 48 50)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:one-list-no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map values '(ESPN Everready Excedrin Fab Fantastik))
|
||||||
|
'(ESPN Everready Excedrin Fab Fantastik)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:several-null-lists"
|
||||||
|
(assert-true (null? (filter-map vector '() '() '() '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map vector
|
||||||
|
'(Foamy)
|
||||||
|
'(Gatorade)
|
||||||
|
'(Glad)
|
||||||
|
'(Gleem)
|
||||||
|
'(Halcion))
|
||||||
|
'(#(Foamy Gatorade Glad Gleem Halcion))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:several-lists-all-elements-removed"
|
||||||
|
(assert-true
|
||||||
|
(null?
|
||||||
|
(filter-map (lambda arguments #f)
|
||||||
|
'(Hanes HBO Hostess Huggies Ivory Kent Kinney)
|
||||||
|
'(Kleenex Knorr Lee Lenox Lerner Listerine
|
||||||
|
Marlboro)
|
||||||
|
'(Mazola Michelob Midas Miller NBC Newsweek
|
||||||
|
Noxema)
|
||||||
|
'(NutraSweet Oreo Pampers People Planters
|
||||||
|
Playskool Playtex)
|
||||||
|
'(Prego Prell Prozac Purex Ritz Robitussin
|
||||||
|
Rolaids)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:several-lists-some-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map (lambda arguments
|
||||||
|
(let ((sum (apply + arguments)))
|
||||||
|
(and (odd? sum) sum)))
|
||||||
|
'(51 52 53 54 55 56 57)
|
||||||
|
'(58 59 60 61 62 63 64)
|
||||||
|
'(65 66 67 68 69 70 71)
|
||||||
|
'(72 73 74 75 76 77 78)
|
||||||
|
'(79 80 81 82 83 84 85))
|
||||||
|
'(325 335 345 355)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"filter-map:several-lists-no-elements-removed"
|
||||||
|
(assert-equal?
|
||||||
|
(filter-map vector
|
||||||
|
'(Ronzoni Ruffles Scotch Skippy SnackWell Snapple
|
||||||
|
Spam)
|
||||||
|
'(Sprite Swanson Thomas Tide Tonka Trojan
|
||||||
|
Tupperware)
|
||||||
|
'(Tylenol Velveeta Vicks Victory Visine Wheaties
|
||||||
|
Wise)
|
||||||
|
'(Wonder Ziploc Abbott Abingdon Ackley Ackworth
|
||||||
|
Adair)
|
||||||
|
'(Adams Adaville Adaza Adel Adelphi Adena Afton))
|
||||||
|
'(#(Ronzoni Sprite Tylenol Wonder Adams)
|
||||||
|
#(Ruffles Swanson Velveeta Ziploc Adaville)
|
||||||
|
#(Scotch Thomas Vicks Abbott Adaza)
|
||||||
|
#(Skippy Tide Victory Abingdon Adel)
|
||||||
|
#(SnackWell Tonka Visine Ackley Adelphi)
|
||||||
|
#(Snapple Trojan Wheaties Ackworth Adena)
|
||||||
|
#(Spam Tupperware Wise Adair Afton))))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
;;; fold-test.ss ends here
|
112
collects/tests/srfi/1/lset-test.ss
Normal file
112
collects/tests/srfi/1/lset-test.ss
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
;;;
|
||||||
|
;;; <lset-test.ss> ---- Lists as Sets Tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:15:22 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module lset-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(lib "lset.ss" "srfi" "1"))
|
||||||
|
|
||||||
|
(provide lset-tests)
|
||||||
|
|
||||||
|
(define lset-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List as set procedures tests"
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset<=:singleton"
|
||||||
|
(assert-true (lset<= eq?)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset<=:empty-list"
|
||||||
|
(assert-true (lset<= eq? (list))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset<=:empty-lists"
|
||||||
|
(assert-true (lset<= eq? (list) (list))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset<=:normal-case"
|
||||||
|
(assert-true (lset<= = (list 1 2 3 4) (list 1 2 3 4))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset<=:normal-case-fail"
|
||||||
|
(assert-true (not (lset<= = (list 2 3 4 5) (list 1 2 3 4)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset=:empty-list"
|
||||||
|
(assert-true (lset= eq?)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset=:singleton"
|
||||||
|
(assert-true (lset= eq? '(a b c d e))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset=:normal-case"
|
||||||
|
(assert-true (lset= = '(1 2 3 4 5) '(5 4 3 2 1))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset=:normal-case-fail"
|
||||||
|
(assert-false (lset= eq? '(a b c d e) '(a b c d))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor:empty-list"
|
||||||
|
(assert-equal? (lset-xor eq?) '()))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor:singleton"
|
||||||
|
(assert-equal? (lset-xor eq? '(a b c d e)) '(a b c d e)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor:normal-case"
|
||||||
|
(assert-true (lset= eq?
|
||||||
|
(lset-xor eq? '(a b c d e) '(a e i o u))
|
||||||
|
'(d c b i o u))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor!:empty-list"
|
||||||
|
(assert-equal? (lset-xor! eq?) '()))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor!:singleton"
|
||||||
|
(assert-equal? (lset-xor! eq? '(a b c d e)) '(a b c d e)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"lset-xor!:normal-case"
|
||||||
|
(assert-true (lset= eq?
|
||||||
|
(lset-xor! eq? '(a b c d e) '(a e i o u))
|
||||||
|
'(d c b i o u))))
|
||||||
|
))
|
||||||
|
)
|
||||||
|
;;; lset-test.ss ends here
|
384
collects/tests/srfi/1/misc-test.ss
Normal file
384
collects/tests/srfi/1/misc-test.ss
Normal file
|
@ -0,0 +1,384 @@
|
||||||
|
;;;
|
||||||
|
;;; <misc-test.ss> ---- Misc list procedure tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:15:50 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module misc-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require
|
||||||
|
(planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "misc.ss" "srfi" "1") append! reverse!)
|
||||||
|
(rename (lib "misc.ss" "srfi" "1") s:append! append!)
|
||||||
|
(rename (lib "misc.ss" "srfi" "1") s:reverse! reverse!))
|
||||||
|
|
||||||
|
(provide misc-tests)
|
||||||
|
|
||||||
|
(define misc-tests
|
||||||
|
(make-test-suite
|
||||||
|
"Miscellaneous list procedures tests"
|
||||||
|
|
||||||
|
;; ZIP
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"zip:all-lists-empty"
|
||||||
|
(assert-true (null? (zip '() '() '() '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"zip:one-list"
|
||||||
|
(assert-equal? (zip '(Pisces Puppis Reticulum))
|
||||||
|
'((Pisces) (Puppis) (Reticulum))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"zip:two-lists"
|
||||||
|
(assert-equal? (zip '(Sagitta Sagittarius Scorpio Scutum Serpens)
|
||||||
|
'(Sextans Taurus Telescopium Triangulum Tucana))
|
||||||
|
'((Sagitta Sextans)
|
||||||
|
(Sagittarius Taurus)
|
||||||
|
(Scorpio Telescopium)
|
||||||
|
(Scutum Triangulum)
|
||||||
|
(Serpens Tucana))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"zip:short-lists"
|
||||||
|
(assert-equal? (zip '(Vela) '(Virgo) '(Volens) '(Vulpecula))
|
||||||
|
'((Vela Virgo Volens Vulpecula))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"zip:several-lists"
|
||||||
|
(assert-equal? (zip '(actinium aluminum americium antimony argon)
|
||||||
|
'(arsenic astatine barium berkeleium beryllium)
|
||||||
|
'(bismuth boron bromine cadmium calcium)
|
||||||
|
'(californium carbon cerium cesium chlorine)
|
||||||
|
'(chromium cobalt copper curium dysprosium)
|
||||||
|
'(einsteinium erbium europium fermium fluorine)
|
||||||
|
'(francium gadolinium gallium germanium gold))
|
||||||
|
'((actinium arsenic bismuth californium
|
||||||
|
chromium einsteinium francium)
|
||||||
|
(aluminum astatine boron carbon cobalt
|
||||||
|
erbium gadolinium)
|
||||||
|
(americium barium bromine cerium copper
|
||||||
|
europium gallium)
|
||||||
|
(antimony berkeleium cadmium cesium curium
|
||||||
|
fermium germanium)
|
||||||
|
(argon beryllium calcium chlorine
|
||||||
|
dysprosium fluorine gold))))
|
||||||
|
|
||||||
|
;; UNZIP2
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip2:empty-list-of-lists"
|
||||||
|
(let-values (((firsts seconds) (unzip2 '())))
|
||||||
|
(assert-true (and (null? firsts) (null? seconds)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip2:singleton-list-of-lists"
|
||||||
|
(let-values (((firsts seconds) (unzip2 '((retriever rottweiler)))))
|
||||||
|
(assert-true (and (equal? firsts '(retriever))
|
||||||
|
(equal? seconds '(rottweiler))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip2:longer-list-of-lists"
|
||||||
|
(let-values (((firsts seconds)
|
||||||
|
(unzip2 '((saluki samoyed)
|
||||||
|
(shipperke schnauzer)
|
||||||
|
(setter shepherd)
|
||||||
|
(skye spaniel)
|
||||||
|
(spitz staghound)))))
|
||||||
|
(assert-true (and (equal? firsts '(saluki shipperke setter skye spitz))
|
||||||
|
(equal? seconds '(samoyed schnauzer shepherd spaniel
|
||||||
|
staghound))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip2:lists-with-extra-elements"
|
||||||
|
(let-values (((firsts seconds)
|
||||||
|
(unzip2 '((terrier turnspit vizsla wiemaraner)
|
||||||
|
(whippet wolfhound)
|
||||||
|
(bells bones bongo carillon celesta)
|
||||||
|
(chimes clappers conga)))))
|
||||||
|
(assert-true (and (equal? firsts '(terrier whippet bells chimes))
|
||||||
|
(equal? seconds
|
||||||
|
'(turnspit wolfhound bones clappers))))))
|
||||||
|
|
||||||
|
;; UNZIP3
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip3:empty-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds)
|
||||||
|
(unzip3 '())))
|
||||||
|
(assert-true (and (null? firsts) (null? seconds) (null? thirds)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip3:singleton-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds)
|
||||||
|
(unzip3 '((cymbals gamelan glockenspiel)))))
|
||||||
|
(assert-true (and (equal? firsts '(cymbals))
|
||||||
|
(equal? seconds '(gamelan))
|
||||||
|
(equal? thirds '(glockenspiel))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip3:longer-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds)
|
||||||
|
(unzip3 '((gong handbells kettledrum)
|
||||||
|
(lyra maraca marimba)
|
||||||
|
(mbira membranophone metallophone)
|
||||||
|
(nagara naker rattle)
|
||||||
|
(sizzler snappers tabor)))))
|
||||||
|
(assert-true (and (equal? firsts '(gong lyra mbira nagara sizzler))
|
||||||
|
(equal? seconds '(handbells maraca membranophone naker
|
||||||
|
snappers))
|
||||||
|
(equal? thirds '(kettledrum marimba metallophone rattle
|
||||||
|
tabor))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip3:lists-with-extra-elements"
|
||||||
|
(let-values (((firsts seconds thirds)
|
||||||
|
(unzip3 '((tambourine timbrel timpani tintinnabula tonitruone)
|
||||||
|
(triangle vibraphone xylophone)
|
||||||
|
(baccarat banker bezique bingo bridge canasta)
|
||||||
|
(casino craps cribbage euchre)))))
|
||||||
|
(assert-true (and (equal? firsts '(tambourine triangle baccarat casino))
|
||||||
|
(equal? seconds '(timbrel vibraphone banker craps))
|
||||||
|
(equal? thirds
|
||||||
|
'(timpani xylophone bezique cribbage))))))
|
||||||
|
|
||||||
|
;; UNZIP4
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip4:empty-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths)
|
||||||
|
(unzip4 '())))
|
||||||
|
(assert-true (and (null? firsts)
|
||||||
|
(null? seconds)
|
||||||
|
(null? thirds)
|
||||||
|
(null? fourths)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip4:singleton-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths)
|
||||||
|
(unzip4 '((fantan faro gin hazard)))))
|
||||||
|
(assert-true (and (equal? firsts '(fantan))
|
||||||
|
(equal? seconds '(faro))
|
||||||
|
(equal? thirds '(gin))
|
||||||
|
(equal? fourths '(hazard))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip4:longer-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths)
|
||||||
|
(unzip4 '((hearts keno loo lottery)
|
||||||
|
(lotto lowball monte numbers)
|
||||||
|
(ombre picquet pinball pinochle)
|
||||||
|
(poker policy quinze romesteq)
|
||||||
|
(roulette rum rummy skat)))))
|
||||||
|
(assert-true (and (equal? firsts '(hearts lotto ombre poker roulette))
|
||||||
|
(equal? seconds '(keno lowball picquet policy rum))
|
||||||
|
(equal? thirds '(loo monte pinball quinze rummy))
|
||||||
|
(equal? fourths
|
||||||
|
'(lottery numbers pinochle romesteq skat))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip4:lists-with-extra-elements"
|
||||||
|
(let-values (((firsts seconds thirds fourths)
|
||||||
|
(unzip4 '((adamant agate alexandrite amethyst aquamarine
|
||||||
|
beryl)
|
||||||
|
(bloodstone brilliant carbuncle carnelian)
|
||||||
|
(chalcedony chrysoberyl chrysolite chrysoprase
|
||||||
|
citrine coral demantoid)
|
||||||
|
(diamond emerald garnet girasol heliotrope)))))
|
||||||
|
(assert-true (and (equal? firsts '(adamant bloodstone chalcedony diamond))
|
||||||
|
(equal? seconds '(agate brilliant chrysoberyl emerald))
|
||||||
|
(equal? thirds
|
||||||
|
'(alexandrite carbuncle chrysolite garnet))
|
||||||
|
(equal? fourths
|
||||||
|
'(amethyst carnelian chrysoprase girasol))))))
|
||||||
|
|
||||||
|
;; UNZIP5
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip5:empty-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths fifths)
|
||||||
|
(unzip5 '())))
|
||||||
|
(assert-true
|
||||||
|
(and (null? firsts)
|
||||||
|
(null? seconds)
|
||||||
|
(null? thirds)
|
||||||
|
(null? fourths)
|
||||||
|
(null? fifths)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip5:singleton-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths fifths)
|
||||||
|
(unzip5 '((hyacinth jacinth jade jargoon jasper)))))
|
||||||
|
(lambda (firsts seconds thirds fourths fifths)
|
||||||
|
(and (equal? firsts '(hyacinth))
|
||||||
|
(equal? seconds '(jacinth))
|
||||||
|
(equal? thirds '(jade))
|
||||||
|
(equal? fourths '(jargoon))
|
||||||
|
(equal? fifths '(jasper))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip5:longer-list-of-lists"
|
||||||
|
(let-values (((firsts seconds thirds fourths fifths)
|
||||||
|
(unzip5 '((kunzite moonstone morganite onyx opal)
|
||||||
|
(peridot plasma ruby sapphire sard)
|
||||||
|
(sardonyx spinel star sunstone topaz)
|
||||||
|
(tourmaline turquoise zircon Argus basilisk)
|
||||||
|
(Bigfoot Briareus bucentur Cacus Caliban)))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? firsts
|
||||||
|
'(kunzite peridot sardonyx tourmaline Bigfoot))
|
||||||
|
(equal? seconds
|
||||||
|
'(moonstone plasma spinel turquoise Briareus))
|
||||||
|
(equal? thirds '(morganite ruby star zircon bucentur))
|
||||||
|
(equal? fourths '(onyx sapphire sunstone Argus Cacus))
|
||||||
|
(equal? fifths '(opal sard topaz basilisk Caliban))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"unzip5:lists-with-extra-elements"
|
||||||
|
(let-values (((firsts seconds thirds fourths fifths)
|
||||||
|
(unzip5 '((centaur Cerberus Ceto Charybdis chimera cockatrice
|
||||||
|
Cyclops)
|
||||||
|
(dipsas dragon drake Echidna Geryon)
|
||||||
|
(Gigantes Gorgon Grendel griffin Harpy hippocampus
|
||||||
|
hippocentaur hippocerf)
|
||||||
|
(hirocervus Hydra Kraken Ladon manticore Medusa)))))
|
||||||
|
(assert-true
|
||||||
|
(and (equal? firsts '(centaur dipsas Gigantes hirocervus))
|
||||||
|
(equal? seconds '(Cerberus dragon Gorgon Hydra))
|
||||||
|
(equal? thirds '(Ceto drake Grendel Kraken))
|
||||||
|
(equal? fourths '(Charybdis Echidna griffin Ladon))
|
||||||
|
(equal? fifths '(chimera Geryon Harpy manticore))))))
|
||||||
|
|
||||||
|
;; APPEND!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append!:no-arguments"
|
||||||
|
(assert-true (null? (s:append!))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append!:one-argument"
|
||||||
|
(assert-equal? (s:append! (list 'mermaid 'merman 'Minotaur))
|
||||||
|
'(mermaid merman Minotaur)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append!:several-arguments"
|
||||||
|
(assert-equal?
|
||||||
|
(s:append! (list 'nixie 'ogre 'ogress 'opinicus)
|
||||||
|
(list 'Orthos)
|
||||||
|
(list 'Pegasus 'Python)
|
||||||
|
(list 'roc 'Sagittary 'salamander 'Sasquatch 'satyr)
|
||||||
|
(list 'Scylla 'simurgh 'siren))
|
||||||
|
'(nixie ogre ogress opinicus Orthos Pegasus
|
||||||
|
Python roc Sagittary salamander Sasquatch
|
||||||
|
satyr Scylla simurgh siren)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append!:some-null-arguments"
|
||||||
|
(assert-equal?
|
||||||
|
(s:append! (list) (list) (list 'Sphinx 'Talos 'troll) (list)
|
||||||
|
(list 'Typhoeus) (list) (list) (list))
|
||||||
|
'(Sphinx Talos troll Typhoeus)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append!:all-null-arguments"
|
||||||
|
(assert-true (null? (s:append! (list) (list) (list) (list) (list)))))
|
||||||
|
|
||||||
|
;; APPEND-REVERSE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse:first-argument-null"
|
||||||
|
(assert-equal? (append-reverse '() '(Typhon unicorn vampire werewolf))
|
||||||
|
'(Typhon unicorn vampire werewolf)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse:second-argument-null"
|
||||||
|
(assert-equal? (append-reverse '(windigo wivern xiphopagus yeti zombie) '())
|
||||||
|
'(zombie yeti xiphopagus wivern windigo)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse:both-arguments-null"
|
||||||
|
(assert-true (null? (append-reverse '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse:neither-argument-null"
|
||||||
|
(assert-equal?
|
||||||
|
(append-reverse '(Afghanistan Albania Algeria Andorra)
|
||||||
|
'(Angola Argentina Armenia))
|
||||||
|
'(Andorra Algeria Albania Afghanistan Angola
|
||||||
|
Argentina Armenia)))
|
||||||
|
|
||||||
|
;; APPEND-REVERSE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse!:first-argument-null"
|
||||||
|
(assert-equal? (append-reverse! (list)
|
||||||
|
(list 'Australia 'Austria 'Azerbaijan))
|
||||||
|
'(Australia Austria Azerbaijan)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse!:second-argument-null"
|
||||||
|
(assert-equal? (append-reverse! (list 'Bahrain 'Bangladesh 'Barbados
|
||||||
|
'Belarus 'Belgium)
|
||||||
|
(list))
|
||||||
|
'(Belgium Belarus Barbados Bangladesh Bahrain)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse!:both-arguments-null"
|
||||||
|
(assert-true (null? (append-reverse! (list) (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"append-reverse!:neither-argument-null"
|
||||||
|
(assert-equal? (append-reverse! (list 'Belize 'Benin 'Bhutan 'Bolivia)
|
||||||
|
(list 'Bosnia 'Botswana 'Brazil))
|
||||||
|
'(Bolivia Bhutan Benin Belize Bosnia Botswana Brazil)))
|
||||||
|
|
||||||
|
;; REVERSE!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reverse!:empty-list"
|
||||||
|
(assert-true (null? (s:reverse! (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reverse!:singleton-list"
|
||||||
|
(assert-equal? (s:reverse! (list 'Brunei))
|
||||||
|
'(Brunei)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"reverse!:longer-list"
|
||||||
|
(assert-equal? (s:reverse! (list 'Bulgaria 'Burundi 'Cambodia 'Cameroon
|
||||||
|
'Canada))
|
||||||
|
'(Canada Cameroon Cambodia Burundi Bulgaria)))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
|
||||||
|
;;; misc-test.ss ends here
|
170
collects/tests/srfi/1/predicate-test.ss
Normal file
170
collects/tests/srfi/1/predicate-test.ss
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
;;;
|
||||||
|
;;; <predicate-test.ss> ---- List predicate tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:16:27 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module predicate-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require
|
||||||
|
(planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(lib "predicate.ss" "srfi" "1")
|
||||||
|
(lib "cons.ss" "srfi" "1"))
|
||||||
|
|
||||||
|
(provide predicate-tests)
|
||||||
|
|
||||||
|
(define predicate-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List predicate tests"
|
||||||
|
|
||||||
|
;; PROPER-LIST?
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"proper-list?:list"
|
||||||
|
(assert-true (proper-list? (list 1 2 3 4 5))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"proper-list?:dotted-list"
|
||||||
|
(assert-true (not (proper-list? (cons 1 (cons 2 (cons 3 4)))))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"proper-list?:zero-length"
|
||||||
|
(assert-true (proper-list? (list))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"proper-list?:circular-list"
|
||||||
|
(assert-true (not (proper-list? (circular-list 'a 'b 'c 'd)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"proper-list?:simple-value"
|
||||||
|
(assert-true (not (proper-list? 1))))
|
||||||
|
|
||||||
|
;; DOTTED-LIST?
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"dotted-list?:dotted-list"
|
||||||
|
(assert-true (dotted-list? '(1 2 3 . 4))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"dotted-list?:proper-list"
|
||||||
|
(assert-true (not (dotted-list? (list 'a 'b 'c 'd)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"dotted-list?:empty-list"
|
||||||
|
(assert-true (not (dotted-list? (list)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"dotted-list?:simple-value"
|
||||||
|
(assert-true (dotted-list? "hello")))
|
||||||
|
|
||||||
|
;; CIRCULAR-LIST
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list?:proper-list"
|
||||||
|
(assert-true (not (circular-list? (list 1 2 3 4)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list?:dotted-list"
|
||||||
|
(assert-true (not (circular-list? '(a b c . d)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list?:simple-value"
|
||||||
|
(assert-true (not (circular-list? 1))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"circular-list?:circular-list"
|
||||||
|
(assert-true (circular-list? (circular-list 1 2 3 4))))
|
||||||
|
|
||||||
|
;; NOT-PAIR
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"not-pair?:list"
|
||||||
|
(assert-true (not (not-pair? (list 1 2 3 4)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"not-pair?:number"
|
||||||
|
(assert-true (not-pair? 1)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"not-pair?:symbol"
|
||||||
|
(assert-true (not-pair? 'symbol)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"not-pair?:string"
|
||||||
|
(assert-true (not-pair? "string")))
|
||||||
|
|
||||||
|
;; NULL-LIST?
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"null-list?:null-list"
|
||||||
|
(assert-true (null-list? (list))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"null-list?:list"
|
||||||
|
(assert-true (not (null-list? (list 'a 'b 'c)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"null-list?:pair"
|
||||||
|
(assert-true (not (null-list? (cons 1 2)))))
|
||||||
|
|
||||||
|
;; LIST=
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:number-list"
|
||||||
|
(assert-true (list= = (list 1.0 2.0 3.0) (list 1 2 3))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:symbol-vs-string-list"
|
||||||
|
(assert-true (list= (lambda (x y)
|
||||||
|
(string=? (symbol->string x) y))
|
||||||
|
(list 'a 'b 'c)
|
||||||
|
(list "a" "b" "c"))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:unequal-lists"
|
||||||
|
(assert-true (not (list= eq? (list 1 2 3) (list 'a 'b 'c) (list 1 2 3)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:unequal-lengths"
|
||||||
|
(assert-true (not (list= eq? (list 1 2 3) (list 1 2 3 4)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:empty-lists"
|
||||||
|
(assert-true (list= eq? (list) (list) (list))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list=:no-list"
|
||||||
|
(assert-true (list= eq?)))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
;;; predicate-test.ss ends here
|
5
collects/tests/srfi/1/run-tests.ss
Normal file
5
collects/tests/srfi/1/run-tests.ss
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require (planet "text-ui.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require "all-1-tests.ss")
|
||||||
|
|
||||||
|
(test/text-ui all-1-tests)
|
529
collects/tests/srfi/1/search-test.ss
Normal file
529
collects/tests/srfi/1/search-test.ss
Normal file
|
@ -0,0 +1,529 @@
|
||||||
|
;;;
|
||||||
|
;;; <search-test.ss> ---- List searching functions tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:16:26 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module search-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(all-except (lib "search.ss" "srfi" "1") member))
|
||||||
|
|
||||||
|
(provide search-tests)
|
||||||
|
|
||||||
|
(define search-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List search tests"
|
||||||
|
|
||||||
|
;; FIND
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:in-null-list"
|
||||||
|
(assert-true (not (find (lambda (x) #t) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:in-singleton-list"
|
||||||
|
(assert-eq? (find (lambda (x) #t) '(Aurora))
|
||||||
|
'Aurora))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:not-in-singleton-list"
|
||||||
|
(assert-true (not (find (lambda (x) #f) '(Austinville)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:at-front-of-longer-list"
|
||||||
|
(assert-eq?
|
||||||
|
(find (lambda (x) #t) '(Avery Avoca Avon Ayrshire Badger))
|
||||||
|
'Avery))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:in-middle-of-longer-list"
|
||||||
|
(assert =
|
||||||
|
(find even? '(149 151 153 155 156 157 159))
|
||||||
|
156))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:at-end-of-longer-list"
|
||||||
|
(assert =
|
||||||
|
(find even? '(161 163 165 167 168))
|
||||||
|
168))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find:not-in-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(find (lambda (x) #f)
|
||||||
|
'(Bagley Bailey Badwin Balfour Balltown)))))
|
||||||
|
|
||||||
|
;;; FIND-TAIL
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:in-null-list"
|
||||||
|
(assert-true (not (find-tail (lambda (x) #t) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:in-singleton-list"
|
||||||
|
(let ((source '(Ballyclough)))
|
||||||
|
(assert-eq?
|
||||||
|
(find-tail (lambda (x) #t) source)
|
||||||
|
source)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:not-in-singleton-list"
|
||||||
|
(assert-true (not (find-tail (lambda (x) #f) '(Bancroft)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:at-front-of-longer-list"
|
||||||
|
(let ((source '(Bangor Bankston Barney Barnum Bartlett)))
|
||||||
|
(assert-eq?
|
||||||
|
(find-tail (lambda (x) #t) source)
|
||||||
|
source)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:in-middle-of-longer-list"
|
||||||
|
(let ((source '(169 171 173 175 176 177 179)))
|
||||||
|
(assert-eq?
|
||||||
|
(find-tail even? source)
|
||||||
|
(cddddr source))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:at-end-of-longer-list"
|
||||||
|
(let ((source '(181 183 185 187 188)))
|
||||||
|
(assert-eq?
|
||||||
|
(find-tail even? source)
|
||||||
|
(cddddr source))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"find-tail:not-in-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(find-tail (lambda (x) #f)
|
||||||
|
'(Batavia Bauer Baxter Bayard Beacon)) )))
|
||||||
|
|
||||||
|
;;; ANY
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-one-null-list"
|
||||||
|
(assert-true (not (any values '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-one-singleton-list"
|
||||||
|
(assert-equal? (any vector '(Beaconsfield)) '#(Beaconsfield)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:not-in-one-singleton-list"
|
||||||
|
(assert-true (not (any (lambda (x) #f) '(Beaman)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:at-beginning-of-one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(any vector '(Beaver Beaverdale Beckwith Bedford Beebeetown))
|
||||||
|
'#(Beaver)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-middle-of-one-longer-list"
|
||||||
|
(assert =
|
||||||
|
(any (lambda (x) (and (odd? x) (+ x 189)))
|
||||||
|
'(190 192 194 196 197 198 200))
|
||||||
|
386))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:at-end-of-one-longer-list"
|
||||||
|
(assert =
|
||||||
|
(any (lambda (x) (and (odd? x) (+ x 201)))
|
||||||
|
'(202 204 206 208 209))
|
||||||
|
410))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:not-in-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not (any (lambda (x) #f)
|
||||||
|
'(Beech Belinda Belknap Bellefountain Bellevue)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-several-null-lists"
|
||||||
|
(assert-true
|
||||||
|
(not (any vector '() '() '() '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(any vector
|
||||||
|
'(Belmond)
|
||||||
|
'(Beloit)
|
||||||
|
'(Bennett)
|
||||||
|
'(Benson)
|
||||||
|
'(Bentley))
|
||||||
|
'#(Belmond Beloit Bennett Benson Bentley)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:not-in-several-singleton-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(any (lambda arguments #f)
|
||||||
|
'(Benton)
|
||||||
|
'(Bentonsport)
|
||||||
|
'(Berea)
|
||||||
|
'(Berkley)
|
||||||
|
'(Bernard)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:at-beginning-of-several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(any vector
|
||||||
|
'(Berne Bertram Berwick Bethesda Bethlehem Bettendorf
|
||||||
|
Beulah)
|
||||||
|
'(Bevington Bidwell Bingham Birmingham Bladensburg
|
||||||
|
Blairsburg Blairstown)
|
||||||
|
'(Blakesburg Blanchard Blencoe Bliedorn Blockton
|
||||||
|
Bloomfield Bloomington)
|
||||||
|
'(Bluffton Bode Bolan Bonair Bonaparte Bondurant Boone)
|
||||||
|
'(Booneville Botany Botna Bouton Bowsher Boxholm Boyd))
|
||||||
|
'#(Berne Bevington Blakesburg Bluffton Booneville)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:in-middle-of-several-longer-lists"
|
||||||
|
(assert =
|
||||||
|
(any (lambda arguments
|
||||||
|
(let ((sum (apply + arguments)))
|
||||||
|
(and (odd? sum) (+ sum 210))))
|
||||||
|
'(211 212 213 214 215 216 217)
|
||||||
|
'(218 219 220 221 222 223 224)
|
||||||
|
'(225 226 227 228 229 230 231)
|
||||||
|
'(232 233 234 235 236 237 238)
|
||||||
|
'(240 242 244 246 247 248 250))
|
||||||
|
1359))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:at-end-of-several-longer-lists"
|
||||||
|
(assert =
|
||||||
|
(any (lambda arguments
|
||||||
|
(let ((sum (apply + arguments)))
|
||||||
|
(and (even? sum) (+ sum 210))))
|
||||||
|
'(252 253 254 255 256 257 258)
|
||||||
|
'(259 260 261 262 263 264 265)
|
||||||
|
'(266 267 268 269 270 271 272)
|
||||||
|
'(273 274 275 276 277 278 279)
|
||||||
|
'(281 283 285 287 289 291 292))
|
||||||
|
1576))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:not-in-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(any (lambda arguments #f)
|
||||||
|
'(Boyden Boyer Braddyville Bradford Bradgate Brainard
|
||||||
|
Brandon)
|
||||||
|
'(Brayton Brazil Breda Bridgewater Brighton Bristol
|
||||||
|
Bristow)
|
||||||
|
'(Britt Bromley Brompton Bronson Brooklyn Brooks
|
||||||
|
Brookville)
|
||||||
|
'(Browns Brownville Brunsville Brushy Bryant Bryantsburg
|
||||||
|
Buchanan)
|
||||||
|
'(Buckeye Buckhorn Buckingham Bucknell Budd Buffalo
|
||||||
|
Burchinal)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"any:not-in-lists-of-unequal-length"
|
||||||
|
(assert-true
|
||||||
|
(not (any (lambda arguments #f)
|
||||||
|
'(Burdette Burlington Burnside Burt)
|
||||||
|
'(Bushville Bussey)
|
||||||
|
'(Buxton Cairo Calamus)
|
||||||
|
'(Caledonia Clahoun Callender Calmar Caloma Calumet)))))
|
||||||
|
|
||||||
|
;;; EVERY
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-one-null-list"
|
||||||
|
(assert-true (every values '())))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-one-singleton-list"
|
||||||
|
(assert-equal?
|
||||||
|
(every vector '(Camanche))
|
||||||
|
'#(Camanche)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:not-in-one-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(not (every (lambda (x) #f) '(Cambria)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-at-beginning-of-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda (x) #f)
|
||||||
|
'(Cambridge Cameron Canby Canton Cantril)) )))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-in-middle-of-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda (x) (and (even? x) (+ x 293)))
|
||||||
|
'(294 296 298 300 301 302 304)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-at-end-of-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda (x) (and (even? x) (+ x 305)))
|
||||||
|
'(306 308 310 312 313)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-one-longer-list"
|
||||||
|
(assert-equal?
|
||||||
|
(every vector
|
||||||
|
'(Carbon Carbondale Carl Carlisle Carmel))
|
||||||
|
'#(Carmel)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-several-null-lists"
|
||||||
|
(assert-true
|
||||||
|
(every vector '() '() '() '() '())))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-several-singleton-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(every vector
|
||||||
|
'(Carnarvon)
|
||||||
|
'(Carnes)
|
||||||
|
'(Carney)
|
||||||
|
'(Carnforth)
|
||||||
|
'(Carpenter))
|
||||||
|
'#(Carnarvon Carnes Carney Carnforth Carpenter)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:not-in-several-singleton-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda arguments #f)
|
||||||
|
'(Carroll)
|
||||||
|
'(Carrollton)
|
||||||
|
'(Carrville)
|
||||||
|
'(Carson)
|
||||||
|
'(Cartersville)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-at-beginning-of-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda arguments #f)
|
||||||
|
'(Cascade Casey Castalia Castana Cattese Cedar
|
||||||
|
Centerdale)
|
||||||
|
'(Centerville Centralia Ceres Chapin Chariton
|
||||||
|
Charleston Charlotte)
|
||||||
|
'(Chatsworth Chautauqua Chelsea Cheney Cherokee Chester
|
||||||
|
Chickasaw)
|
||||||
|
'(Chillicothe Churchtown Churchville Churdan Cincinnati
|
||||||
|
Clare Clarence)
|
||||||
|
'(Clarinda Clarion Clark Clarkdale Clarksville Clayton
|
||||||
|
Clearfield))
|
||||||
|
)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-in-middle-of-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda arguments
|
||||||
|
(let ((sum (apply + arguments)))
|
||||||
|
(and (odd? sum) (+ sum 314))))
|
||||||
|
'(315 316 317 318 319 320 321)
|
||||||
|
'(322 323 324 325 326 327 328)
|
||||||
|
'(329 330 331 332 333 334 335)
|
||||||
|
'(336 337 338 339 340 341 342)
|
||||||
|
'(343 345 347 349 350 351 353))
|
||||||
|
)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:failing-at-end-of-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(every (lambda arguments
|
||||||
|
(let ((sum (apply + arguments)))
|
||||||
|
(and (odd? sum) (+ sum 354))))
|
||||||
|
'(355 356 357 358 359 360 361)
|
||||||
|
'(362 363 364 365 366 367 368)
|
||||||
|
'(369 370 371 372 373 374 375)
|
||||||
|
'(376 377 378 379 380 381 382)
|
||||||
|
'(383 385 387 389 391 393 394))
|
||||||
|
)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-several-longer-lists"
|
||||||
|
(assert-equal?
|
||||||
|
(every vector
|
||||||
|
'(Cleghorn Clemons Clermont Cleves Cliffland Climax
|
||||||
|
Clinton)
|
||||||
|
'(Clio Clive Cloverdale Clucas Clutier Clyde Coalville)
|
||||||
|
'(Coburg Coggon Coin Colesburg Colfax Collett Collins)
|
||||||
|
'(Colo Columbia Colwell Commerce Communia Competine
|
||||||
|
Concord)
|
||||||
|
'(Conesville Confidence Cono Conover Conrad Conroy
|
||||||
|
Consol))
|
||||||
|
'#(Clinton Coalville Collins Concord Consol)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"every:in-lists-of-unequal-length"
|
||||||
|
(assert-equal?
|
||||||
|
(every vector
|
||||||
|
'(Conway Cool Cooper Coppock)
|
||||||
|
'(Coralville Corley)
|
||||||
|
'(Cornelia Cornell Corning)
|
||||||
|
'(Correctionville Corwith Corydon Cosgrove Coster
|
||||||
|
Cotter))
|
||||||
|
'#(Cool Corley Cornell Corwith)))
|
||||||
|
|
||||||
|
;;; LIST-INDEX
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-one-null-list"
|
||||||
|
(assert-true
|
||||||
|
(not (list-index (lambda (x) #t) '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-one-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(zero?
|
||||||
|
(list-index (lambda (x) #t) '(Cottonville)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:not-in-one-singleton-list"
|
||||||
|
(assert-true
|
||||||
|
(not (list-index (lambda (x) #f) '(Coulter)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:at-front-of-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(zero?
|
||||||
|
(list-index (lambda (x) #t)
|
||||||
|
'(Covington Craig Cranston Crathorne
|
||||||
|
Crawfordsville)))))
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-middle-of-one-longer-list"
|
||||||
|
(list-index even? '(395 397 399 401 402 403 405))
|
||||||
|
(lambda (result) (= result 4)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:at-end-of-one-longer-list"
|
||||||
|
(assert =
|
||||||
|
(list-index odd? '(406 408 410 412 414 415))
|
||||||
|
5))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:not-in-one-longer-list"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(list-index (lambda (x) #f)
|
||||||
|
'(Crescent Cresco Creston Crocker Crombie)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-several-null-lists"
|
||||||
|
(assert-true
|
||||||
|
(not (list-index (lambda arguments #t) '() '() '() '() '()))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-several-singleton-lists"
|
||||||
|
(assert-true
|
||||||
|
(zero? (list-index (lambda arguments #t)
|
||||||
|
'(Cromwell)
|
||||||
|
'(Croton)
|
||||||
|
'(Cumberland)
|
||||||
|
'(Cumming)
|
||||||
|
'(Curlew)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:not-in-several-singleton-lists"
|
||||||
|
(assert-true
|
||||||
|
(not (list-index (lambda arguments #f)
|
||||||
|
'(Cushing)
|
||||||
|
'(Cylinder)
|
||||||
|
'(Dahlonega)
|
||||||
|
'(Dalby)
|
||||||
|
'(Dale)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:at-front-of-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(zero? (list-index (lambda arguments #t)
|
||||||
|
'(Dallas Dana Danbury Danville Darbyville
|
||||||
|
Davenport Dawson)
|
||||||
|
'(Dayton Daytonville Dean Decorah Dedham Deerfield
|
||||||
|
Defiance)
|
||||||
|
'(Delaware Delhi Delmar Deloit Delphos Delta
|
||||||
|
Denhart)
|
||||||
|
'(Denison Denmark Denova Denver Depew Derby Devon)
|
||||||
|
'(Dewar Dexter Diagonal Dickens Dickieville Dike
|
||||||
|
Dillon)))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:in-middle-of-several-longer-lists"
|
||||||
|
(assert =
|
||||||
|
(list-index (lambda arguments (odd? (apply + arguments)))
|
||||||
|
'(416 417 418 419 420 421 422)
|
||||||
|
'(423 424 425 426 427 428 429)
|
||||||
|
'(430 431 432 433 434 435 436)
|
||||||
|
'(437 438 439 440 441 442 443)
|
||||||
|
'(444 446 448 450 451 452 454))
|
||||||
|
4))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:at-end-of-several-longer-lists"
|
||||||
|
(assert =
|
||||||
|
(list-index (lambda arguments (even? (apply + arguments)))
|
||||||
|
'(455 456 457 458 459 460)
|
||||||
|
'(461 462 463 464 465 466)
|
||||||
|
'(467 468 469 470 471 472)
|
||||||
|
'(473 474 475 476 477 478)
|
||||||
|
'(479 481 483 485 487 488))
|
||||||
|
5))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"list-index:not-in-several-longer-lists"
|
||||||
|
(assert-true
|
||||||
|
(not
|
||||||
|
(list-index (lambda arguments #f)
|
||||||
|
'(Dinsdale Dixon Dodgeville Dolliver Donahue
|
||||||
|
Donnan Donnelley)
|
||||||
|
'(Donnellson Doon Dorchester Doris Douds Dougherty
|
||||||
|
Douglas)
|
||||||
|
'(Doney Dows Drakesville Dresden Dubuque Dudley
|
||||||
|
Dumfries)
|
||||||
|
'(Dumont Dunbar Duncan Duncombe Dundee Dunkerton
|
||||||
|
Dunlap)
|
||||||
|
'(Durango Durant Durham Dutchtown Dyersville
|
||||||
|
Dysart Earlham)))))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
|
||||||
|
;;; search-test.ss ends here
|
341
collects/tests/srfi/1/selector-test.ss
Normal file
341
collects/tests/srfi/1/selector-test.ss
Normal file
|
@ -0,0 +1,341 @@
|
||||||
|
;;;
|
||||||
|
;;; <selector-test.ss> ---- List selector tests
|
||||||
|
;;; Time-stamp: <05/12/16 21:13:25 noel>
|
||||||
|
;;;
|
||||||
|
;;; Copyright (C) 2002 by Noel Welsh.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of SRFI-1.
|
||||||
|
|
||||||
|
;;; SRFI-1 is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
;;; License as published by the Free Software Foundation; either
|
||||||
|
;;; version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;;; SRFI-1 is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with SRFI-1; if not, write to the Free Software
|
||||||
|
;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
;;; Author: Noel Welsh <noelwelsh@yahoo.com>
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; Commentary:
|
||||||
|
|
||||||
|
;; Originally created by:
|
||||||
|
|
||||||
|
;; John David Stone
|
||||||
|
;; Department of Mathematics and Computer Science
|
||||||
|
;; Grinnell College
|
||||||
|
;; stone@math.grin.edu
|
||||||
|
|
||||||
|
(module selector-test
|
||||||
|
mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))
|
||||||
|
(lib "selector.ss" "srfi" "1"))
|
||||||
|
|
||||||
|
(provide selector-tests)
|
||||||
|
|
||||||
|
(define selector-tests
|
||||||
|
(make-test-suite
|
||||||
|
"List selector tests"
|
||||||
|
|
||||||
|
;; FIRST
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"first:of-one"
|
||||||
|
(assert-eq? (first '(hafnium)) 'hafnium))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"first:of-many"
|
||||||
|
(assert-eq? (first '(hahnium helium holmium hydrogen indium))
|
||||||
|
'hahnium))
|
||||||
|
|
||||||
|
;; SECOND
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"second:of-two"
|
||||||
|
(assert-eq? (second '(iodine iridium)) 'iridium))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"second:of-many"
|
||||||
|
(assert-eq? (second '(iron krypton lanthanum lawrencium lead lithium))
|
||||||
|
'krypton))
|
||||||
|
|
||||||
|
;; THIRD
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"third:of-three"
|
||||||
|
(assert-eq? (third '(lutetium magnesium manganese))
|
||||||
|
'manganese))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"third:of-many"
|
||||||
|
(assert-eq? (third '(mendelevium mercury molybdenum neodymium neon
|
||||||
|
neptunium nickel))
|
||||||
|
'molybdenum))
|
||||||
|
|
||||||
|
;; FOURTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fourth:of-four"
|
||||||
|
(assert-eq? (fourth '(niobium nitrogen nobelium osmium))
|
||||||
|
'osmium))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fourth:of-many"
|
||||||
|
(assert-eq? (fourth '(oxygen palladium phosphorus platinum plutonium
|
||||||
|
polonium potassium praseodymium))
|
||||||
|
'platinum))
|
||||||
|
|
||||||
|
;; FIFTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fifth:of-five"
|
||||||
|
(assert-eq? (fifth '(promethium protatctinium radium radon rhenium))
|
||||||
|
'rhenium))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"fifth:of-many"
|
||||||
|
(assert-eq? (fifth '(rhodium rubidium ruthenium rutherfordium samarium
|
||||||
|
scandium selenium silicon silver))
|
||||||
|
'samarium))
|
||||||
|
|
||||||
|
;; SIXTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"sixth:of-six"
|
||||||
|
(assert-eq? (sixth '(sodium strontium sulfur tantalum technetium
|
||||||
|
tellurium))
|
||||||
|
'tellurium))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"sixth:of-many"
|
||||||
|
(assert-eq? (sixth '(terbium thallium thorium thulium tin titanium
|
||||||
|
tungsten uranium vanadium xenon))
|
||||||
|
'titanium))
|
||||||
|
|
||||||
|
;; SEVENTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"seventh:of-seven"
|
||||||
|
(assert-eq? (seventh '(ytterbium yttrium zinc zirconium acacia abele
|
||||||
|
ailanthus))
|
||||||
|
'ailanthus))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"seventh:of-many"
|
||||||
|
(assert-eq? (seventh '(alder allspice almond apple apricot ash aspen
|
||||||
|
avocado balsa balsam banyan))
|
||||||
|
'aspen))
|
||||||
|
|
||||||
|
;; EIGHTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"eighth:of-eight"
|
||||||
|
(assert-eq? (eighth '(basswood bay bayberry beech birch boxwood breadfruit
|
||||||
|
buckeye))
|
||||||
|
'buckeye))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"eighth:of-many"
|
||||||
|
(assert-eq? (eighth '(butternut buttonwood cacao candleberry cashew cassia
|
||||||
|
catalpa cedar cherry chestnut chinaberry
|
||||||
|
chinquapin))
|
||||||
|
'cedar))
|
||||||
|
|
||||||
|
;; NINTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"ninth:of-nine"
|
||||||
|
(assert-eq? (ninth '(cinnamon citron clove coconut cork cottonwood cypress
|
||||||
|
date dogwood))
|
||||||
|
'dogwood))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"ninth:of-many"
|
||||||
|
(assert-eq? (ninth '(ebony elder elm eucalyptus ficus fig fir frankincense
|
||||||
|
ginkgo grapefruit guava gum hawthorn))
|
||||||
|
'ginkgo))
|
||||||
|
|
||||||
|
;; TENTH
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"tenth:of-ten"
|
||||||
|
(assert-eq? (tenth '(hazel hemlock henna hickory holly hornbeam ironwood
|
||||||
|
juniper kumquat laburnum))
|
||||||
|
'laburnum))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"tenth:of-many"
|
||||||
|
(assert-eq? (tenth '(lancewood larch laurel lemon lime linden litchi
|
||||||
|
locust logwood magnolia mahogany mango
|
||||||
|
mangrove maple))
|
||||||
|
'magnolia))
|
||||||
|
|
||||||
|
;; CAR+CDR
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"car+cdr:pair"
|
||||||
|
(let-values (((first second) (car+cdr (cons 'a 'b))))
|
||||||
|
(assert-eq? first 'a)
|
||||||
|
(assert-eq? second 'b)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"car+cdr:list"
|
||||||
|
(let-values (((first second) (car+cdr (list 'a 'b))))
|
||||||
|
(assert-eq? first 'a)
|
||||||
|
(assert-equal? second (list 'b))))
|
||||||
|
|
||||||
|
;; TAKE
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take:all-of-list"
|
||||||
|
(assert-equal? (take '(medlar mimosa mulberry nutmeg oak) 5)
|
||||||
|
'(medlar mimosa mulberry nutmeg oak)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take:front-of-list"
|
||||||
|
(assert-equal? (take '(olive orange osier palm papaw peach pear) 5)
|
||||||
|
'(olive orange osier palm papaw)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take:rear-of-list"
|
||||||
|
(assert-equal?
|
||||||
|
(take-right '(pecan persimmon pine pistachio plane plum pomegranite) 5)
|
||||||
|
'(pine pistachio plane plum pomegranite)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take:none-of-list"
|
||||||
|
(assert-true (null? (take '(poplar quince redwood) 0))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take:empty-list"
|
||||||
|
(assert-true (null? (take '() 0))))
|
||||||
|
|
||||||
|
;; DROP
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop:all-of-list"
|
||||||
|
(assert-true (null? (drop '(rosewood sandalwood sassfras satinwood senna) 5))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop:front-of-list"
|
||||||
|
(assert-equal? (drop '(sequoia serviceberry spruce sycamore tamarack tamarind
|
||||||
|
tamarugo)
|
||||||
|
5)
|
||||||
|
'(tamarind tamarugo)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop:rear-of-list"
|
||||||
|
(assert-equal? (drop-right '(tangerine teak thuja torchwood upas walnut wandoo) 5)
|
||||||
|
'(tangerine teak)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop:none-of-list"
|
||||||
|
(assert-equal? (drop '(whitebeam whitethorn wicopy) 0)
|
||||||
|
'(whitebeam whitethorn wicopy)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop:empty-list"
|
||||||
|
(assert-true (null? (drop '() 0))))
|
||||||
|
|
||||||
|
;; TAKE!
|
||||||
|
|
||||||
|
;; List arguments to linear-update procedures are constructed
|
||||||
|
;; with the LIST procedure rather than as quoted data, since in
|
||||||
|
;; some implementations quoted data are not mutable.
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take!:all-of-list"
|
||||||
|
(assert-equal? (take! (list 'willow 'woollybutt 'wychelm 'yellowwood 'yew) 5)
|
||||||
|
'(willow woollybutt wychelm yellowwood yew)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take!:front-of-list"
|
||||||
|
(assert-equal? (take! (list 'ylang-ylang 'zebrawood 'affenpinscher 'afghan
|
||||||
|
'airedale 'alsatian 'barbet)
|
||||||
|
5)
|
||||||
|
'(ylang-ylang zebrawood affenpinscher afghan airedale)))
|
||||||
|
|
||||||
|
;(test 'take!:rear-of-list
|
||||||
|
; (take! (list 'basenji 'basset 'beagle 'bloodhound 'boarhound
|
||||||
|
; 'borzoi 'boxer)
|
||||||
|
; -5)
|
||||||
|
; (lambda (result)
|
||||||
|
; (equal? result '(beagle bloodhound boarhound borzoi
|
||||||
|
; boxer))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take!:none-of-list"
|
||||||
|
(assert-true (null? (take! (list 'briard 'bulldog 'chihuahua) 0))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"take!:empty-list"
|
||||||
|
(assert-true (null? (take! '() 0))))
|
||||||
|
|
||||||
|
;; DROP-RIGHT!
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop-right!:all-of-list"
|
||||||
|
(assert-true (null? (drop-right! (list 'chow 'collie 'coonhound 'clydesdale 'dachshund)
|
||||||
|
5))))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop-right!:rear-of-list"
|
||||||
|
(assert-equal? (drop-right! (list 'groenendael 'harrier 'hound 'husky 'keeshond
|
||||||
|
'komondor 'kuvasz)
|
||||||
|
5)
|
||||||
|
'(groenendael harrier)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop-right!:none-of-list"
|
||||||
|
(assert-equal? (drop-right! (list 'labrador 'malamute 'malinois) 0)
|
||||||
|
'(labrador malamute malinois)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"drop-right!:empty-list"
|
||||||
|
(assert-true (null? (drop-right! '() 0))))
|
||||||
|
|
||||||
|
;; LAST
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"last:of-singleton"
|
||||||
|
(assert-eq? (last '(maltese))
|
||||||
|
'maltese))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"last:of-longer-list"
|
||||||
|
(assert-eq? (last '(mastiff newfoundland nizinny otterhound papillon))
|
||||||
|
'papillon))
|
||||||
|
|
||||||
|
;; LAST-PAIR
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"last-pair:of-singleton"
|
||||||
|
(let ((pair '(pekingese)))
|
||||||
|
(assert-eq? (last-pair pair)
|
||||||
|
pair)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"last-pair:of-longer-list"
|
||||||
|
(let ((pair '(pointer)))
|
||||||
|
(assert-eq? (last-pair (cons 'pomeranian
|
||||||
|
(cons 'poodle
|
||||||
|
(cons 'pug (cons 'puli pair)))))
|
||||||
|
pair)))
|
||||||
|
|
||||||
|
(make-test-case
|
||||||
|
"last-pair:of-improper-list"
|
||||||
|
(let ((pair '(manx . siamese)))
|
||||||
|
(assert-eq? (last-pair (cons 'abyssinian (cons 'calico pair)))
|
||||||
|
pair)))
|
||||||
|
|
||||||
|
))
|
||||||
|
)
|
||||||
|
|
||||||
|
;;; selector-test.ss ends here
|
24
collects/tests/srfi/all-srfi-tests.ss
Normal file
24
collects/tests/srfi/all-srfi-tests.ss
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
(module all-srfi-tests mzscheme
|
||||||
|
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require "1/all-1-tests.ss"
|
||||||
|
"2/and-let-test.ss"
|
||||||
|
"13/string-test.ss"
|
||||||
|
"14/char-set-test.ss"
|
||||||
|
"26/cut-test.ss"
|
||||||
|
"40/all-srfi-40-tests.ss"
|
||||||
|
"43/all-srfi-43-tests.ss")
|
||||||
|
(provide all-srfi-tests)
|
||||||
|
|
||||||
|
(define all-srfi-tests
|
||||||
|
(make-test-suite
|
||||||
|
"all-srfi-tests"
|
||||||
|
all-1-tests
|
||||||
|
and-let*-tests
|
||||||
|
string-tests
|
||||||
|
char-set-tests
|
||||||
|
cut-tests
|
||||||
|
all-srfi-40-tests
|
||||||
|
all-srfi-43-tests
|
||||||
|
))
|
||||||
|
)
|
5
collects/tests/srfi/run-tests.ss
Normal file
5
collects/tests/srfi/run-tests.ss
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
(require (planet "test.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require (planet "text-ui.ss" ("schematics" "schemeunit.plt" 1 1)))
|
||||||
|
(require "all-srfi-tests.ss")
|
||||||
|
|
||||||
|
(test/text-ui all-srfi-tests)
|
Loading…
Reference in New Issue
Block a user