File: classes.lisp

package info (click to toggle)
cl-metabang-bind 20230508.git0819642-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 244 kB
  • sloc: lisp: 1,607; makefile: 2
file content (91 lines) | stat: -rw-r--r-- 2,587 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
(in-package #:metabang-bind-test)

(defclass metabang-bind-class-1 ()
  ((a :initarg :a :accessor a)
   (b :initarg :b :accessor b) 
   (c :initarg :c :accessor c)))

(defclass metabang-bind-class-2 (metabang-bind-class-1)
  ((d :initarg :d :accessor the-d)
   (e :initarg :e :accessor e)))

(deftestsuite test-classes (metabang-bind-test)
  ())

(addtest (test-classes)
  basic-slots
  (ensure-same
   (bind (((:slots-read-only a c)
	   (make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
     (list a c))
   '(1 3) :test 'equal))

(addtest (test-classes)
  slots-new-variable-names
  (ensure-same
   (bind (((:slots-read-only a (my-c c) (the-b b))
	   (make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
     (list a the-b my-c))
   '(1 2 3) :test 'equal))

(addtest (test-classes)
  writable-slots
  (ensure-same
   (bind ((instance (make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3))
	  ((:slots a (my-c c) (the-b b)) instance))
     (setf a :changed)
     (list (slot-value instance 'a) the-b my-c))
   '(:changed 2 3) :test 'equal))

(addtest (test-classes)
  slots-r/o-1
  (ensure-same
   (bind (((:slots-r/o a c)
	   (make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
     (list a c))
   '(1 3) :test 'equal))

(addtest (test-classes)
  basic-accessors-r/o-1
  (ensure-same
   (bind (((:accessors-read-only a c e)
	   (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5)))
     (list e c a))
   '(5 3 1) :test 'equal))

(addtest (test-classes)
  basic-accessors-r/o-2
  (bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
	 ((:accessors-read-only a c e) obj))
    (setf a :a c :c)
    (ensure-same (list a c e) '(:a :c 5) :test 'equal)
    (ensure-same
     (list (e obj) (c obj) (a obj))
    '(5 3 1) :test 'equal)))

(addtest (test-classes)
  accessors-new-variable-names-r/o
  (ensure-same
   (bind (((:accessors-r/o (my-a a) (my-c c) (d the-d))
	   (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5)))
     (list d my-c my-a))
   '(4 3 1) :test 'equal))

(addtest (test-classes)
  basic-accessors-1
  (ensure-same
   (bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
	  ((:accessors a c e) obj))
     (setf a :a c :c)
     (list (e obj) (c obj) (a obj)))
   '(5 :c :a) :test 'equal))

(addtest (test-classes)
  accessors-new-variable-names
  (ensure-same
   (bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
	  ((:writable-accessors (my-a a) (my-c c) (d the-d))
	   obj))
     (setf my-a 42)
     (list d my-c my-a (a obj)))
   '(4 3 42 42) :test 'equal))