anchor.diff:  (is (cl-cuda::type-of-expression 'cl-cuda::thread-idx-y nil nil) 'int)
   (is (cl-cuda::type-of-expression 'cl-cuda::thread-idx-z nil nil) 'int)
   
  -
  -;;; test compile-identifier
  -
  -(diag "test compile-identifier")
  -
  -(is (cl-cuda::compile-identifier 'x) "x")
  -(is (cl-cuda::compile-identifier 'vec-add-kernel) "vec_add_kernel")
  -(is (cl-cuda::compile-identifier 'VecAdd_kernel) "vecadd_kernel")
  -
  -
  -;;; test compile-variable-reference
  -
  -(diag "test compile-variable-reference")
  -
  -(is (cl-cuda::variable-reference-p 'x) t)
  -(is (cl-cuda::variable-reference-p 1) nil)
  -(is (cl-cuda::variable-reference-p '(aref x)) t)
  -(is (cl-cuda::variable-reference-p '(aref x i)) t)
  -(is (cl-cuda::variable-reference-p '(aref x i i)) t)
  -(is (cl-cuda::variable-reference-p '(aref x i i i)) t)
  -(is (cl-cuda::variable-reference-p '(float3-x x)) t)
  -(is (cl-cuda::variable-reference-p '(float3-y x)) t)
  -(is (cl-cuda::variable-reference-p '(float3-z x)) t)
  -
  -(is-error (cl-cuda::compile-variable-reference 'x nil nil) simple-error)
  -
  -(let ((type-env (cl-cuda::add-type-environment
  -                  'x 'int (cl-cuda::empty-type-environment))))
  -  (is (cl-cuda::compile-variable-reference 'x type-env nil) "x")
  -  (is-error (cl-cuda::compile-variable-reference '(aref x) type-env nil)
  -            simple-error)
  -  (is-error (cl-cuda::compile-variable-reference '(aref x 0) type-env nil)
  -            simple-error))
  -
  -(let ((type-env (cl-cuda::add-type-environment
  -                  'x 'int* (cl-cuda::empty-type-environment))))
  -  (is-error (cl-cuda::compile-variable-reference 'x type-env nil) simple-error)
  -  (is (cl-cuda::compile-variable-reference '(aref x 0) type-env nil) "x[0]")
  -  (is-error (cl-cuda::compile-variable-reference '(aref x 0 0) type-env nil)
  -            simple-error))
  -
  -(let ((type-env (cl-cuda::add-type-environment
  -                  'x 'int** (cl-cuda::empty-type-environment))))
  -  (is-error (cl-cuda::compile-variable-reference 'x type-env nil) simple-error)
  -  (is-error (cl-cuda::compile-variable-reference '(aref x 0) type-env nil)
  -            simple-error)
  -  (is (cl-cuda::compile-variable-reference '(aref x 0 0) type-env nil)
  -      "x[0][0]"))
  -
  -(let ((type-env (cl-cuda::add-type-environment
  -                  'x 'float3 (cl-cuda::empty-type-environment))))
  -  (is (cl-cuda::compile-variable-reference '(float3-x x) type-env nil) "x.x")
  -  (is (cl-cuda::compile-variable-reference '(float3-y x) type-env nil) "x.y")
  -  (is (cl-cuda::compile-variable-reference '(float3-z x) type-env nil) "x.z"))
  -
   (is-error (cl-cuda::type-of-variable-reference 'x nil) simple-error)
   
   (let ((type-env (cl-cuda::add-type-environment
  
positive.code:             simple-error))
  
  
  ;;; test built-in arithmetic functions
  
  (diag "test built-in arithmetic functions")
  
negative.code:           simple-error)
  (is-error (cl-cuda::arithmetic-function-return-type 'foo '() nil nil)
            simple-error)
  
  
  ;;; test compile-identifier
  
  (diag "test compile-identifier")
  
  (is (cl-cuda::compile-identifier 'x) "x")
  (is (cl-cuda::compile-identifier 'vec-add-kernel) "vec_add_kernel")
  (is (cl-cuda::compile-identifier 'VecAdd_kernel) "vecadd_kernel")
  
  
  ;;; test type-of-expression
  