association-test.lisp 5.76 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
;;;; -*- mode:lisp;coding:utf-8 -*-
;;;;**************************************************************************
;;;;FILE:               association-test.lisp
;;;;LANGUAGE:           Common-Lisp
;;;;SYSTEM:             Common-Lisp
;;;;USER-INTERFACE:     NONE
;;;;DESCRIPTION
;;;;    
;;;;    Tests the associations.
;;;;    
;;;;AUTHORS
;;;;    <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
;;;;MODIFICATIONS
;;;;    2015-02-22 <PJB> Extracted from association.lisp.
;;;;BUGS
;;;;LEGAL
;;;;    AGPL3
;;;;    
;;;;    Copyright Pascal J. Bourguignon 2015 - 2015
;;;;    
;;;;    This program is free software: you can redistribute it and/or modify
;;;;    it under the terms of the GNU Affero General Public License as published by
;;;;    the Free Software Foundation, either version 3 of the License, or
;;;;    (at your option) any later version.
;;;;    
;;;;    This program 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 Affero General Public License for more details.
;;;;    
;;;;    You should have received a copy of the GNU Affero General Public License
;;;;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
;;;;**************************************************************************

(defpackage "COM.INFORMATIMAGO.CLEXT.ASSOCIATION.TEST"
  (:use "COMMON-LISP"
        "COM.INFORMATIMAGO.CLEXT.ASSOCIATION"
        "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.SIMPLE-TEST")
  (:import-from "COM.INFORMATIMAGO.CLEXT.ASSOCIATION"
                "ADD-NEW-ELEMENT" "MULTIPLICITY")
  (:export "TEST/ALL"
           "TEST/ADD-NEW-ELEMENT" "TEST/MULTIPLICITY"))
(in-package "COM.INFORMATIMAGO.CLEXT.ASSOCIATION.TEST")


(define-test test/add-new-element ()
  (assert-true (equal '(x) (add-new-element nil 'x)))
  (assert-true (equal '(x) (add-new-element nil 'x :test (function equal))))
  (assert-true (equal '(x) (add-new-element nil 'x :lessp (function string<))))
  (assert-true (equal '(x) (add-new-element (list 'x) 'x)))
  (assert-true (equal '(x) (add-new-element (list 'x) 'x :test (function equal))))
  (assert-true (equal '(x) (add-new-element (list 'x) 'x :lessp (function string<))))
  (progn (let* ((list (list 1 2 3))
                (result (add-new-element list 0 :test #'=)))
           (assert-true (equal result '(1 2 3 0)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3)) (result (add-new-element list 0)))
           (assert-true (equal result '(1 2 3 0)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3))
                (result (add-new-element list 4 :lessp #'<)))
           (assert-true (equal result '(1 2 3 4)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3))
                (result (add-new-element list 1 :lessp #'<)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3)) (result (add-new-element list 1)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3))
                (result (add-new-element list 1.0 :test #'=)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3)) (result (add-new-element list 2)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3))
                (result (add-new-element list 2.0 :test #'=)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3)) (result (add-new-element list 3)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 3))
                (result (add-new-element list 3.0 :test #'=)))
           (assert-true (equal result '(1 2 3)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 4))
                (result (add-new-element list 3 :lessp #'<)))
           (assert-true (equal result '(1 2 3 4)))
           (assert-true (eql result list)))
         (let* ((list (list 1 2 4))
                (result (add-new-element list 2 :lessp #'<)))
           (assert-true (equal result '(1 2 4)))
           (assert-true (eql result list)))
         (let* ((list (list 1 3 4))
                (result (add-new-element list 2 :lessp #'<)))
           (assert-true (equal result '(1 2 3 4)))
           (assert-true (eql result list)))
         (let* ((list (list 1 3 4))
                (result (add-new-element list 3 :lessp #'<)))
           (assert-true (equal result '(1 3 4)))
           (assert-true (eql result list))))  
  (let ((list (list 2 3 4)))
    (assert-true (equal '(1 2 3 4) (add-new-element list 1 :lessp (function <)))))
  (let ((list (list 2 3 4)))
108
    (assert-true (equal '(1 2 3 4) (add-new-element list 1 :lessp (function <))))))
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123


(defun test/multiplicity ()
  (assert-true (equal (mapcar (lambda (test) (multiple-value-list (multiplicity test)))
                              '(0    1    2    3
                                0-1  1-1  0-4  2-4
                                *    0-*  1-*  4-* ; 34-2
                                0..1 1..1 0..4 2..4
                                *    0..* 1..* 4..* ; 34..2
                                ))
                      '((0 0) (1 1) (2 2) (3 3)
                        (0 1) (1 1) (0 4) (2 4)
                        (0 *) (0 *) (1 *) (4 *) ; (34 2)
                        (0 1) (1 1) (0 4) (2 4)
                        (0 *) (0 *) (1 *) (4 *) ; (34 2)
124
                        ))))
125 126 127 128 129 130 131 132 133


(define-test test/all ()
  (test/add-new-element)
  (test/multiplicity))

;;;; THE END ;;;;