;;; ;;; ---- Test driver for the SRFI-14 port: char-set ;;; Time-stamp: <06/06/09 16:38:25 nhw> ;;; ;;; Copyright (C) 2002 by Francisco Solsona. ;;; ;;; This file is part of PLT SRFI. ;;; PLT SRFI 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. ;;; PLT SRFI 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 PLT SRFI; if not, write to the Free Software ;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ;;; Author: Francisco Solsona ;; ;; ;; Commentary: (module char-set-test mzscheme (require rackunit) (require srfi/14/char-set) (provide char-set-tests) (define char-set-tests (test-suite "Char-Set tests" (test-case "char-set? correct" (check-false (char-set? null)) (check-true (char-set? (char-set #\a #\b #\c)))) (test-case "char-set= equality" (let ((abc (char-set #\a #\b #\c))) (check-true (char-set= abc (char-set #\a #\b #\c))))) (test-case "char-set<= test 1 (strictly less than)" (check-true (char-set<= (char-set #\a #\b #\c) (char-set #\a #\b #\c #\d)))) (test-case "char-set<= test 2 (equal)" (check-true (char-set<= (char-set #\a #\b #\c) (char-set #\a #\b #\c)))) (test-case "Hash invariant (default bound)" (check-eqv? (char-set-hash char-set:ascii) (char-set-hash char-set:ascii))) (test-case "Char set cursor test" (let ((abc (char-set #\a #\b #\c))) (check-equal? (let lp ((cur (char-set-cursor abc)) (ans '())) (if (end-of-char-set? cur) ans (lp (char-set-cursor-next abc cur) (cons (char-set-ref abc cur) ans)))) '(#\c #\b #\a)))) (test-case "char-set-fold test 1 (cs members)" (check-equal? (char-set-fold cons '() (char-set #\a #\b #\c)) '(#\c #\b #\a))) (test-case "char-set-fold test 2 (cs size)" (check-eqv? (char-set-fold (lambda (c i) (+ i 1)) 0 (char-set #\a #\b #\c)) 3)) (test-case "char-set-fold test 3 (how many vowels in cs)" (check-eqv? (char-set-fold (lambda (c i) (if (vowel? c) (+ i 1) i)) 0 (char-set #\a #\b #\c)) 1)) (test-case "char-set-unfold test 1 (string-port->char-set)" (check-equal? ;; FIXME: We haven't see if char-set->string works, and we are using it. (char-set->string ((lambda (sp) (char-set-unfold eof-object? values (lambda (x) (read-char sp)) (read-char sp))) (open-input-string "This is a simple test string to generate a very simple char set!"))) "yvtsrponmlihgecaT! ")) (test-case "char-set-for-each (dummy, really)" (begin (char-set-for-each (lambda (c) (char? c)) (char-set #\a #\b #\c)) (check-true #t))) (test-case "char-set-map test 1 (downcase)" (check-true (char-set= (char-set-map char-downcase (char-set #\A #\b #\C)) (char-set #\a #\b #\c)))) (test-case "char-set-copy (copy constructor)" (check-true (let* ((orig (char-set #\a #\b #\c)) (copy (char-set-copy orig))) (and (char-set= orig copy) (not (char-set= (char-set-difference orig (char-set #\a)) copy)))))) (test-case "list->char-set test 1 (using empty char-set)" (check-true (char-set= (list->char-set '(#\a #\b #\c #\a #\b #\a)) (char-set #\a #\b #\c)))) (test-case "list->char-set test 2 (adding to an existent char-set)" (check-true (let ((c (char-set #\a #\b))) (and (char-set= (list->char-set '(#\a #\b #\c #\a #\b #\a) c) (char-set #\a #\b #\c)) ;; It has to be non-destructive: (char-set= c (char-set #\a #\b)))))) (test-case "list->char-set! (destructive addition)" (let ((c (char-set #\a #\b))) (check char-set= (list->char-set! '(#\a #\b #\c #\a #\b #\a) c) (char-set #\a #\b #\c)))) (test-case "string->char-set test 1 (using empty char-set)" (check-true (char-set= (string->char-set "aaaabbaaccc") (char-set #\a #\b #\c)))) (test-case "string->char-set test 2 (using a non empty char-set)" (check-true (let ((c (char-set #\a #\b))) (and (char-set= (string->char-set "aaabbbaaaccc" c) (char-set #\a #\b #\c)) ;; It has to be non-destructive: (char-set= c (char-set #\a #\b)))))) (test-case "string->char-set! (destructive addition)" (let ((c (char-set #\a #\b))) (check char-set= (string->char-set! "aaabbbaaaccc" c) (char-set #\a #\b #\c)))) (test-case "char-set-filter test 1 (using an empty set)" (check-true (char-set= (char-set-filter vowel? (char-set #\a #\b #\a #\e #\i #\c #\c #\d)) (char-set #\a #\e #\i)))) (test-case "char-set-filter test 2 (using a non empty char-set)" (check-true (let ((c (char-set #\a #\e))) (and (char-set= (char-set-filter vowel? (char-set #\a #\b #\a #\e #\i #\c #\c #\d) c) (char-set #\a #\e #\i)) ;; It has to be non destructive (char-set= c (char-set #\a #\e)))))) (test-case "char-set-filter! test (using a non empty char-set)" (let ((c (char-set #\a #\e))) (check char-set= (char-set-filter! vowel? (char-set #\a #\b #\a #\e #\i #\c #\c #\d) c) (char-set #\a #\e #\i)))) ;; MISSIGN: ;; ucs-range->char-set, ucs-range->char-set! ;; ->char-set (test-case "char-set-size test" (check-true (= (char-set-size (char-set #\a #\b #\c)) 3))) (test-case "char-set-count test" (check-true (= (char-set-count vowel? (char-set #\a #\b #\a #\e #\i #\z)) 3))) (test-case "char-set->list test" (check-true (let ((l (char-set->list (char-set #\a #\b #\c)))) (and (pair? l) (= (length l) 3))))) (test-case "char-set->string test" (check-true (string=? (char-set->string (char-set #\a #\b #\c)) "cba"))) (test-case "char-set-contains? test (if there)" (check-true (char-set-contains? (char-set #\a #\b #\c) #\b))) (test-case "char-set-contains? test (if not there)" (check-true (not (char-set-contains? (char-set #\a #\b #\c) #\z)))) )) (define vowel? (lambda (v) (and (char? v) (or (char=? v #\a) (char=? v #\e) (char=? v #\i) (char=? v #\o) (char=? v #\u))))) ) ;;; char-set-test.rkt ends here