1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
5 ;;;; Name: c-test-fns.cl
6 ;;;; Purpose: UFFI Example file for zlib compression
7 ;;;; Programmer: Kevin M. Rosenberg
8 ;;;; Date Started: Mar 2002
12 ;;;; This file, part of UFFI, is Copyright (c) 2002-2005 by Kevin M. Rosenberg
14 ;;;; *************************************************************************
18 (unless (uffi:load-foreign-library
19 (uffi:find-foreign-library "c-test-fns"
20 (list *load-truename* "/home/kevin/debian/src/uffi/examples/"))
21 :supporting-libraries '("c"))
22 (warn "Unable to load c-test-fns library"))
24 (uffi:def-function ("cs_to_upper" cs-to-upper)
25 ((input (* :unsigned-char)))
29 (defun string-to-upper (str)
30 (uffi:with-foreign-string (str-foreign str)
31 (cs-to-upper str-foreign)
32 (uffi:convert-from-foreign-string str-foreign)))
34 (uffi:def-function ("cs_count_upper" cs-count-upper)
39 (defun string-count-upper (str)
40 (uffi:with-cstring (str-cstring str)
41 (cs-count-upper str-cstring)))
43 (uffi:def-function ("half_double_vector" half-double-vector)
48 (uffi:def-constant +double-vec-length+ 10)
49 (defun test-half-double-vector ()
50 (let ((vec (uffi:allocate-foreign-object :double +double-vec-length+))
52 (dotimes (i +double-vec-length+)
53 (setf (uffi:deref-array vec '(:array :double) i)
54 (coerce i 'double-float)))
55 (half-double-vector +double-vec-length+ vec)
56 (dotimes (i +double-vec-length+)
57 (push (uffi:deref-array vec '(:array :double) i) results))
58 (uffi:free-foreign-object vec)
62 (let ((vec (make-array +double-vec-length+ :element-type 'double-float)))
63 (dotimes (i +double-vec-length+)
64 (setf (aref vec i) (coerce i 'double-float)))
65 (half-double-vector +double-vec-length+ vec)
70 (let ((vec (make-array +double-vec-length+ :element-type 'double-float)))
71 (dotimes (i +double-vec-length+)
72 (setf (aref vec i) (coerce i 'double-float)))
74 (half-double-vector +double-vec-length+ (system:vector-sap vec)))
78 (format t "~&(string-to-upper \"this is a test\") => ~A"
79 (string-to-upper "this is a test"))
82 (format t "~&(string-to-upper nil) => ~A"
83 (string-to-upper nil))
86 (format t "~&(string-count-upper \"This is a Test\") => ~A"
87 (string-count-upper "This is a Test"))
90 (format t "~&(string-count-upper nil) => ~A"
91 (string-count-upper nil))
94 (format t "~&Half vector: ~S" (test-half-double-vector))
100 (util.test:test (string= (string-to-upper "this is a test") "THIS IS A TEST")
103 :fail-info "Error with string-to-upper")
104 (util.test:test (string-to-upper nil) nil
105 :fail-info "string-to-upper with nil failed")
106 (util.test:test (string-count-upper "This is a Test")
109 :fail-info "Error with string-count-upper")
110 (util.test:test (string-count-upper nil) -1
112 :fail-info "string-count-upper with nil failed")
114 (util.test:test (test-half-double-vector)
115 '(0.0d0 0.5d0 1.0d0 1.5d0 2.0d0 2.5d0 3.0d0 3.5d0 4.0d0 4.5d0)
117 :fail-info "Error comparing half-double-vector")