File: complement.lsp

package info (click to toggle)
cl-ansi-tests 20060621-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 6,976 kB
  • ctags: 22,030
  • sloc: lisp: 134,790; makefile: 155
file content (139 lines) | stat: -rw-r--r-- 3,683 bytes parent folder | download | duplicates (6)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Sun Oct  6 20:04:33 2002
;;;; Contains: Tests for COMPLEMENT

(in-package :cl-test)

(deftest complement.1
  (notnot-mv (funcall (complement #'identity) nil))
  t)

(deftest complement.2
  (funcall (complement #'identity) t)
  nil)

(deftest complement.3
  (check-predicate
   #'(lambda (x) (eql (funcall (cl::complement #'not) x)
		      (not (not x)))))
  nil)

(deftest complement.4
  (let ((x '(#\b)))
    (loop for i from 2 to (min 256 (1- call-arguments-limit))
	  always (progn
		   (push #\a x)
		   (apply (complement #'char=) x))))
  t)

(deftest complement.5
  (notnot-mv (complement #'identity))
  t)

(deftest complement.6
  (flet ((%f (&rest args) (notnot (evenp (length args)))))
    (let ((cf (complement #'%f)))
      (values
       (%f) (%f 'a) (%f 'a 'b) (%f 'a 'b 'c)
       (funcall cf) (funcall cf 'a) (funcall cf 'a 'b) (funcall cf 'a 'b 'c))))
  t nil t nil
  nil t nil t)

(deftest complement.7
  (flet ((%f (&optional x y) (if x (not y) y)))
    (let ((cf (complement #'%f)))
      (values
       (%f) (%f nil) (%f t) (%f nil nil) (%f t nil) (%f nil t) (%f t t)
       (funcall cf) (funcall cf nil) (funcall cf t)
       (funcall cf nil nil) (funcall cf t nil)
       (funcall cf nil t) (funcall cf t t))))
  nil nil t nil t t nil
  t t nil t nil nil t)

(deftest complement.8
  (flet ((%f (&key x y) (if x (not y) y)))
    (let ((cf (complement #'%f)))
      (values
       (list
       (%f)
       (%f :x nil) (%f :x t)
       (%f :y nil) (%f :y t :y nil)
       (%f :x nil :y nil) (%f :x t :y nil)
       (%f :y t :x nil) (%f :x t :y t))
      
       (list
	(funcall cf) (funcall cf :x nil) (funcall cf :x t)
	(funcall cf :y nil) (funcall cf :y t)
	(funcall cf :x nil :y nil) (funcall cf :x t :y nil)
	(funcall cf :y t :x nil) (funcall cf :x t :y t :x nil))
       (list
	(funcall cf :x nil :y t :foo nil :allow-other-keys t)
	(funcall cf :x nil :y t :allow-other-keys nil)))))
  (nil nil t nil t nil t t nil)
  (t t nil t nil t nil nil t)
  (nil nil))

(deftest complement.9
  (let ((sym (gensym)))
    (eval `(defgeneric ,sym (x y)))
    (eval `(defmethod ,sym ((x integer) (y integer)) (evenp (+ x y))))
    (eval `(defmethod ,sym ((x t) (y t)) nil))
    (let ((cf (complement (symbol-function sym))))
      (values (funcall cf 'a 'b)
	      (funcall cf 0 0)
	      (funcall cf 0 1)
	      (funcall cf 1 0)
	      (funcall cf 1 1))))
  t nil t t nil)

(deftest complement.10
  (let ((cf (complement (compile nil '(lambda (x y) (evenp (+ x y)))))))
    (values (funcall cf 0 0)
	    (funcall cf 0 1)
	    (funcall cf 1 0)
	    (funcall cf 1 1)))
  nil t t nil)    

(deftest complement.order.1
  (let ((i 0))
    (let ((fn (complement (progn (incf i) #'null))))
      (values
       i
       (mapcar fn '(a b nil c 1 nil t nil))
       i)))
  1 (t t nil t t nil t nil) 1)

;;; Error tests

(deftest complement.error.1
  (signals-error (complement) program-error)
  t)

(deftest complement.error.2
  (signals-error (complement #'not t) program-error)
  t)

(deftest complement.error.3
  (signals-error (funcall (complement #'identity))
		 program-error)
  t)

(deftest complement.error.4
  (signals-error (funcall (complement #'identity) t t)
		 program-error)
  t)

(deftest complement.error.5
  (signals-error (funcall (complement #'(lambda (&key) t)) :foo t) program-error)
  t)

(deftest complement.error.6
  (signals-error (funcall (complement #'(lambda (&key) t)) :allow-other-keys nil
			  :allow-other-keys t :foo t) program-error)
  t)

(deftest complement.error.7
  (signals-error (funcall (complement #'(lambda (x &rest y) (and x (evenp (length y))))))
		 program-error)
  t)