anchor.diff:    (cl-cuda::with-kernel-arguments (kargs ((x int) (y float3) (a float3*)))
       nil)
     (cffi:with-foreign-objects ((x-ptr :int)
  -                              (y-ptr 'float3))
  +                              (y-ptr '(:struct float3)))
       (setf (cffi:mem-ref x-ptr :int) x)
  -    (setf (cffi:foreign-slot-value y-ptr 'float3 'cl-cuda::x) (float3-x y)
  -          (cffi:foreign-slot-value y-ptr 'float3 'cl-cuda::y) (float3-y y)
  -          (cffi:foreign-slot-value y-ptr 'float3 'cl-cuda::z) (float3-z y))
  +    (setf (cffi:foreign-slot-value y-ptr '(:struct float3) 'cl-cuda::x) (float3-x y)
  +          (cffi:foreign-slot-value y-ptr '(:struct float3) 'cl-cuda::y) (float3-y y)
  +          (cffi:foreign-slot-value y-ptr '(:struct float3) 'cl-cuda::z) (float3-z y))
       (cl-cuda::with-memory-block-device-ptrs ((a-ptr a))
         (cffi:with-foreign-object (kargs :pointer 3)
           (setf (cffi:mem-aref kargs :pointer 0) x-ptr)
  
positive.code: (is       (expand-macro '(+ 1 2))   '(cl-cuda::%add 1 2))
  (is       (expand-macro '(+ 1 2 3)) '(cl-cuda::%add (cl-cuda::%add 1 2) 3))
  (is-error (expand-macro '(-))       simple-error)
  (is       (expand-macro '(- 1))     '(cl-cuda::%sub 0 1))
  (is       (expand-macro '(- 1 2))   '(cl-cuda::%sub 1 2))
  (is       (expand-macro '(- 1 2 3)) '(cl-cuda::%sub (cl-cuda::%sub 1 2) 3))
  (is       (expand-macro '(*))       1)
  
negative.code: ;; test setf-to-foreign-memory-form
  (is (cl-cuda::setf-to-foreign-memory-form '(x int)) '(setf (cffi:mem-ref x-ptr :int) x))
  (is (cl-cuda::setf-to-foreign-memory-form '(x float3))
      '(setf (cffi:foreign-slot-value x-ptr '(:struct float3) 'cl-cuda::x) (float3-x x)
             (cffi:foreign-slot-value x-ptr '(:struct float3) 'cl-cuda::y) (float3-y x)
             (cffi:foreign-slot-value x-ptr '(:struct float3) 'cl-cuda::z) (float3-z x)))
  
  ;; test setf-to-argument-array-form
  (is (cl-cuda::setf-to-argument-array-form 'kargs '(x int) 0)
  