(is (= 2 (add-2 0)))
(is (= 0 (add-2 -2)))
(is (= 0 (add-2 0))))
+
+;; Finally let's try out the specification based testing.
+
+(defun dummy-add (a b)
+ (+ a b))
+
+(defun dummy-strcat (a b)
+ (concatenate 'string a b))
+
+(test dummy-add
+ (for-all ((a (gen-integer))
+ (b (gen-integer)))
+ ;; assuming we have an "oracle" to compare our function results to
+ ;; we can use it:
+ (is (= (+ a b) (dummy-add a b)))
+ ;; if we don't have an oracle (as in most cases) we just ensure
+ ;; that certain properties hold:
+ (is (= (dummy-add a b)
+ (dummy-add b a)))
+ (is (= a (dummy-add a 0)))
+ (is (= 0 (dummy-add a (- a))))
+ (is (< a (dummy-add a 1)))
+ (is (= (* 2 a) (dummy-add a a)))))
+
+(test dummy-strcat
+ (for-all ((result (gen-string))
+ (split-point (gen-integer :min 0 :max 80)
+ (< split-point (length result))))
+ (is (string= result (dummy-strcat (subseq result 0 split-point)
+ (subseq result split-point))))))
+
+(5am:run! 'dummy-strcat)
\ No newline at end of file