Remove old CVS $Id$ keyword
[uffi.git] / tests / time.lisp
index 0dd1816d22aa6881c6acfacaacec8b190ba20eab..16a0066d02b3a27107b5af05046dfc84ba767b53 100644 (file)
@@ -7,16 +7,11 @@
 ;;;; Author:        Kevin M. Rosenberg
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: time.lisp,v 1.1 2003/04/30 14:06:14 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 :uffi-tests)
+(in-package #:uffi-tests)
 
 (uffi:def-foreign-type time-t :unsigned-long)
 
   (year :int)
   (wday :int)
   (yday :int)
-  (isdst :int))
+  (isdst :int)
+  ;; gmoffset present on SusE SLES9
+  (gmoffset :long))
 
-(uffi:def-function ("time" c-time) 
+(uffi:def-function ("time" c-time)
     ((time (* time-t)))
   :returning time-t)
 
-(uffi:def-function ("gmtime" c-gmtime)
+(uffi:def-function "gmtime"
     ((time (* time-t)))
-  :returning (* tm))
+  :returning (:struct-pointer tm))
+
+(uffi:def-function "asctime"
+    ((time (:struct-pointer tm)))
+  :returning :cstring)
 
 (uffi:def-type time-t :unsigned-long)
-(uffi:def-type tm-pointer (* tm))
+(uffi:def-type tm-pointer (:struct-pointer tm))
 
-(deftest time.1
+(deftest :time.1
    (uffi:with-foreign-object (time 'time-t)
      (setf (uffi:deref-pointer time :unsigned-long) 7381)
      (uffi:deref-pointer time :unsigned-long))
   7381)
 
-(deftest time.2
-   (uffi:with-foreign-object (time 'time-t)
-     (setf (uffi:deref-pointer time :unsigned-long) 7381)
-     (let ((tm-ptr (the tm-pointer (c-gmtime time))))
-       (values (1+ (uffi:get-slot-value tm-ptr 'tm 'mon))
-              (uffi:get-slot-value tm-ptr 'tm 'mday)
-              (+ 1900 (uffi:get-slot-value tm-ptr 'tm 'year))
-              (uffi:get-slot-value tm-ptr 'tm 'hour)
-              (uffi:get-slot-value tm-ptr 'tm 'min)
-              (uffi:get-slot-value tm-ptr 'tm 'sec)
-              )))
+(deftest :time.2
+  (uffi:with-foreign-object (time 'time-t)
+    (setf (uffi:deref-pointer time :unsigned-long) 7381)
+    (let ((tm-ptr (the tm-pointer (gmtime time))))
+      (values (1+ (uffi:get-slot-value tm-ptr 'tm 'mon))
+              (uffi:get-slot-value tm-ptr 'tm 'mday)
+              (+ 1900 (uffi:get-slot-value tm-ptr 'tm 'year))
+              (uffi:get-slot-value tm-ptr 'tm 'hour)
+              (uffi:get-slot-value tm-ptr 'tm 'min)
+              (uffi:get-slot-value tm-ptr 'tm 'sec)
+              )))
   1 1 1970 2 3 1)
 
 
-                   
+(uffi:def-struct timeval
+    (secs :long)
+  (usecs :long))
+
+(uffi:def-struct timezone
+    (minutes-west :int)
+  (dsttime :int))
+
+(uffi:def-function ("gettimeofday" c-gettimeofday)
+    ((tv (* timeval))
+     (tz (* timezone)))
+  :returning :int)
+
+(defun get-utime ()
+  (uffi:with-foreign-object (tv 'timeval)
+    (let ((res (c-gettimeofday tv (uffi:make-null-pointer 'timezone))))
+      (values
+       (+ (* 1000000 (uffi:get-slot-value tv 'timeval 'secs))
+          (uffi:get-slot-value tv 'timeval 'usecs))
+       res))))
 
+(deftest :timeofday.1
+    (multiple-value-bind (t1 res1) (get-utime)
+      (multiple-value-bind (t2 res2) (get-utime)
+        (and (or (= t2 t1) (> t2 t1))
+             (> t1 1000000000)
+             (> t2 1000000000)
+             (zerop res1)
+             (zerop res2))))
+  t)
 
+(defun posix-time-to-asctime (secs)
+  "Converts number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)"
+  (string-right-trim
+   '(#\newline #\return)
+   (uffi:convert-from-cstring
+    (uffi:with-foreign-object (time 'time-t)
+      (setf (uffi:deref-pointer time :unsigned-long) secs)
+      (asctime (gmtime time))))))
 
+(deftest :time.3
+    (posix-time-to-asctime 0)
+  "Thu Jan  1 00:00:00 1970")