r2885: *** empty log message ***
[uffi.git] / examples / union.cl
index d0d32812ab4661592af50cd81ea940a4ce6d3361..fc14c4a7c251d67b01fff40cb0852a73d269d7e1 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Mar 2002
 ;;;;
-;;;; $Id: union.cl,v 1.3 2002/03/23 16:32:39 kevin Exp $
+;;;; $Id: union.cl,v 1.10 2002/09/29 17:31:20 kevin Exp $
 ;;;;
 ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
   (sf :float)
   (df :double))
 
-(defun test-union-1 ()
+(defun run-union-1 ()
   (let ((u (uffi:allocate-foreign-object 'tunion1)))
-    (setf (uffi:get-slot-value u 'tunion1 'uint) 
-      (+ (char-code #\A) 
+    (setf (uffi:get-slot-value u 'tunion1 'uint)
+      ;; little endian
+      #-(or sparc sparc-v9 powerpc ppc)
+      (+ (* 1 (char-code #\A))
         (* 256 (char-code #\B))
         (* 65536 (char-code #\C))
-        (* 16777216 255)))
+        (* 16777216 128))
+      ;; big endian
+      #+(or sparc sparc-v9 powerpc ppc)
+      (+ (* 16777216 (char-code #\A))
+        (* 65536 (char-code #\B))
+        (* 256 (char-code #\C))
+        (* 1 128)))
     (format *standard-output* "~&Should be #\A: ~S" 
            (uffi:ensure-char-character 
             (uffi:get-slot-value u 'tunion1 'char)))
     (uffi:free-foreign-object u))
   (values))
 
-#+uffi-test
+#+test-uffi
+(defun test-union-1 ()
+  (let ((u (uffi:allocate-foreign-object 'tunion1)))
+    (setf (uffi:get-slot-value u 'tunion1 'uint)
+         #-(or sparc sparc-v9 powerpc ppc)
+         (+ (* 1 (char-code #\A))
+            (* 256 (char-code #\B))
+            (* 65536 (char-code #\C))
+            (* 16777216 128))
+         #+(or sparc sparc-v9 powerpc ppc)
+         (+ (* 16777216 (char-code #\A))
+            (* 65536 (char-code #\B))
+            (* 256 (char-code #\C))
+            (* 1 128))) ;set signed bit
+    (util.test:test (uffi:ensure-char-character 
+               (uffi:get-slot-value u 'tunion1 'char))
+              #\A
+              :test #'eql
+              :fail-info "Error with union character")
+    #-(or sparc sparc-v9 mcl)
+    (util.test:test (> 0 (uffi:get-slot-value u 'tunion1 'int))
+              t
+              :fail-info
+              "Error with negative int in union")
+    (util.test:test (plusp (uffi:get-slot-value u 'tunion1 'uint))
+              t
+              :fail-info
+              "Error with unsigned int in union")
+    (uffi:free-foreign-object u))
+  (values))
+
+#+examples-uffi
+(run-union-1)
+
+
+#+test-uffi
 (test-union-1)