test for multiply-interrupted sleeps
authorNikodemus Siivola <nikodemus@random-state.net>
Wed, 24 Aug 2011 12:35:36 +0000 (15:35 +0300)
committerNikodemus Siivola <nikodemus@random-state.net>
Wed, 24 Aug 2011 13:18:38 +0000 (16:18 +0300)
  Make sure the time take by the interrupt is tallied
  correctly.

tests/signals.impure.lisp

index 093bf23..1cb5fd3 100644 (file)
              (sb-ext:with-timeout 0.1 (sleep 1) t))))
      (sb-ext:timeout ()
        nil))))
+
+(with-test (:name :sleep-many-interrupts)
+  (let ((n 0)
+        (timer nil))
+    (flet ((trip ()
+             (when (< (incf n) 5)
+               (sleep 0.1)
+               (schedule-timer timer 0.1))))
+      (setf timer (make-timer #'trip))
+      (schedule-timer timer 0.1)
+      (let ((start (get-internal-real-time)))
+        (sleep 1.5)
+        (let ((ticks (/ (float (- (get-internal-real-time) start))
+                        internal-time-units-per-second)))
+          (assert (< 1.4 ticks 1.6))
+          (assert (= n 5)))))))