git.fiddlerwoaroof.com
Raw Blame History
(in-package :patmatch/test)

(define-test let-pat*)

(define-test let-pat*-handles-cons
  :parent let-pat*
  (is = 2 (let-pat* (((cons a b) '(2 . 3)))
            (declare (ignore b))
            a))

  (is = 3 (let-pat* (((cons a b) '(2 . 3)))
            (declare (ignore a))
            b)))

(define-test let-pat*-handles-vector
  :parent let-pat*
  (is = 2 (let-pat* (((vector a b) #(2 3)))
            (declare (ignore b))
            a))
  (is = 3 (let-pat* (((vector a b) #(2 3)))
            (declare (ignore a))
            b)))

(define-test let-pat*-handles-hash-table
  :parent let-pat*
  (is = 2 (let-pat* (((hash-table (:a a) (:b b)) (alexandria:plist-hash-table '(:a 2 :b 3))))
            (declare (ignore b))
            a))

  (is = 3 (let-pat* (((hash-table (:a a) (:b b)) (alexandria:plist-hash-table '(:a 2 :b 3))))
            (declare (ignore a))
            b)))


(define-test let-pat*-handles-object-destructuring
  :parent let-pat*
  (is = 1 (let-pat* (((test-base :a a) (make-instance 'test-base)))
            a)))

(define-test let-pat*-handles-inheritance
  :parent let-pat*
  (is = 1 (let-pat* (((test-base :a a) (make-instance 'test-sub1)))
            a))

  (is = 1 (let-pat* (((test-sub1 :a a) (make-instance 'test-sub1)))
            a))

  (is = 1 (let-pat* (((test-sub2 :a a) (make-instance 'test-sub2)))
            a))

  (is equal '(1 2) (let-pat* (((test-sub2 :a a :b b) (make-instance 'test-sub2)))
                     (list a b))))