X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=tests%2Funion.lisp;h=f1f6b781e854af90fbc1178cbfe75d7d425164c8;hb=HEAD;hp=5b22be2cdfa0e03615363c26327ab69bd874f5a6;hpb=603822b8bfea96aa4ee6bccec88fb372d84dcc30;p=uffi.git diff --git a/tests/union.lisp b/tests/union.lisp index 5b22be2..f1f6b78 100644 --- a/tests/union.lisp +++ b/tests/union.lisp @@ -2,88 +2,72 @@ ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; -;;;; Name: union.cl +;;;; Name: union.lisp ;;;; Purpose: UFFI Example file to test unions ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Mar 2002 ;;;; -;;;; $Id: union.lisp,v 1.2 2002/12/03 06:58:39 kevin Exp $ +;;;; This file, part of UFFI, is Copyright (c) 2002-2010 by Kevin M. Rosenberg ;;;; -;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg -;;;; -;;;; UFFI users are granted the rights to distribute and use this software -;;;; as governed by the terms of the Lisp Lesser GNU Public License -;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* -(in-package :cl-user) +(in-package #:uffi-tests) -(uffi:def-union tunion1 +(uffi:def-union tunion1 (char :char) (int :int) (uint :unsigned-int) (sf :float) (df :double)) -(defun run-union-1 () - (let ((u (uffi:allocate-foreign-object 'tunion1))) - (setf (uffi:get-slot-value u 'tunion1 'uint) - ;; little endian - #-(or sparc sparc-v9 powerpc ppc little-endian) +(defvar *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 255)) - ;; big endian - #+(or sparc sparc-v9 powerpc ppc big-endian) + (* 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 255))) - (format *standard-output* "~&Should be #\A: ~S" - (uffi:ensure-char-character - (uffi:get-slot-value u 'tunion1 'char))) -;; (format *standard-output* "~&Should be negative number: ~D" -;; (uffi:get-slot-value u 'tunion1 'int)) - (format *standard-output* "~&Should be positive number: ~D" - (uffi:get-slot-value u 'tunion1 'uint)) - (uffi:free-foreign-object u)) - (values)) + (* 65536 (char-code #\B)) + (* 256 (char-code #\C)) + (* 1 128))) + +(deftest :union.1 + (uffi:ensure-char-character + (uffi:get-slot-value *u* 'tunion1 'char)) + #\A) + +(deftest :union.2 + (uffi:ensure-char-integer + (uffi:get-slot-value *u* 'tunion1 'char)) + 65) + +#-(or sparc sparc-v9 openmcl digitool) +(deftest :union.3 (plusp (uffi:get-slot-value *u* 'tunion1 'uint)) t) + + +#-openmcl +(uffi:def-union foo-u + (bar :pointer-self)) + +#-openmcl +(uffi:def-foreign-type foo-u-ptr (* foo-u)) + +;; tests that compilation worked +#-openmcl +(deftest :unions.4 + (with-foreign-object (p 'foo-u) + t) + t) + +#-openmcl +(deftest :unions.5 + (progn + (uffi:def-foreign-type foo-union (:union foo-u)) + t) + t) -#+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)