Coverage report: /home/runner/work/geb/geb/src/vampir/spec.lisp
Kind | Covered | All | % |
expression | 35 | 65 | 53.8 |
branch | 2 | 4 | 50.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
(in-package :geb.vampir.spec)
3
;; Here we use the language of vampir to talk about the components
6
;; https://github.com/heliaxdev/ark-plonk/blob/plonk-ir/plonk-ir/src/plonk_ir.pest
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9
;; Sum Type Declarations
10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12
;; please remove these geb types later
15
`(or alias pub constraint))
17
(deftype constraint ()
18
`(or application bind equality expression
19
geb.extension.spec:common-sub-expression))
21
;; called base in the file
22
;; Values are called over a normal form!?!?!?
23
(deftype expression ()
24
`(or infix application normal-form tuple curly
25
geb.extension.spec:common-sub-expression))
27
(deftype normal-form ()
28
`(or wire constant brackets))
31
`(or (eql :+) (eql :-) (eql :*) (eql :^) (eql :\\)
32
(eql :%) (eql :/) (eql :|:|) (eql :^) (eql :\|)))
34
(deftype constraint-list ()
35
`(satisfies constraint-list))
37
(deftype normal-form-list ()
38
`(satisfies normal-form-list))
40
(defun constraint-list (list)
42
(every (lambda (x) (typep x 'constraint)) list)))
44
(defun normal-form-list (list)
46
(every (lambda (x) (typep x 'normal-form)) list)))
48
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49
;; Statement Product Types
50
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
52
(defclass mixins (geb.mixins:direct-pointwise-mixin) ())
55
(defclass alias (mixins)
57
:type (or symbol keyword)
59
:documentation "Name of the alias gate")
60
(inputs :initarg :inputs
63
:documentation "the arguments to the circuit")
64
;; we should move this to an expression instead
65
;; See Issue #38 comment 1 on why.
66
;; (outputs :initarg :outputs
69
;; :documentation "The return wires of the circuit")
70
;; TODO :: layout types
73
:type constraint-list))
74
(:documentation "An alias gate in vamp-ir"))
76
(defclass pub (mixins)
77
((wires :initarg :wires
81
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82
;; Expression Product Types
83
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
85
(defclass infix (mixins)
89
:documentation "the alias we are calling")
93
:documentation "the argument to the left of the op")
97
:documentation "the argument to the right of the op")))
99
(defclass application (mixins)
100
((func :initarg :func
102
:type (or symbol keyword)
103
:documentation "the alias we are calling")
104
(arguments :initarg :arguments
105
;; I assume list of expressions?
108
:documentation "The arguments in which the gate is called upon")))
110
(defclass bind (mixins)
111
((names :initarg :names
113
:type normal-form-list)
114
(value :initarg :value
116
;; can't be a constant however!
119
(defclass equality (mixins)
123
:documentation "the argument to the left of the =")
127
:documentation "the argument to the rigth of the =")))
129
(defclass tuple (mixins)
130
((wires :initarg :wires
134
(defclass curly (mixins)
135
((value :initarg :value
138
:documentation "The wire argument inside the curly bracket")))
140
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
141
;; Normal Form Product Types
142
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
144
(defclass wire (mixins)
147
(:documentation "A reference in vamp-ir"))
149
(defclass constant (mixins)
150
((const :initarg :const
153
(defclass brackets (mixins)
155
(:documentation "Brackets designating 0-bit integer"))
157
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
159
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
161
(serapeum:-> make-alias
162
(&key (:name (or symbol keyword)) (:inputs list) (:body constraint-list))
164
(defun make-alias (&key name inputs body)
166
(make-instance 'alias :name name :inputs inputs :body body)))
168
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
170
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172
(defun make-pub (&key wires)
173
(make-instance 'pub :wires wires))
175
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
179
(defun make-infix (&key lhs op rhs)
180
(make-instance 'infix :lhs lhs :op op :rhs rhs))
182
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
184
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
186
(defun make-application (&key func arguments)
187
(make-instance 'application :func func :arguments arguments))
189
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
191
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
193
(defun make-bind (&key names value)
194
(make-instance 'bind :names names :value value))
196
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
198
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
200
(defun make-equality (&key lhs rhs)
201
(make-instance 'equality :lhs lhs :rhs rhs))
203
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
205
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
207
(defun make-wire (&key var)
208
(make-instance 'wire :var var))
210
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
212
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214
(defun make-constant (&key const)
215
(make-instance 'constant :const const))
217
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
219
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
221
(defun make-tuples (&key wires)
222
(make-instance 'tuple :wires wires))
224
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
226
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
228
(defun make-curly (&key value)
229
(make-instance 'curly :value value))
231
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
233
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
235
(defun make-brackets ()
236
(make-instance 'brackets))